diff --git a/AdventOfCode.InputFetcher/Program.cs b/AdventOfCode.InputFetcher/Program.cs
index 4cb2467..931e136 100644
--- a/AdventOfCode.InputFetcher/Program.cs
+++ b/AdventOfCode.InputFetcher/Program.cs
@@ -17,8 +17,8 @@ namespace AdventOfCode.InputFetcher
var sessionKey = Console.ReadLine();
Console.WriteLine("Please input the target directory for the input files! Default: Current working directory");
var targetDir = SanitizeInput(Console.ReadLine(), Directory.GetCurrentDirectory());
- Console.WriteLine("File Name Format? Default: \"{YEAR}_{TYPE}_Day_{DAY}{PART}.txt\" => 2022_Input_Day_1.txt or 2022_Answer_Day_1-PartB");
- var format = SanitizeInput(Console.ReadLine(), "{YEAR}_{TYPE}_Day_{DAY}{PART}.txt");
+ Console.WriteLine("File Name Format? Default: \"{YEAR}_{TYPE}_Day_{DAY}{PART}.tst.data\" => 2022_Input_Day_1.tst.data or 2022_Answer_Day_1A.tst.data");
+ var format = SanitizeInput(Console.ReadLine(), "{YEAR}_{TYPE}_Day_{DAY}{PART}.tst.data");
Console.WriteLine("Pull Answers? (Y/N) Default: Y");
var answer = SanitizeInput(Console.ReadLine(), "Y");
Console.WriteLine("Overwrite? (Y/N) Default: N");
@@ -44,7 +44,7 @@ namespace AdventOfCode.InputFetcher
//Input data not available yet
continue;
}
-
+
}
diff --git a/AdventOfCode.Tests/AdventOfCode.Tests.csproj b/AdventOfCode.Tests/AdventOfCode.Tests.csproj
index 1319c68..d2626b2 100644
--- a/AdventOfCode.Tests/AdventOfCode.Tests.csproj
+++ b/AdventOfCode.Tests/AdventOfCode.Tests.csproj
@@ -211,6 +211,57 @@
Always
+
+ Always
+
+
+ Always
+
+
+ Always
+
+
+ Always
+
+
+ Always
+
+
+ Always
+
+
+ Always
+
+
+ Always
+
+
+ Always
+
+
+ Always
+
+
+ Always
+
+
+ Always
+
+
+ Always
+
+
+ Always
+
+
+ Always
+
+
+ Always
+
+
+ Always
+
PreserveNewest
diff --git a/AdventOfCode.Tests/Data/2024_Answer_Day_1A.tst.data b/AdventOfCode.Tests/Data/2024_Answer_Day_1A.tst.data
new file mode 100644
index 0000000..1387933
--- /dev/null
+++ b/AdventOfCode.Tests/Data/2024_Answer_Day_1A.tst.data
@@ -0,0 +1 @@
+2375403
\ No newline at end of file
diff --git a/AdventOfCode.Tests/Data/2024_Answer_Day_1B.tst.data b/AdventOfCode.Tests/Data/2024_Answer_Day_1B.tst.data
new file mode 100644
index 0000000..8e26170
--- /dev/null
+++ b/AdventOfCode.Tests/Data/2024_Answer_Day_1B.tst.data
@@ -0,0 +1 @@
+23082277
\ No newline at end of file
diff --git a/AdventOfCode.Tests/Data/2024_Answer_Day_2A.tst.data b/AdventOfCode.Tests/Data/2024_Answer_Day_2A.tst.data
new file mode 100644
index 0000000..2d3d9c2
--- /dev/null
+++ b/AdventOfCode.Tests/Data/2024_Answer_Day_2A.tst.data
@@ -0,0 +1 @@
+472
\ No newline at end of file
diff --git a/AdventOfCode.Tests/Data/2024_Answer_Day_2B.tst.data b/AdventOfCode.Tests/Data/2024_Answer_Day_2B.tst.data
new file mode 100644
index 0000000..e157b5b
--- /dev/null
+++ b/AdventOfCode.Tests/Data/2024_Answer_Day_2B.tst.data
@@ -0,0 +1 @@
+520
\ No newline at end of file
diff --git a/AdventOfCode.Tests/Data/2024_Answer_Day_3A.tst.data b/AdventOfCode.Tests/Data/2024_Answer_Day_3A.tst.data
new file mode 100644
index 0000000..93de78f
--- /dev/null
+++ b/AdventOfCode.Tests/Data/2024_Answer_Day_3A.tst.data
@@ -0,0 +1 @@
+188741603
\ No newline at end of file
diff --git a/AdventOfCode.Tests/Data/2024_Answer_Day_3B.tst.data b/AdventOfCode.Tests/Data/2024_Answer_Day_3B.tst.data
new file mode 100644
index 0000000..0e915bf
--- /dev/null
+++ b/AdventOfCode.Tests/Data/2024_Answer_Day_3B.tst.data
@@ -0,0 +1 @@
+67269798
\ No newline at end of file
diff --git a/AdventOfCode.Tests/Data/2024_Answer_Day_4A.tst.data b/AdventOfCode.Tests/Data/2024_Answer_Day_4A.tst.data
new file mode 100644
index 0000000..7feed5d
--- /dev/null
+++ b/AdventOfCode.Tests/Data/2024_Answer_Day_4A.tst.data
@@ -0,0 +1 @@
+2462
\ No newline at end of file
diff --git a/AdventOfCode.Tests/Data/2024_Answer_Day_4B.tst.data b/AdventOfCode.Tests/Data/2024_Answer_Day_4B.tst.data
new file mode 100644
index 0000000..0bc965d
--- /dev/null
+++ b/AdventOfCode.Tests/Data/2024_Answer_Day_4B.tst.data
@@ -0,0 +1 @@
+1877
\ No newline at end of file
diff --git a/AdventOfCode.Tests/Data/2024_Input_Day_1.tst.data b/AdventOfCode.Tests/Data/2024_Input_Day_1.tst.data
new file mode 100644
index 0000000..5e9ac53
--- /dev/null
+++ b/AdventOfCode.Tests/Data/2024_Input_Day_1.tst.data
@@ -0,0 +1,1000 @@
+46669 36559
+54117 62675
+25659 15179
+18867 82784
+94354 78485
+28985 76228
+42358 34206
+59950 58682
+97799 24655
+52935 64167
+59303 53728
+85106 71005
+50792 91433
+13407 14222
+67886 61779
+16895 63137
+30061 23324
+52760 28081
+58542 49063
+90229 61487
+13000 11872
+75051 16072
+95703 59610
+71514 95236
+38533 15786
+96889 17973
+50570 62950
+22045 76693
+57193 91433
+14748 85022
+10514 38767
+29334 47840
+88964 45642
+48941 39483
+70592 24655
+93664 22449
+96355 69515
+81294 74800
+48811 85577
+45071 85562
+92092 82630
+84197 76933
+97582 13139
+87792 86408
+54977 27338
+99783 29891
+69620 61216
+13987 77826
+99852 96463
+91433 60831
+78088 46665
+72987 42777
+42868 69997
+68892 46927
+34108 66123
+43478 18458
+19787 42868
+94776 47041
+79484 42868
+51651 87993
+24205 29529
+44859 90283
+20200 73827
+87459 73406
+56046 83755
+91769 22449
+67206 27695
+12181 17936
+60868 83249
+38752 22334
+99845 94472
+41505 61216
+60128 24655
+29568 78485
+22811 63720
+58897 73583
+72379 79339
+37663 41578
+79732 61216
+73155 46563
+81753 43279
+51621 51888
+93416 86408
+47921 59610
+80800 23324
+96164 73406
+11851 98656
+23151 90283
+38856 89669
+68276 82552
+98955 32695
+54728 30695
+29338 75446
+62950 59047
+65523 19589
+37775 59752
+44035 55601
+88679 53778
+51799 86633
+88184 62950
+91162 78485
+93338 54646
+88930 17554
+86160 77826
+11460 56897
+25918 45594
+72148 91433
+92158 37114
+93731 49360
+87043 44224
+33307 76228
+28611 70786
+13314 61216
+65566 40058
+20245 63137
+37773 33408
+78163 30754
+63537 76662
+64165 11339
+80838 23324
+51282 29108
+25277 59610
+59407 75468
+67162 32283
+29618 22449
+38169 77435
+74644 65347
+15925 76228
+64235 87695
+14313 31523
+65574 70278
+94576 46927
+28941 76693
+56933 75648
+90283 20996
+15912 76693
+37371 11483
+42928 61216
+20043 15456
+79060 50351
+95841 86342
+90503 22449
+34098 55194
+59349 27339
+52463 49245
+44382 59610
+86377 39994
+77346 51349
+32396 82630
+89974 40626
+56849 67629
+62875 86860
+56067 34945
+92962 49059
+62901 46892
+25886 77783
+21697 96304
+38147 17270
+14550 90283
+13342 70663
+70611 68152
+20481 21488
+28904 58215
+26634 39518
+52203 30752
+66212 78485
+90182 98936
+20740 15786
+66065 65617
+61202 45164
+26862 99261
+58796 40132
+78079 70988
+81851 93597
+71297 91433
+92854 65509
+80295 27424
+63299 44867
+15813 58215
+16650 76933
+53617 23324
+26984 16067
+18903 22496
+45338 10448
+78888 63137
+45642 41937
+33541 24655
+48364 44977
+45753 86408
+38974 87966
+74367 95952
+30987 24768
+69198 61027
+79165 23324
+36565 49245
+93880 23324
+58577 22449
+88572 11153
+23891 35210
+57919 56916
+68618 29125
+69689 24742
+63792 67434
+42378 91433
+30886 85562
+68874 73316
+47080 76228
+17364 50012
+26523 95236
+91160 12505
+82072 63137
+85218 88792
+21179 45280
+83540 22449
+62790 75446
+99201 76966
+24655 91601
+15468 59236
+69939 40216
+26652 51063
+72139 22449
+38765 15786
+37220 73406
+46720 15786
+23324 12724
+28463 22865
+74495 12866
+81338 47719
+48576 67579
+57908 85562
+96483 75446
+12243 46927
+18922 30274
+96066 50932
+32506 57089
+63137 18017
+80079 34565
+78238 57507
+29990 85562
+63341 77826
+53097 89535
+77250 67346
+18752 22230
+84225 91433
+23056 22728
+72203 44957
+12182 95236
+54287 57853
+78417 76693
+79546 61111
+97938 90283
+28464 91433
+43864 61216
+25327 45949
+76917 18588
+88304 61216
+16599 91970
+90372 38723
+78721 47963
+61712 73406
+40506 20355
+80458 13289
+50334 49245
+10066 99664
+33077 90921
+27603 87695
+51307 62936
+18791 49524
+90086 98799
+61487 76228
+80381 77826
+30353 75446
+46686 63367
+67471 50064
+22404 67635
+73240 47665
+38824 85562
+52873 78957
+89294 79544
+55505 36605
+21363 73406
+54456 90283
+26147 51518
+51044 98236
+27948 22449
+28048 76228
+52852 87695
+33020 76933
+66414 51084
+29109 75446
+10430 72012
+53057 63137
+99531 27252
+77723 76933
+87307 24655
+81886 50012
+97967 90283
+24057 64661
+23205 63137
+18662 76693
+89627 25871
+70743 50012
+27182 88872
+75446 50012
+88535 38500
+83093 69995
+67214 88991
+79553 33819
+61690 50012
+76228 98865
+50955 95236
+93037 19499
+24196 49526
+59691 67094
+35278 90283
+61597 23324
+56941 37523
+20120 97355
+87535 87032
+41203 63891
+16392 87787
+72594 75446
+95236 76693
+59675 65584
+68845 90283
+78485 33285
+44280 62583
+98434 19636
+86408 22449
+49172 15344
+33704 41932
+57434 72228
+72242 16591
+55017 75193
+57538 97837
+66108 35681
+22194 32467
+74204 41085
+75528 56270
+55070 13932
+12362 69548
+80880 46460
+92437 86408
+62756 37768
+61713 33991
+65166 15786
+66265 57948
+59605 81427
+95292 61216
+53322 61216
+92343 77826
+57881 43673
+25694 79166
+50803 62933
+12557 76228
+30235 63137
+60145 59610
+69385 54371
+67591 95236
+75778 57891
+32402 72023
+85763 79371
+77826 58215
+54653 52717
+43427 73406
+87693 78923
+42560 99999
+56662 98907
+34358 15149
+72062 87084
+87457 25270
+79098 46927
+96786 63137
+12893 90634
+72153 22959
+79455 13986
+94850 28046
+73433 11290
+18596 58215
+82630 78485
+33604 14849
+15222 74035
+61085 23906
+36243 10054
+61417 39396
+97586 61216
+38303 13532
+46927 78485
+97158 28915
+47223 24655
+71928 16050
+48850 10274
+63968 59834
+74998 51096
+12237 16089
+15340 68204
+28588 86420
+27774 27427
+87417 76693
+68167 20436
+82772 87695
+16746 41792
+49969 76228
+68165 28891
+87687 73914
+31995 73403
+51948 57812
+92704 73961
+44851 23324
+81688 48766
+92752 24655
+87448 42868
+14258 13555
+97152 95236
+16893 58215
+49941 72107
+92908 95236
+30101 75629
+83485 19453
+70442 95236
+90285 24655
+55498 23539
+38791 77826
+51701 84708
+30330 59334
+59586 61909
+69360 16800
+96194 66338
+26813 94571
+16730 60469
+20452 61216
+88869 62950
+36471 85562
+48094 11994
+53210 58215
+25883 55787
+67454 16997
+28364 91433
+29596 18200
+39653 42554
+78247 98641
+68869 10213
+37243 61575
+78248 91234
+86264 24655
+42101 22449
+81992 77493
+65269 73406
+79512 88490
+23050 68216
+71745 32372
+12275 22311
+72704 57374
+40391 37266
+93996 81448
+60235 71232
+23986 45642
+31562 61893
+76700 68049
+95646 70208
+19567 23324
+91012 93539
+29318 15559
+25010 11836
+35563 51368
+54704 76228
+49819 40935
+33230 61216
+79086 14268
+51170 18475
+66485 81497
+18849 62950
+64392 24655
+95125 54268
+57789 27894
+59448 86408
+47257 86384
+15786 91433
+61948 42868
+86728 58933
+99498 59808
+52830 35210
+70990 70735
+67116 15019
+63821 73107
+27729 77826
+61964 32077
+36375 88334
+25299 59610
+86368 55921
+86423 71213
+73061 88241
+98588 25835
+13938 21656
+99826 95236
+37553 68730
+64667 62007
+93565 82405
+42768 29866
+42731 76693
+20204 30794
+71882 28231
+93933 73406
+32525 84373
+89842 64081
+31297 45009
+27264 75446
+93838 64694
+60747 78485
+13328 22449
+40592 95236
+91398 20009
+11574 90283
+96548 35894
+34268 49890
+86325 39672
+63884 15842
+30812 23567
+69993 24655
+22994 85977
+36141 24655
+17881 23324
+87053 12341
+85897 11252
+64282 31676
+83859 82810
+37811 70856
+30617 65639
+12124 82075
+25279 61216
+50876 76933
+93773 75446
+11066 73504
+75494 22449
+10852 22449
+75214 75446
+17183 55952
+40332 91433
+29117 20899
+30888 45919
+73512 32221
+78708 26250
+13367 76228
+92813 97383
+51110 47725
+25552 95236
+31096 38747
+83451 76754
+22497 49245
+42453 76693
+91372 53487
+91733 61487
+71459 79153
+45515 95236
+25529 81102
+21597 73394
+43122 82630
+63641 64171
+77303 61216
+37944 58215
+11386 77826
+77018 79070
+82992 96114
+51119 77798
+73221 23324
+18732 34798
+42279 46927
+89508 73730
+27791 80194
+28523 95308
+27555 12881
+29648 54618
+13577 98443
+56947 76693
+36475 87505
+38270 71142
+84688 28274
+19271 76693
+23825 22945
+95718 51459
+91764 51788
+27386 42182
+18677 55015
+67612 76693
+11810 44178
+87498 75376
+74359 45642
+35714 56252
+86955 70950
+28543 86408
+21253 57179
+81283 73406
+54208 83349
+87550 37110
+88194 76693
+68969 49473
+94869 80272
+18066 64411
+31310 15786
+57043 78434
+55440 89060
+88510 61216
+69221 64444
+45336 23324
+39240 51320
+86973 61853
+78101 71772
+24917 38491
+30454 84950
+95917 89580
+96914 78485
+77197 50552
+67382 31174
+73864 88832
+68112 77826
+34762 15786
+53167 36945
+58539 32505
+67660 41818
+89709 35248
+87156 49245
+98670 84396
+12340 44671
+51671 87514
+47948 18060
+69823 76228
+35233 73406
+52807 24655
+94057 26388
+63741 59610
+82004 66606
+93513 60231
+75084 35371
+10372 88851
+89866 46927
+24553 79589
+20556 15786
+46412 22449
+78846 24491
+98088 76693
+31170 92173
+94801 52961
+51058 13445
+70594 50037
+35346 50338
+78257 23324
+73406 21744
+68359 46927
+41213 55805
+45250 42131
+43279 18812
+69199 15786
+53725 76497
+69398 37768
+11742 73406
+65219 58877
+31780 38597
+46113 90283
+30112 76693
+37748 60472
+12596 58428
+22346 98357
+43346 53539
+89142 78485
+14544 38869
+31577 55185
+55937 87695
+41189 35667
+25078 73406
+59330 94542
+84733 16627
+82488 73406
+82948 58215
+16789 91433
+53671 27376
+70549 50516
+97581 54013
+91708 61216
+64783 37768
+89911 46097
+74663 76228
+70646 60061
+23944 31181
+30697 93934
+27561 95236
+52655 68084
+90627 38964
+27641 35708
+14184 91433
+42968 17857
+72204 30261
+77368 35970
+17048 89985
+20782 18407
+64749 78485
+41007 26752
+11880 97776
+44202 24368
+97301 23407
+61077 74465
+38804 77826
+13897 48877
+14508 37578
+61383 53091
+16885 29289
+37225 52081
+64685 35992
+31682 95236
+63631 10368
+45781 24466
+24092 65388
+31728 76228
+45777 22113
+51779 60657
+33859 29358
+53484 78827
+61319 49899
+36093 48789
+40584 77905
+56381 54295
+22662 38614
+24641 22449
+88324 59610
+78924 95236
+74820 61487
+77398 60846
+99595 63137
+65832 49245
+89471 11285
+90188 76593
+97763 71720
+98824 77826
+14418 20513
+39862 73406
+55906 78485
+86059 29127
+20742 97241
+88269 91433
+17962 86920
+32602 49245
+95412 59994
+83267 70431
+36825 24655
+89562 43279
+16860 72596
+53577 96790
+46665 76574
+71813 67270
+35210 15445
+33400 76693
+96069 65213
+46322 39179
+95285 91433
+95767 86269
+15236 76933
+27778 49357
+16170 30140
+57870 63137
+80794 63137
+84281 57089
+91022 26553
+55848 49245
+13825 49245
+91230 87028
+54860 73406
+66596 53306
+61216 64519
+50012 76693
+36465 83257
+87188 75446
+73588 21801
+94757 20402
+28170 60768
+24891 38174
+91787 76693
+63785 43279
+14566 90752
+55392 90283
+39790 67787
+40079 80845
+33827 34045
+79864 78485
+82775 43279
+67159 10612
+53001 37768
+52173 58727
+28322 76933
+84518 33044
+76693 27243
+49225 44682
+22449 75446
+80658 49373
+43255 22449
+59058 73490
+44951 49402
+71201 28356
+55944 42868
+33202 83266
+86699 66983
+88453 85814
+77034 58838
+85850 76228
+41409 88724
+36649 11112
+88428 93089
+59610 66639
+48137 90283
+86400 90487
+28104 46927
+43317 59610
+85510 67445
+99532 78485
+70359 15786
+42034 88131
+80957 68660
+43032 95236
+33582 40382
+58215 94486
+19221 36076
+91307 77826
+64821 76693
+89517 63137
+53579 18009
+82987 91433
+94727 51659
+19906 91433
+80106 43532
+28240 71843
+29670 23324
+39700 87695
+47283 78485
+39801 76933
+25980 96028
+21945 71497
+78407 78485
+85640 45318
+51978 50012
+11601 76575
+83651 31125
+95958 95956
+77749 23336
+13537 84975
+88065 52971
+38210 98657
+40101 36035
+32397 75288
+96618 16256
+42989 19324
+72932 43609
+18771 34539
+58557 86408
+92319 79573
+38295 94964
+10485 63913
+31358 76228
+38846 75446
+72221 22449
+66323 76933
+57089 60456
+88674 50047
+75813 15508
+22055 60704
+69047 96120
+73862 15909
+83222 67849
+76393 80920
+76522 69689
+71666 76228
+63583 12283
+19328 28164
+39355 77826
+85096 76933
+42056 31488
+92747 13579
+84937 47182
+17024 82132
+56871 90283
+97790 46927
+22993 68190
+68482 55096
+79976 85107
+90940 52882
+65919 63137
+62007 49245
+13415 59610
+26893 24655
+44653 95236
+33612 99036
+46478 42868
+70970 80135
+60481 95236
+15301 59360
+17212 37414
+80899 75446
+67495 21742
+18319 14479
+34445 58215
+39486 42282
+36028 44519
+92208 46483
+88362 90245
+53764 48959
+85604 74027
+96035 95893
+29561 30742
+74152 61216
+49507 46274
+87695 76693
+18100 15786
+21313 73406
+62234 12938
+25025 49466
+60890 74332
+11565 33629
+84299 76228
+34861 90283
+21353 73528
+99978 66897
+46529 22449
+13104 25219
+68752 88910
+26478 76933
+87668 43279
+49777 25060
+86763 75446
+73023 45052
+72004 51554
+88141 23926
+33130 82630
+82472 22449
+64754 80502
+57842 62007
+93088 72374
+45727 93735
+53996 19768
+49245 46046
+85299 19540
+56446 63137
+92445 82605
+67790 75139
+16758 26579
+66664 89655
+32710 80610
+75707 49245
+65814 95623
+58220 87669
+16612 76228
+24698 16590
+23184 73406
+91238 15786
+11843 91433
+86625 85562
+41307 77826
+26670 69594
+64855 63137
+63544 83733
+56574 24108
+79163 67158
+99311 95420
+17640 85562
+66865 91397
+31429 37768
+85562 49245
+93263 76716
+81248 45189
+91852 47062
+58324 52943
+63446 36264
+96407 87488
+46436 57089
+12385 26581
+91195 25257
+88835 32326
+21315 77826
+24216 97211
+37075 50012
+46375 49245
+68824 88237
+24882 44857
+60941 75157
+61864 64400
+41858 97465
+83877 61487
+26722 85343
+52455 55804
+22568 74046
+93290 83623
+76933 73008
+61124 76228
+32025 67436
+26293 77826
+46658 78485
+12043 52527
+47464 24655
+56275 41945
+57840 33284
+60040 82705
+10256 95591
+49049 90283
+37768 43279
diff --git a/AdventOfCode.Tests/Data/2024_Input_Day_2.tst.data b/AdventOfCode.Tests/Data/2024_Input_Day_2.tst.data
new file mode 100644
index 0000000..f9a38d0
--- /dev/null
+++ b/AdventOfCode.Tests/Data/2024_Input_Day_2.tst.data
@@ -0,0 +1,1000 @@
+8 11 14 16 15
+23 25 27 30 30
+19 20 21 22 23 25 26 30
+16 19 22 25 26 28 35
+59 61 59 61 63
+23 25 22 23 22
+5 8 9 12 11 14 15 15
+87 90 91 92 89 91 95
+36 38 40 43 40 41 47
+37 40 40 42 45 48 49 52
+40 41 41 43 45 43
+32 34 36 36 38 40 40
+2 4 6 6 7 11
+1 2 5 5 7 12
+76 79 81 85 88
+34 37 38 40 42 46 43
+33 34 35 39 39
+66 67 70 74 77 81
+77 80 84 85 86 87 89 96
+29 31 34 40 42 45 47 48
+30 32 34 36 39 46 47 44
+37 39 42 49 50 50
+76 78 80 83 85 86 93 97
+56 57 58 65 68 75
+43 40 41 44 45 46 48 51
+35 33 34 37 38 36
+68 67 70 73 76 76
+87 86 87 89 92 96
+19 18 21 24 26 27 34
+80 78 79 81 78 81
+47 44 42 44 45 44
+27 26 28 31 28 28
+89 88 91 88 90 92 93 97
+64 63 66 63 66 68 74
+40 39 40 43 43 46 49
+43 41 41 44 42
+56 55 58 61 61 62 63 63
+48 45 45 48 50 53 57
+35 33 36 39 39 45
+67 65 68 72 75 76 78 79
+32 29 30 34 37 40 43 40
+66 64 68 71 72 72
+78 75 78 79 83 84 87 91
+11 8 12 13 20
+73 70 72 75 77 78 83 86
+59 56 61 63 61
+60 58 59 60 61 66 66
+76 75 80 82 86
+64 63 70 72 75 80
+2 2 4 5 7 9
+64 64 66 69 72 75 73
+45 45 47 48 49 51 51
+64 64 65 67 69 71 75
+77 77 79 81 84 91
+77 77 76 77 78 80
+43 43 45 46 43 44 47 46
+57 57 59 57 57
+9 9 12 9 11 14 18
+69 69 70 71 72 71 74 81
+50 50 53 54 54 57
+31 31 34 34 35 37 38 35
+10 10 12 15 16 19 19 19
+64 64 65 65 66 70
+49 49 51 51 58
+20 20 22 26 28
+75 75 79 80 81 84 83
+63 63 67 70 72 74 76 76
+86 86 87 90 94 98
+33 33 35 39 42 44 49
+70 70 73 79 80
+65 65 66 73 75 78 79 78
+85 85 90 91 94 94
+31 31 38 39 42 45 49
+22 22 25 32 34 35 40
+8 12 14 15 17 18 20 21
+33 37 38 39 38
+34 38 40 42 43 44 44
+49 53 54 57 61
+30 34 36 38 41 47
+79 83 84 81 83
+90 94 93 95 93
+88 92 94 95 94 94
+18 22 25 23 25 28 32
+71 75 74 75 82
+80 84 87 87 88 91 92
+45 49 51 51 52 50
+40 44 45 48 48 49 49
+21 25 27 29 29 33
+25 29 30 31 31 33 38
+49 53 57 58 61
+70 74 75 79 82 80
+64 68 72 73 74 76 76
+50 54 55 56 58 61 65 69
+59 63 64 66 68 72 73 80
+70 74 77 78 79 84 87
+12 16 23 25 26 24
+8 12 13 16 22 23 24 24
+11 15 18 19 21 23 29 33
+69 73 76 77 82 85 92
+10 16 17 20 23
+11 18 19 22 25 26 25
+45 51 54 55 55
+19 25 27 30 31 32 33 37
+20 27 30 31 33 35 38 43
+87 93 96 94 96
+79 84 87 88 89 87 86
+38 44 43 45 47 49 52 52
+25 30 31 29 33
+18 25 27 28 26 31
+25 30 30 33 34
+8 15 17 20 20 17
+24 29 31 31 31
+20 27 30 30 34
+55 62 63 66 66 72
+2 8 11 14 18 21 23 24
+33 39 43 46 48 50 51 48
+22 29 30 34 34
+79 84 88 90 93 95 99
+61 66 70 72 74 81
+34 40 41 44 45 46 52 54
+68 73 74 79 77
+21 28 35 37 40 40
+47 53 59 60 64
+57 62 63 66 71 78
+14 12 9 6 4 3 5
+46 44 43 42 40 37 37
+76 75 72 71 68 64
+54 53 52 51 45
+69 68 71 69 68
+64 63 64 63 60 58 56 58
+77 76 75 76 76
+17 16 17 16 13 11 7
+38 37 34 35 28
+60 58 58 55 52
+70 67 64 61 61 59 62
+95 93 91 90 89 89 89
+72 71 69 66 66 62
+81 80 80 77 74 73 72 67
+16 13 12 8 7 6 5
+25 24 21 19 17 15 11 14
+19 18 14 12 12
+66 65 64 63 59 55
+34 31 27 24 21 18 11
+99 96 94 87 84
+46 43 41 34 33 35
+14 11 9 2 2
+57 55 48 45 43 41 38 34
+69 66 64 61 55 53 46
+69 70 69 66 63 60 58
+61 62 60 59 58 55 54 57
+69 70 67 64 63 61 61
+29 31 30 27 26 25 22 18
+63 65 62 59 57 54 47
+31 33 32 33 31 29
+94 95 92 89 91 94
+45 46 45 42 40 41 41
+70 71 68 66 63 65 61
+94 95 94 96 93 92 90 84
+10 12 12 9 7 4 2
+33 35 35 32 29 30
+74 77 74 74 74
+32 34 34 32 28
+72 73 73 72 69 64
+59 60 58 57 53 50 47
+79 82 79 75 74 73 75
+38 41 39 38 37 36 32 32
+74 75 73 69 65
+43 44 40 39 33
+52 55 54 52 45 42 40 37
+28 29 24 21 20 21
+50 52 51 50 47 46 40 40
+15 17 10 9 7 3
+21 23 16 15 9
+39 39 36 35 32
+95 95 93 90 87 90
+49 49 46 43 42 42
+29 29 28 26 22
+31 31 30 27 25 22 15
+15 15 13 12 14 11 10
+77 77 76 79 77 75 78
+42 42 41 42 39 38 35 35
+7 7 8 6 2
+96 96 94 91 92 90 84
+73 73 73 72 71
+57 57 56 56 53 51 49 52
+87 87 84 82 81 81 79 79
+38 38 35 33 31 28 28 24
+62 62 62 60 55
+35 35 32 31 27 26
+78 78 75 72 71 67 66 69
+47 47 44 40 40
+72 72 71 69 67 63 61 57
+48 48 46 42 35
+65 65 60 58 56 55 54
+92 92 89 87 86 81 83
+66 66 64 61 58 52 52
+29 29 26 25 23 22 17 13
+47 47 42 40 33
+50 46 43 41 39 38 35 34
+39 35 34 32 30 27 28
+21 17 16 15 12 10 9 9
+71 67 66 65 61
+38 34 31 29 28 22
+87 83 80 81 78
+94 90 92 90 91
+83 79 78 75 78 75 75
+36 32 35 33 30 29 27 23
+87 83 84 82 76
+77 73 70 69 69 68 66 63
+94 90 89 87 87 85 86
+63 59 58 57 54 51 51 51
+32 28 28 27 23
+36 32 31 29 29 28 23
+42 38 34 31 29 28
+33 29 27 25 21 18 20
+29 25 24 21 17 16 13 13
+90 86 85 82 78 74
+68 64 62 58 56 51
+73 69 66 61 58 56
+93 89 87 85 82 75 72 74
+80 76 73 72 69 68 62 62
+40 36 34 32 30 25 24 20
+55 51 50 48 46 40 39 33
+25 20 19 18 17 14
+98 91 89 87 86 84 82 83
+58 52 51 49 49
+75 70 69 67 65 61
+91 84 83 82 80 78 76 69
+37 30 32 30 28 26 23 22
+48 42 40 42 41 39 40
+75 69 68 67 66 64 67 67
+90 85 86 85 83 82 79 75
+34 29 32 30 24
+93 87 86 84 83 83 82
+94 87 84 83 83 86
+19 14 14 13 12 12
+94 89 87 87 84 80
+60 53 50 47 44 44 37
+41 34 31 27 24 21
+31 25 23 19 20
+79 74 72 68 67 66 63 63
+28 23 21 20 19 17 13 9
+97 91 87 85 82 80 73
+96 91 88 86 81 78 75 72
+58 51 48 41 38 40
+35 28 25 22 16 13 13
+45 40 35 34 30
+38 33 30 23 21 14
+18 20 22 25 27 28 25
+78 80 82 83 86 89 90 90
+1 3 6 9 13
+21 24 25 28 30 31 33 39
+90 91 93 92 94
+47 49 52 50 51 54 56 54
+25 28 30 33 34 33 33
+20 21 24 25 26 27 25 29
+77 78 77 79 84
+64 67 68 71 72 72 75
+13 15 18 21 21 19
+33 35 37 37 38 38
+15 17 20 22 23 26 26 30
+56 57 58 58 64
+20 21 24 28 29 31
+41 43 47 50 49
+83 86 90 93 93
+8 11 15 18 20 24
+83 84 88 90 92 99
+54 55 58 59 65 68
+60 62 63 69 70 71 70
+57 58 65 67 70 70
+54 55 62 64 67 70 74
+17 18 19 21 24 30 32 38
+30 29 31 34 35 37 39
+27 24 25 26 27 30 29
+9 6 8 10 11 14 17 17
+32 31 32 35 37 41
+58 55 57 59 60 65
+25 22 25 26 25 27 30 32
+73 72 74 76 79 81 79 77
+5 2 5 8 10 12 10 10
+87 85 87 90 91 93 90 94
+38 37 38 40 41 42 39 45
+37 35 37 40 40 41
+14 11 11 14 16 18 16
+71 68 71 71 71
+29 26 26 29 30 33 37
+69 68 68 71 74 76 79 85
+43 40 44 46 47 48 50
+46 45 47 48 50 54 57 55
+23 22 26 29 29
+36 34 36 40 42 43 47
+13 10 12 16 18 19 25
+64 63 66 67 68 75 76 78
+72 70 75 77 79 80 77
+12 10 11 16 19 19
+64 62 64 69 70 73 75 79
+50 48 51 54 61 64 66 71
+12 12 14 16 18
+40 40 42 45 47 50 49
+62 62 65 67 67
+70 70 72 74 78
+10 10 11 12 13 14 15 20
+77 77 74 75 77
+40 40 38 39 38
+86 86 87 85 85
+48 48 49 46 50
+7 7 10 7 8 13
+19 19 20 20 21 24
+20 20 23 26 27 27 26
+40 40 42 45 46 46 46
+88 88 90 90 91 95
+65 65 65 67 69 76
+81 81 83 87 88 90
+48 48 49 51 55 57 54
+35 35 39 42 44 45 48 48
+70 70 73 75 78 79 83 87
+5 5 9 12 17
+10 10 11 12 15 21 22
+30 30 37 38 39 42 41
+77 77 82 84 87 90 93 93
+11 11 13 20 24
+59 59 61 66 71
+12 16 17 20 22 24 25
+52 56 57 59 61 62 64 61
+79 83 86 88 91 91
+16 20 21 23 27
+72 76 79 82 84 89
+85 89 86 87 89
+92 96 98 96 94
+32 36 37 34 35 37 38 38
+56 60 61 58 61 62 65 69
+78 82 80 81 87
+47 51 53 54 57 59 59 61
+53 57 57 59 60 62 60
+73 77 77 80 81 81
+83 87 88 89 90 90 94
+78 82 85 86 86 93
+37 41 42 43 46 48 52 53
+71 75 76 77 81 83 84 82
+78 82 86 88 91 91
+20 24 27 29 33 37
+54 58 59 61 64 65 69 76
+52 56 59 60 62 69 71
+8 12 14 19 18
+52 56 59 62 67 67
+69 73 74 79 83
+48 52 54 56 57 59 64 69
+84 91 92 93 95
+43 48 50 52 54 51
+76 81 83 85 88 90 90
+18 25 28 30 31 34 38
+49 55 58 61 63 68
+26 33 30 32 34 36 39
+10 17 14 17 15
+80 87 88 85 85
+81 88 91 89 90 93 97
+24 29 32 30 35
+41 47 50 51 54 54 57 58
+60 65 66 68 71 73 73 70
+33 40 40 41 43 45 47 47
+45 50 52 55 55 59
+1 7 10 11 12 12 19
+30 36 39 43 44
+51 58 61 65 63
+24 30 31 32 36 38 38
+46 53 57 59 63
+34 39 40 41 45 46 49 56
+33 38 39 40 41 46 49
+63 69 74 75 74
+74 81 88 91 93 95 95
+26 32 38 41 45
+67 72 79 81 83 86 93
+30 28 27 25 23 21 18 21
+43 40 38 36 33 30 30
+55 52 51 49 48 47 46 42
+21 20 17 16 10
+68 67 69 66 65
+38 35 33 31 33 31 29 32
+85 82 80 79 80 79 76 76
+64 63 66 64 61 57
+42 39 37 34 36 33 32 26
+42 40 37 37 34 31 30
+17 15 15 13 11 10 9 12
+75 73 72 72 72
+50 49 49 47 43
+53 50 47 45 45 38
+61 60 59 58 54 51
+37 36 32 29 30
+15 12 10 6 6
+44 43 42 38 34
+34 32 28 27 21
+24 22 19 18 15 9 8
+60 58 51 50 48 47 46 48
+91 90 88 85 78 76 76
+88 86 81 79 77 73
+89 88 86 84 78 72
+17 18 15 13 12 10
+77 80 78 77 75 78
+44 47 45 44 41 39 39
+14 17 16 13 10 8 4
+90 91 89 87 84 83 76
+51 52 49 52 49 46 45
+30 32 35 32 29 28 29
+15 16 15 16 16
+96 98 99 98 97 93
+83 84 82 81 79 78 81 76
+30 33 30 29 28 28 27
+41 44 42 42 39 36 33 36
+79 82 81 81 81
+48 50 47 47 43
+31 33 33 31 28 27 26 19
+49 50 47 46 42 40 39
+19 21 19 18 15 11 9 10
+52 53 51 49 48 44 42 42
+72 75 71 69 65
+25 27 25 23 22 18 15 9
+35 36 33 30 25 22 19
+76 78 75 73 68 65 68
+96 99 93 91 89 87 84 84
+80 83 82 79 76 69 65
+91 93 90 89 84 77
+78 78 77 74 71
+42 42 41 39 36 35 36
+81 81 80 77 75 74 71 71
+47 47 46 44 42 38
+71 71 68 66 64 61 55
+29 29 26 29 28 25
+76 76 77 74 71 74
+79 79 81 78 77 77
+79 79 76 79 76 75 74 70
+73 73 72 70 69 68 71 66
+59 59 58 55 53 52 52 50
+58 58 56 56 53 51 52
+80 80 79 77 76 76 73 73
+51 51 50 48 48 44
+41 41 41 38 37 36 35 29
+54 54 53 52 48 46 43 40
+25 25 23 19 20
+10 10 9 5 5
+63 63 59 57 55 52 48
+62 62 60 56 53 51 48 42
+40 40 39 37 35 30 29
+38 38 35 34 28 26 28
+90 90 85 84 84
+84 84 81 75 72 68
+76 76 73 68 67 64 59
+37 33 31 29 26 25 23
+88 84 83 80 77 80
+97 93 91 89 88 88
+82 78 77 74 73 70 67 63
+92 88 86 85 84 79
+20 16 14 16 15
+26 22 24 23 22 21 19 21
+57 53 55 54 53 51 51
+24 20 19 21 18 16 12
+56 52 50 49 48 49 46 40
+71 67 67 65 64 62 60
+40 36 36 33 31 29 31
+87 83 80 80 80
+25 21 19 19 17 14 10
+88 84 82 79 77 77 74 67
+23 19 15 14 11 10
+29 25 22 18 16 13 15
+43 39 36 32 32
+90 86 85 82 80 76 74 70
+58 54 50 47 40
+54 50 44 41 38 36
+98 94 88 85 88
+22 18 12 9 8 8
+49 45 38 36 33 29
+56 52 49 47 46 40 39 32
+53 48 47 45 42 41 38
+60 54 53 51 50 49 50
+90 83 82 81 81
+87 81 80 78 74
+25 19 18 16 13 6
+70 64 63 66 64 61
+36 29 26 29 30
+30 25 28 25 23 21 18 18
+81 76 78 76 74 73 69
+73 68 66 64 62 64 63 57
+51 46 46 44 41
+18 12 10 9 7 6 6 7
+38 31 30 30 28 26 24 24
+52 47 44 41 39 39 35
+74 68 65 64 61 58 58 53
+29 23 19 18 16 14 11
+56 50 49 48 44 41 40 41
+36 31 30 28 25 21 19 19
+53 47 46 42 38
+72 67 63 60 59 56 54 47
+35 30 28 26 20 18
+34 27 25 23 18 16 18
+46 39 32 29 26 24 24
+77 71 66 64 61 58 57 53
+77 71 70 63 60 54
+34 34 36 37 40 44 47 51
+55 59 61 62 60
+95 95 92 91 88 91
+92 95 92 89 89 88 89
+81 83 85 87 90 93 99
+30 24 22 15 12
+76 80 81 82 85 87 92 92
+82 83 81 80 80
+24 27 30 31 31 33 35 33
+32 26 28 27 28
+33 26 25 23 21 20 17
+74 70 67 61 60 58 58
+95 95 93 95 98
+50 50 51 49 47 45 47
+85 82 80 78 76 69
+34 27 27 24 21 20 18 13
+60 56 56 55 54 53 51 44
+47 47 53 54 53
+72 72 70 70 70
+9 7 10 11 14 16 15 14
+37 41 42 44 45 46 49 51
+42 36 36 33 33
+61 66 70 71 71
+77 72 70 66 60
+48 44 41 38 39 37 37
+46 43 45 43 41 41
+63 67 70 72 74 75 78 82
+2 3 6 6 9 11 11
+84 82 80 77 75 71 70 66
+94 90 89 92 89 82
+17 17 15 12 11 9 7 5
+72 75 73 73 73
+48 47 45 42 40 39 38 37
+3 4 6 7 9
+33 35 36 37 40 43 44 45
+49 51 52 53 54
+26 28 31 33 34 36
+55 52 50 47 44
+84 81 79 77 75 72 69 68
+90 91 93 94 95 98
+47 45 44 42 39
+22 23 26 28 29 30 32 35
+69 71 74 77 78 80 83
+53 56 57 58 61 64 66
+20 21 22 24 25 27 28 29
+37 34 33 32 31 28
+42 44 47 50 51
+94 91 89 86 83 81
+75 72 69 66 63 62
+50 47 45 42 39 37
+31 33 34 36 39 40
+30 33 35 36 38 40
+30 27 24 22 19 16 15
+20 21 22 25 28 31 33
+68 70 72 73 76 77 79
+13 14 16 19 22
+47 44 41 39 37 34 33 32
+73 75 77 79 81 84
+21 24 26 29 31
+79 81 84 85 88
+56 53 52 51 48 46
+71 74 75 76 77
+66 68 69 71 73 75
+37 35 33 30 28 26 23 20
+47 49 52 55 56 57
+95 93 91 89 86 85 82
+19 21 24 26 28 30
+71 74 76 79 80 82 84 85
+57 55 54 52 50
+75 77 80 81 83 86
+57 55 54 51 49 46
+99 98 97 94 93 91
+29 26 25 23 21 18
+61 60 57 54 51 49 47
+34 33 31 29 27 26
+79 77 74 73 72
+83 86 89 91 92 94
+41 39 36 34 33
+41 38 36 33 30 29 27 25
+16 18 21 22 25 26
+86 85 84 83 81 78 76 73
+28 29 31 34 36 37
+34 31 30 28 26 25
+82 79 77 74 73 72 71
+90 91 92 94 95 98
+47 46 43 41 38 36 34
+62 59 56 54 52
+45 42 40 38 36 34 32
+26 25 22 19 16 15 14
+37 38 40 43 45 46
+84 81 79 76 75 74 71
+77 80 82 85 87 90 92 95
+35 38 39 40 42 45 46 49
+30 33 36 39 41 44
+48 51 54 56 58 59 62
+28 29 30 32 34 35 36 39
+37 39 40 42 44 46
+21 23 24 26 27 28 31 33
+79 78 76 73 70 68 67 66
+38 37 34 32 30 28 27
+77 75 73 72 69 68 66
+13 14 15 18 20 21
+83 81 80 79 77 75
+33 36 38 40 43 44 46 49
+63 61 60 59 56 53 50 47
+23 24 25 26 27 29 30
+97 94 93 92 89
+61 62 63 64 66 69
+32 33 34 37 40
+72 71 68 67 64 62 59
+32 34 36 38 40 41 44 46
+55 52 51 50 48 47 46 45
+36 37 38 39 42
+56 57 59 60 61 63 66
+87 85 82 80 77 76
+8 9 12 14 16
+81 82 83 86 88 90 91 94
+57 58 59 62 65
+49 48 46 45 44 42 41
+75 74 73 71 69
+46 48 49 52 54
+90 89 86 83 82 79 78
+30 32 33 35 37 39 42
+49 48 46 45 44 42
+13 16 17 20 22 25 26 29
+67 64 62 61 59
+32 29 28 25 24 21 19
+57 58 59 60 63 64
+9 11 13 14 17 19 21 22
+43 44 45 48 51 53
+14 16 19 22 25 26 27 28
+77 75 73 71 68 66 64 61
+26 24 22 21 18 17 16
+80 79 78 77 74 72 71
+24 25 28 31 34 35 38
+50 52 55 58 59 62
+52 53 56 58 61 64 65 68
+21 19 16 13 11 10 7 6
+3 5 8 9 10 11
+38 37 36 33 30 27 24
+99 97 96 94 91 88 86
+54 51 48 46 45 43 42
+91 90 89 86 85 83 82 79
+34 37 39 40 43 46 47
+15 16 17 19 21 22 24
+42 41 38 35 33 31 29 27
+87 84 81 80 78 76
+80 82 83 86 89
+82 79 76 75 72 70 68 66
+45 47 50 51 52 55 56
+36 39 41 43 45 47 50
+57 55 54 53 52 51
+76 74 73 72 70 68 66
+67 66 65 62 60
+55 54 53 50 48 45
+80 81 84 85 86 88 91
+38 40 43 45 47 49 50 53
+82 84 87 88 90
+69 72 74 77 78 79 82
+51 53 55 58 60
+19 16 14 11 8 5 3
+42 41 40 38 36
+21 19 16 13 11 10
+29 28 27 25 23
+9 10 12 14 17
+88 89 92 95 96
+65 66 68 70 73 74 77 79
+18 15 14 11 10
+45 48 51 53 56
+84 82 81 79 78 77
+56 58 59 60 62 63 64 66
+67 64 63 60 58 56 54 53
+92 90 89 86 83 82 80 79
+54 56 57 60 62 64 67 69
+97 96 95 93 91 89
+65 64 62 59 57 56 55 53
+47 49 52 54 57 59 62
+78 81 84 86 88 91 92 93
+24 26 27 28 30 32
+49 52 54 55 58 61
+84 83 82 81 80
+29 30 31 34 36 39 40
+86 85 82 79 78
+31 32 34 35 36
+77 76 73 72 69 67 65
+60 59 58 55 53 51 48 46
+65 68 70 71 72
+56 54 52 51 48 45
+38 36 33 31 28 25 23
+38 40 42 43 44
+88 86 85 83 82 81 79 78
+13 11 10 9 8
+81 79 78 77 76
+81 82 85 86 89
+66 63 60 58 55
+3 4 6 9 12 15 17 19
+31 34 35 36 39
+26 27 29 32 35 36 39 42
+26 25 22 21 20 19 16
+84 82 80 78 75
+70 71 72 75 76 78 80 83
+63 60 58 55 52
+65 63 61 58 56 54
+60 61 62 63 65
+44 43 42 40 39 38
+2 5 6 7 9 10 13
+4 6 8 9 11 12 14
+61 58 57 56 55
+71 72 73 75 78
+60 63 65 67 70 71 73
+20 17 14 13 10
+64 66 69 72 74 75 76 78
+41 44 47 48 49 50 51 54
+48 47 44 41 39 36
+30 32 33 35 37 40 43
+10 12 15 17 20 21 22 25
+5 8 11 13 16 19 22 25
+36 37 40 41 42
+59 60 62 63 66
+62 59 58 55 53 50 49
+28 27 26 23 21
+26 29 31 32 34 36
+59 62 65 67 68
+77 80 81 83 84 86 88 90
+35 34 31 28 26
+40 43 44 47 50 52
+90 87 86 84 83 81 80
+45 44 42 39 36
+4 6 8 9 12
+27 24 22 20 19 16 14 11
+70 71 72 75 77 80
+54 56 58 59 61 63 66
+27 25 24 21 18 16
+73 75 78 80 83 85 87
+57 58 61 63 65 66 67
+74 72 71 69 66 65 62
+98 97 95 92 90
+14 11 10 9 8 5
+9 6 5 2 1
+29 32 33 36 38 39
+93 90 88 86 83 80 77
+38 41 43 44 45 47 50 53
+25 24 21 20 17
+18 17 14 11 8 6 4 1
+3 5 8 10 12
+87 88 90 93 96
+85 86 87 90 91 92 95
+29 28 25 24 22 19
+89 88 86 83 82 80 79 76
+70 69 67 65 64 61
+37 40 42 43 45 46 49 50
+1 2 4 5 8 10
+85 82 80 79 76 73 70 69
+95 92 91 88 85 84 81 80
+35 32 29 26 25 22
+26 24 23 22 21 19 18 17
+92 93 94 95 97
+37 35 32 30 27
+61 59 56 55 52 50 49 46
+32 35 36 38 41 43
+74 77 78 81 82
+88 86 83 82 80
+52 55 56 57 60
+61 64 65 66 68 70 72 73
+35 34 33 30 27 26
+21 24 25 26 28 31 32 35
+12 14 15 17 18 20 22 24
+28 31 34 35 37
+94 92 89 88 87 84 82
+43 42 39 38 36 34 31 29
+37 38 39 42 45 47 50 53
+82 85 87 90 93 96 99
+74 77 78 79 81 83
+86 83 80 77 76 73
+98 97 96 94 92 90
+25 23 21 19 18 15
+68 65 63 61 59
+34 37 38 41 44 45
+70 67 65 63 61 58 56 53
+34 32 30 27 25
+55 53 50 47 44 43
+44 47 50 51 53
+90 87 84 81 80 77 74
+18 19 22 24 27
+18 19 21 24 25 28 31 34
+43 42 40 38 37 35 34
+57 56 54 53 52 49 48 46
+16 18 21 22 25
+20 21 23 24 27
+79 80 83 86 87 90
+83 81 80 79 77 75 72
+37 40 41 44 45 47 49
+28 27 25 22 21
+20 18 15 14 13 10 9
+51 52 54 57 60 61 63 66
+71 73 74 77 80 81 83 85
+14 15 17 18 19 21
+73 75 76 77 79 82
+36 33 32 31 30 27 24 23
+69 71 73 75 76 77 80 81
+75 78 80 83 86 87
+11 14 17 20 23
+92 89 88 86 84
+68 67 64 62 60 59 57 56
+21 19 18 15 12 11 10 9
+42 40 39 38 37
+71 74 75 76 78 80 82
+7 8 9 12 15 18
+21 18 17 15 13 11
+70 68 65 62 61 58 57
+32 31 29 27 24 23 22
+4 7 9 11 14
+35 33 31 30 29 28 27 24
+30 33 36 39 42 45 47
+12 10 8 7 5
+47 48 50 53 56 57 59
+67 69 70 72 75 77 78
+27 24 22 19 16 15 13 11
+15 13 11 10 9
+43 40 38 35 34 31
+45 48 50 52 53
+76 77 79 81 82 85
+90 88 87 84 82 79 77 76
+28 29 32 35 38 41 43 46
+61 64 67 70 73 75 78
+55 52 51 48 46 43 42
+9 12 15 18 21 24 27
+85 87 89 91 92 94 95 97
+75 74 73 70 69 66
+35 36 39 40 43
+52 55 58 60 63
+59 62 65 66 68 70 73
+17 15 13 11 8 7 4
+37 40 42 44 46
+21 19 18 17 15
+27 28 29 32 33 36
+9 12 13 14 17 20 21 24
+88 91 94 96 99
+69 71 72 73 74 76 79
+60 59 58 56 53 50
+86 84 82 79 78 76 74 71
+98 95 94 91 89
+70 68 66 65 64 61
+16 15 12 11 8 6 5
+16 19 20 23 24 27 30 33
+47 49 50 51 53 55 58
+79 82 83 84 86 87 89
+93 91 88 87 86 84
+17 14 13 12 11 9 7
+83 81 79 78 76 75
+78 79 82 85 87 88
+38 40 43 44 45 48 49
+44 43 40 37 36 34
+94 92 91 89 88
+7 9 11 12 14
+94 91 90 89 86
+11 12 15 17 18 19 20
+32 30 27 24 21 18
+48 47 45 43 41
+51 54 55 57 59 61 64
+28 29 31 34 37 38 39 42
+85 84 83 82 81 78 75
+70 67 64 62 59
+52 50 47 44 42
+72 74 75 77 78 81 84
+7 8 11 14 15 17 19
+38 39 42 43 44
+66 68 70 73 74 75 78 79
+64 65 67 70 73
+58 56 55 53 50 49
+77 78 80 81 84
+32 34 35 37 39
+7 9 11 12 13 14
+38 41 43 46 48 49 52
+24 27 29 32 33 35 38 41
+77 74 73 70 69 68 66
+14 17 19 22 25 28 31 34
+41 40 38 36 34 31 30
+30 28 26 23 22 21 20
+50 47 46 44 43 42
+56 53 50 47 45 44 41
+70 73 76 78 80 82
+41 42 45 48 50 51 53 54
+45 42 41 39 37 34 31 29
+58 57 54 52 50
+17 20 21 24 27
+54 56 58 59 62
+73 76 78 80 81
+17 19 20 22 25 26 29
+47 48 50 52 55 58
+23 20 17 15 13 10 9
+72 71 70 68 65 62 60 59
+85 83 81 80 79
+80 79 77 76 73 70 68
+96 94 92 91 89
+36 38 40 41 42 44
+21 24 26 29 31 33 35
+62 64 66 69 71
+90 89 87 84 82 81 80 77
+19 20 21 23 25 27
+23 20 17 14 13 12 11 9
+67 69 70 72 73 75 78 80
+3 6 7 10 12
+60 63 66 67 70 73 76 78
+87 85 82 79 76
+6 9 12 14 17 18 19
+62 60 57 56 53 51
+54 52 50 49 48
+64 63 62 61 60 57 55
+75 76 78 81 82 84
+65 64 62 60 58 57 55
+62 63 66 68 71 73
+41 43 44 46 49 51 52
+15 13 10 8 6
+25 23 21 19 17 14 11 8
+56 58 60 61 62 64 66 69
+78 80 83 85 86 87 89
+35 37 40 42 44 47 48
+72 75 78 80 81 82 83
+30 32 34 35 37
+62 60 57 54 52 49 48 46
+96 93 90 87 85 84 83
+57 60 63 66 67 70
+77 75 72 70 67
+88 87 84 81 79
+22 25 26 29 31 32 34
+24 23 22 19 16 15
+57 56 53 50 49
+7 10 13 15 17 18 19 21
+19 22 24 27 29
+30 28 26 23 22 20 18 15
+5 6 8 9 12
+59 58 55 53 52 50 47 46
+35 34 32 30 27 24 22
+67 64 63 61 58 56 54
+71 74 77 78 79
+26 29 32 35 36 39
+90 88 87 86 84
+23 21 20 18 16 15 14
+11 14 17 19 20 21 23
+75 78 79 80 83
+45 48 51 54 57 58 59 62
+34 31 29 26 23 20 18 17
+17 15 12 9 7 5
+38 37 36 35 34 31 30 27
+56 55 54 53 52 51 50 49
+78 80 82 84 85
+46 45 43 42 40 38 35
+25 27 30 31 32 33 35
+27 30 32 34 37 38
+91 90 88 85 82 81 80
+27 25 23 22 20 17 16
+88 87 86 83 80
+96 93 92 89 87 84 81
+42 43 45 47 48 49 50
+21 20 19 18 15 12 9
+57 58 59 62 64 66 69
+52 49 46 44 42
+35 34 31 28 26 23 20 17
+79 76 75 73 72 71 70 68
+24 25 26 29 31 32 34
+75 77 80 82 84 85 87 90
+2 5 7 8 11 12 14
+27 26 23 20 17 14 12
+55 58 59 62 64 67 68 69
+33 34 37 40 41 42
+68 69 70 71 72
+18 17 15 13 11 8 5 4
+63 61 60 58 56 54 53 52
+22 20 19 16 15 14
+56 57 58 59 60 62
+84 85 88 90 93 96
+26 27 29 32 34 35
+88 85 84 81 78 75 73 70
+52 50 49 46 44 43 40
+41 40 37 34 32 29 26 23
+81 79 76 74 72
+51 53 55 56 58 61 62
+58 57 56 55 54
+47 44 43 41 40
+83 84 86 88 90 91 92 94
+84 83 82 81 79 78
+15 14 13 12 11 10 9
+31 28 25 24 21 18
+73 72 71 70 69
+44 46 48 49 51 54 55 58
+8 10 13 14 17 18
+78 77 74 73 70
+8 10 12 13 15
+47 46 43 42 40
+94 91 90 89 88 85 84 83
+41 43 45 46 48
+65 66 67 68 69 72 75
+97 95 94 92 91 89
+68 71 73 75 78
+35 37 40 42 44
+63 65 66 67 68 71 74 76
+85 88 90 92 95 98
+75 73 70 67 66
+91 89 87 85 82 79 77 74
+33 32 30 27 26 24 21 20
+88 85 82 79 76 74 73 71
+31 33 34 35 38 41 42 43
+10 11 12 15 17 20 21
diff --git a/AdventOfCode.Tests/Data/2024_Input_Day_3.tst.data b/AdventOfCode.Tests/Data/2024_Input_Day_3.tst.data
new file mode 100644
index 0000000..99dca0f
--- /dev/null
+++ b/AdventOfCode.Tests/Data/2024_Input_Day_3.tst.data
@@ -0,0 +1,6 @@
+*how())@*mul(666,399)?mul(354,686)<%why()}#mul(449,25)<{@mul(298,550)'why()*select()mul(39,588)-:mul(255,532)when()from()&~from()-}~!mul(501,122)what()who()/@mul(792,556) >~'@<*$mul(389,684)/<'mul(941,352)<do();-:%*~mul(302,652)how()mul(827,262)>select()-#]what()who()~mul(636,791)*where()&^^'mul(267,79)'!#mul(153,490))>/!mul(429,93)where()?{where()/,mul(481,952)mul(498,420)'why()~;$how(11,770)+mul(40,723)<@do()mul(172,376)how()(%what()what()#do()who(458,15)*who()what(263,940)('mul(36,67)what()why()-do()how()/]what()mul(553,221);})what()mul(768,886)}mul(429,845)#'mul(130,55)mul(550,213)don't()+&'mul(549,688)from()-how(667,895)~>+ @[mul(242,556)~!from()-( mul(553,356)~)}@mul(776,253)?select()how()/?#}+who()mul(132,392)$](/^%from()-/mul(153,281)what()what()mul(413,677)mul(453,733)how()mul(670,617)-!~]* select()?'#mul(140,989)~? [^mul(189,660)$*>$,who()why()&mul(70,862)-^ &-*~why(),don't(){%#<+mul(830,572)$:mul(251,305)from()from()), /?;don't()}why();+from()&]when()mul(57,686)$why()!why()why()?don't()&(mul(541,775)}do();#}^?* @mul(248,215)}({select()mul(9,131)don't()-mul(222,367)?mul(541,161)({{why()@mul(613,749)don't()who()?/)&why()%%mul(970,606)*select()/)from()/}where()select()mul(623,855)//'#*:)>^mul(658,630) mul(692,468)why():when()$mul(791,491)!%~mul(274,776)%;(]'?when(225,182)@what(28,557)[mul(33,589)+'*,+:mul(581,732)select()}?*(~,,mul(221,532)&:>mul(406,25)select()don't() !who()when()@;what()mul(399,473)>how(943,174) ):)mul(30,985),when()/* when()mul(275,577)@$?,+:('@mul(624,769)'where()&(]??$~mul(747,57)-%%/%? }*}mul(562,665)^where();why()#$:,]mul(545,73){from()why()]mul(504,381)>what()why()$%from(53,115)%mul(582where()%[select()<why()>who()'mul(483,928)don't()mul(303,515)<&/mul(940,761)!(/~what(585,344)where()mul(741,802)how(),~[from()%;%mul+,}]])select()mul(653,959))mul(354,159)mul(608,836)when()''who()why()select()why()}mul(167,648)mul(585,942)%who()] (~don't()mul(27,685)^}!where()~<$,'who()mul(509,539)why(){^}from()when()who()+mul(463,984)who()$mul(579,325))?how()] who()-mul(679,71)who()^/,'[~do() )!]!mul(511,894)-+'how()~~;what()mul(845,706)#][^%^what()when()mul(968,989))[,mul(644,209)why()%;where()select()^mul(351,869)~%:]where()#mul(449,265)don't()@(^mul(569,652)why()!how()~<(mul(251,97)how()~*}#&{?;{mul(693,636)what()don't()why()how()when()who()when()'select(277,840)select()*don't()%+how()select()&?mul(232,345)! mul(45,51)*;,~&mul(831,663)$when()'how()do(){>!> when()mul(535,567)
+who()@from(){%#where()how(){mul(413,321);[why()from() @;mul(647,475)(~}?+-where()what()what()when()/mul(403,367)when()*@{?]$$mul(883,974)~where():from())why()'-!when()mul;!mul(430,215)*what() '?^}{]what()mul(921,792)[from()when()}what(240,851)mul(792,640)<)^$from()#mul(574,846)$where():[;,mul(543,813)$?]select()mul&[why()mul(550,167)-{$don't()#@[when()mul(439,823),-where()how() [:':*mul(534,346),^mul(781,690)select();@who()'{mul(888,829){(mul(214,861)when(844,270)[from()select()&)&mul(537,154)how(223,646)from()]where(328,122)select()}%^;/]>?)mul(930,63)&,%select()-how()where()~?mul(215,755)*mul(219,137)]how()*select()?%mul(864,539)) #/:/-/mul(179,611)mul(391,430)-mul(913,30)'^ }&mulwhen()who() *mul(46,964)';{how();select()[when()do()[?mul(180,395)@select()select()who()what()don't()select()]'>$mul(290,671)~don't()}*where(14,468)};%what(316,924)?>mul(9,769)where()%,who()'^+&what()@mul(830,738)~!>~>{mul(748,185)]%mul(850,291)>,?+/mul(45,570)#[}who()] mul(164,320)-how():who():mul(46,296);?@-/#;,,don't()why()mul(785,395)?mul(398,117)@mul(340,94)$]select())!:;mul(6,206) *how()($where()+mul(920,649))>%?mul(166,255)where()where():from()mul(271,210)/what(){mul(564,224):mul(513,296)what(404,568)mul(483,797)!?(from()mul(225,16)why())$where()mul(609,630)}]when()(!who(882,295)[what()mul(703,292)mul(816,911)@@ who();mul(272,571)mul(144,283)$~$:;}!>:&mul(691,405)[don't()where()( what()':*]mul(769,350)[?/!select()(:)+mul(16,661)where()&:^what()select()!mul(724,965)mul(256,462)$>&@,>~what()how(626,774)when()mul(819,930)%!@#%&,$select()mul:select()what()@don't()who()%why()~$&)'?mul(899,128){what(){how()do()!(,):what(381,741)how()mul(626,231)how(941,70)]!why()>[who()^}do()!]~mul(145,559),/?from();/mul(52,260)~where()select()*why()!]who()mul(823,108)from();~}/[how()}[!mul(978,24)when())mul(645,292)}< mul(988,213)-%-who()/*%select()/mul(853,489)~: ):?$why()@mul(551,740): what()mul(388,60)when()~mul(862,379){when()where()%+who()>from(533,522),mul(922,276)
+mul(759,151),> ;+&mul(583,470) ,:&mul(915,695)mul(464,234)[$>}how()mul(497,706)where()>(:/?^who()*(mul(613,813)^where()from()]mul(932,777) where()]where()how()mul(119,714)/+@+%mul(135,380)why())mul(427,667)[where()$from()*mul(255,4)how()!>-how() what()mul(967,813)*{'}+*-^,don't()'{mul(520,847)from()from(){select()),#mul(828,292)do() mul(866,185)(}from()from()^[mul(810,863)-'what()do()>(/-,$(mul(10,436)[mul(803,717)@?{[why() @]@^mul(982,590)/(%&$select(728,748)^how()^mul(47,419);mul(781,963)@}mul(67,556) *'~mul(242,786)}&?+why(31,93)>@mul(464,770)<{$$(!mul(814what())where()@who()why(408,863)~mul(160,674)when())mul(590,431)mul(781,931)->from()~[;'^'mul(496,694)>)what()-*why()#;-mul(921,65)@#]+/don't():mul(226,608)where()$!+how()#who()]?select()mul(730,950)@'$[)*$mul(563,45)})-where(){select()]what()don't()+mul(943,235)<}:{}/)mul(146,235));[/who()what()select()/([mul(803,289)[/)why(997,896)mul(816,273)+;/mul(547,981)]~!)[{@}{*mul(86,319)#>[ [why()mul(435,211*where())mul(709,58)>:when()what()mul(456,233)@from())mul(204,587)who()$^'$!mul(378,771)mul(714,865)what()((mul(877,397)select()(mul(731,34)what()<>)*from()^mul(380,614)+@why()/*,mul(475,898)mul(966,798)where()how()/,mul(726,964)when();[do()mul(871,365)[%why(); [why(876,114)don't()!what()@'!$when()[mul(831,147)mul(138,465)*select()/{when()~?from(),mul'where(157,142)what() (do()*&mul(365,834@!{[<%;&[what(886,735) mul(807,79)^@;what()mul(433,788){@:* [!:mul(108,43);*'-^~mul(789,645)+}-mulwhat(){ mul(128,276)*why():how()why()mul(133,271)*;(mul(618,659)~select()]{{}^*mul(638,330)who()$when(674,618)mul(908,588),?&~from()/#why()mul(552,454);*from(),mul(615,472)why()#~<~mul(594,691)-mul(23,914)mul(230,641)/where()mul(63,728)mul(810,461)?mul(569,651)$#mul(822,175)^how(677,189),{{?where():%)mul(213,296)(@why()mul(796select()(+$mul(465,480)from()?/ <%who()?{mul(471,797);{who(),~-mul(596,891)~/?(mul(900,127)[' mul(266,693)%%why(),mul(155,347)mul(2,759)from()%mul(523,244)how()what()>*@mul(277,553)'[]how(836,466)$mul(786,297)#why()^~:mul(205,507);?select()where()from())mul(123,841)how()-what()select()@#{#]'#!/usr/bin/perl(?^select()where()mul(387,218)how()why()select()what()&^>:<*mul(48,9) ^!!select()^}[mul(133,330)?how(571,913)?mul(163,966))?{mul(366,101)#$mulwhy(32,414)>%;?$^mul(721,586)mul*$what()[~ '&mul(375,533)mul(342,13)+!where()'mul(568,71)^]~mul(943,549)}?why(842,232)mul(922,154)select()>$don't()why(999,551)why()mul(781,791),%)select(832,592)]~when()+mul(324,528)$select()-:< ?:+mul(553,150),$<}:$-what()-+mul(932,810)%from(106,776)/ +];mul(83,53)-(,when()where()mul(115,873){&+mul(357,798){#@mul(876,690)why():mul(148,662)+!%@mul(512[how()];mul(122,41)*when()who()select()mul(452,727)]<:<(*select()mul(300,956)^,/:mul(163,151)#}what()~,who()$>mul(336,312)&(}#^[mul(511*what()??~#(:(mul(97,35)(how()}+(+:mul(22,515)/:;#what(953,388)]mul(880,608)%why(64,210)-]!}from()?*mul(690}from()<~select()?><@ mul(444,747)[who()select():/@from()where()how()who()mul(680,790)*mul(208,716);*[-#from()why()from()]*mul(563,604)^-*mul(176,677)^;how()who()$([]mul(11,556)when(733,129)&//%when(129,614)(&mul(134,249)}{'('?select()select(453,909)mul(342how()'(mul(678,629) >'mul/what()/%mul(6,656)+^~(}how()where()['mul(636,232)'from()mul(409,258)@mul(758,574)mul(721,278)~mul(699,927)<^^?^<*[mul(446where()why()[!when():mul(946,616)@!mul(192select();~@;where(940,901)who()/mul(62,543)^who()!from()from()mul(78,502)-who()%{]&(mul(233,954)mul(163,156)!#]#:,}where()mul(403,223)$#'( ~&&~(mul(509,885)^why()*?:/select()#why()mul(826,143)>mul(804,695)what()from(770,634)why()%how()%&>mul(149,604)>do(),[{mul(441,285)?select()from()]mul(75,868)';mul(118,644)#:[:(*#mul(4,371)$mul(622,537)$&>(~/*^mul(857,96)(why();,$how()mul(29,888)){;^;from()*<)mul(741,192))$^ &what()~don't()why()+mul(299,631);[from()what()$/~/mul(540,656)(where(39,548)(what()what()@select(){{'mul(700,74)]when()>mul(382,924)>mul(426,551),mul(919,582)
+<%>::mul#}@mul(294,775)^$,from()mul(331,246)&how()mul$&:+@mul(883,736)?from()select() (<^]$$mulwhere()?-;?mul(943,7)$mul(177,555)- mul(513,284)mul(660,648)^-mul(641,291)[%;why()mul(592,514) mul(66,46)how())how()/>what()'+/don't()} ~when()how(264,139),(mul(894,155)>[!what()-mul(901,591)@(mul(916,689) ^/$mul(75,541)how()where(404,116)*-+!mul(832,727)%)^^ #(&^do()](why()mul(740,164);$>*mul(89,249)!}mul(32,185)how()mul(28,824)},select()&>,mul(506,528)%who(){select()(when(763,794)-what()mul(665,939)how()/@[$@when())how()mul(114,937)];when()}#mul(655^]where()$from()mul(706,357)where(512,859)/%$ ?mul(13+}(+where();[->mul(476,267)what()how()when()why()from(321,201)~)!;what()mul(94,991)~[~;;'>(%mul(952,295)%[!>mul(120,25)mul(421,23)&>(,,&who(762,481)-^when()don't(),{mul(371,529)%how(913,59)%?+who() ':don't()mul(474*+*,where()from(116,228)mul(328,38)[*{;;mul(978,96<{}@how(983,94)%:mul(132,147)where(10,901)where() :~@mul(610,431)mul(888,304)select()' from()select()mul(256,81)how()when()why()mul(644,801){,?~<~!select()mul(46,359):]>:;)/,[what()mul(100,505)%$[mul(9,449)*~;,??,mul(522,361)$&}why()-from()>>mul(591,388),?*^select()from())don't()~[*/what()}mul(791,491)who()}]%]mul(249,418)^>+'&mul(352,614}{(;*,what()&what()+what()mul(260,957)when()-+mul(288,562)how()]-who()~]*>%do(){mul(375,414)^mul(251,565)+ (mul(991,687)(mul(352,56)(select()mul(337,520)%:@^-how()-mul(602 what()&who()when()!@<[mul(553,348)what(),mul(548,164)why()when()>[!*'[mul(942,713){why()}~-%@&-+mul(586,995)@,>'(mul(382,494)><$({select(4,131) '-mul(109,2)'<'mul(704,332)why()why()$when()>why()mul(540,890)how()#:(mul(769,655'>how() %/what()where()])mul(582,19)where()>who()mulselect()select()mul(131,795)(mul(232,91)!&-@mul(198,512)+-%don't()>/<]when() [mul(914<>}~<#>]?$mul(312,367)(how()why(){mul(617,443)*/? }&where()select()mul(616,699)mul(701,770)mul(825,157)]when()^mul(392,162)'#&don't():}select()@mul(693,146)#-mul(603,425)!}select()where()@why()-select() when()mul(933,229)@?'?+mul(884,557)what()]when()}why()mul(847,524)mul(90,328):}why()!mul(81,395)do()when()how())who()}who()when()mul(629,441)& !}); )~mul(692,721)how()#{^@':what(869,405)>mul(608*from()+mul(676,426) />mul(486,902)((/*>,%}what()mul(77,932)^* @%~ mul(488,898)mul(107,555)?select()who()who()when()where();?@;mul(337,733)@mul(480,439)who()how():[#+mul(794,629){%&why()@mul(82,847)+from()^^)!($mul&how()[;select()what()what()(mul(241,602)select(440,433)){/why()who()+^don't()%$ ^mul(859,377)]when()% do()?{}~?where()mul(720,748)#,'/mul(536,697)where()}}mul(713,265)mul(899,349)why()&who()when(828,656)&/mul(689,501),from()/[^++;'%select()do()*%%[ mul(621,611)mul(670,589)who()who()?@$-+what()%~mul(557,904) *:who()mul(820,300)how()>!@/-;:&why()mul(240,283)~>);'mul(444,495)what())mul(742,891)how()'?/from()']don't()%--&!{mul(649,766)<[]'@mul(335,976))&($&}?+how()>mul(989,639), {{$*?%,don't()how()mul(52,7)~[select():@who()mul(612,144)<^what()) what()mul(962,579)[%mul(516,604)mul(123,70)(;#mul:select()<},,#:what()mul(796,875)<-{}what()@select(),mul(55,775)]^+why()((mul(959,950);mul(364,829)/$<'&,}what()@mul(894,605)who()mul(892,921^why()(/>)why()*$mul(862,234),)$#who()mul(336,132)+how()&how()}-select()don't()>why()mul(759#mul(953,908) select()mulfrom(323,14)where()mul(901,400)when()who()':*why()select()?''mul(865,372)@[&~ why()[][mul(580,503)from()%^from()!//*#>#mul(274,231)what()when(770,166)from():& how() when())mul(216,599)when()who()&([mul(851,919)when(),%:($#?mul(649,177)#who(938,710),)mul(928,772)^]''!){<~mul(731,905)where()^what()[mul(310,145)why(250,443)/mul(807,828)mul(501,389)){[how()when()?[mul(637,203)?mul(966,499)&}@][@mul(24,625)~^mul(766,214)mul(836,146)&@ what(){;>)mul(466,455)''!>~'why()mul(253,978)mul(723,145)(@*]%{don't()/}([mul(858,196)[>{,^mul(418,456)how()who(){mul(779,669)/&,when()- how()/~mul(905,147)]#mul(499,880)mul(477,925)}>$[%%who()[,;mul(217,810)mul(344,973)-why()from()^mul(196,594)$mul(560,262)*,select())mul(324,357)what()when()mul(231,72)#from()mul(116,627)how()mul(659,509)+]mul(106,630)#~mul(481,665)?*&$-'mul(150,502)how(){${>#( mul(45,905)where()what()+!mul(701,728))@what()mul(930,711)%[[[mul(168,338)when()'mul(81,753)mul(977,451)!mul(515,907)why()who();-who(189,693)-!{mul(79,142)why()(mul(670,117)*> mul(301,392)@<{select(471,161){mul(181,97)what()from()^when()@mul(647,950)@mul(16,793)>why();when(375,63)]mul(726,704)$who()where()+select() mul(916,402)*who()<,[where()$:how()mul(499,261)where()+#%why()'%,mul(483,12)&[@(what();:)@@mul(657,770)'>()'@select()!when()mul(965,20)how()
diff --git a/AdventOfCode.Tests/Data/2024_Input_Day_4.tst.data b/AdventOfCode.Tests/Data/2024_Input_Day_4.tst.data
new file mode 100644
index 0000000..567602b
--- /dev/null
+++ b/AdventOfCode.Tests/Data/2024_Input_Day_4.tst.data
@@ -0,0 +1,140 @@
+AAMXMSMMMSMMSSMMXMASMAMXXMAMAMXXMASMXMXXMMMXMMXMAMXMXSMMMXMXSAMXSASXMAMXAMAMXSXSSSMXXMASAMMMMASXMAMXAMXAXMASXMASAMXSSMMSAMXAXXAMMXXXXSMAAMAM
+SMSSMMMAAMAAAAAXMAXAMAMXASXSSMMSMMAXAXXASAXAAXSMMSAMMAAASXSASASAMXMMSAMXMMAMMMAMMAMAXMXXMMSAMMSASASASASAXMMXXMASXMASAAAMAMXXMAMXMMMXXAMXXMAA
+MAAAAXSMSSMMSXMMXMSSSMMXMAXAXSAXASMXMMSMMASMSMXAASAMAMMMXAMASMMAMXMASASAASAMAMAMSAMSXSSMSXXAXAXAMASAMAAXMMAMXSAXMXMSMMMSSMAASMSMAXAASAMMSSMS
+MMMSMMMAMAXAMXMSAMAMAMMSXMXMMMXMMMMAAMMXMMMXAMMSMSMMXSAMMAMAMASXMAMXSMMMMSAXXSSXXASXMXSMXASXMSMSMXMAMSMSMXAMMMAXMAAXAMAAAMSMAAAMAMSMMAAAMAMX
+SXXXXXMAMSASAXMAXMASMMAMAXMXASMSMAMSMSMAXSASMMAAAMMMASAXSAMMSAMAXMXAXXMAMMAMXMMMSSMAMAMMMMMXAAAAMAMAMAAXMXASAMXASMSXAMMMSMAMMSMMXXXASMMXSAMX
+XAMMMSSSSXAMMMSAMMXMMMAMMMAMSAAAMSXXAAXAMXMMXMSSSMAMXMMMSASAMASMMSMMSMSASMAMXAMMMAAAMAXSASAMXMSMSASASMSMMSASMSSMXAXXXMXXMXMMAMXMMASAMMAMSMSS
+XXSAAXAMXMMMAASAMSXSASMSSXSXXMSMSMAMSMMXSSMXXXAMAMXXMAMXSAMXSAMMAXAMXAMAMMAMMXMAMXMMMXMSASXSXXXASMSXSAMXXAMMAAAXMMMXXSSXMASMMSAMAXAAXMAMXAAM
+XASMSXXMSXMSMMSXMAXSAMXAMAXMSMMXMMAMXAXXXMASXMXSAMXSSMMMMAMAMXSMSSSMXMMSMMXSMMSSSMSSXXMMASASXAMXMAMAMAMXMASMXMXMAMXXMMMXSAMAASAMSSXMMSXSMMMS
+SMXAXMAMSAMXMASMXSMMAMMAMXMASAMXMSAMSAMSAMXMAAXMASMXAMXXSMMMMMMXAAAAXXAMASAAAAAAAAAXSAXMXMAXMMXAMXMAMAMASXMXMMASASXXMAAMSAMMMMMMMAASAMXXAXAA
+MXMXMSSXXAMXMASAAXMXSMSSXMMAMAMAXMAXMAMXAMSSMMMXMMXSXMMXSMMASAAMMSXMXMMSAMSSXMMSMMMSMXSAXMSMMMSMSAMXXAXXSMMAMSASASAMSMSXSAMMSXMAMSMMASMSMMMS
+SSMMXAXAMSMSSSMMMSAXMMMXAAMSSXMXSMMMMSMXAMXSAMSASMXMMMSAMXSASXSXAMMMMMAMXXMXMAMXAMSMMASMAMAAAXAAAMSMSSSMSASAXMAMMMMMAXMXMAMSMXXAXXASAMMAXXXX
+XAAXMMSMXXAMXMXAAMAMMASMMMXXAASXSXAAXMAXMAMXMMMAMXXMAXMAMMMMSMXMMSAAAMASMSASMSMSSMAAMAMSAMSSMSMSMXAAAAAASAMMSMXMXASMMSSMSMMAAMSSMMXMAXSAMMSM
+SSMMSAAXAMAMMMXMAMXAXAMAAMXMSMSAMXSSSMAXXAXMSSMAMSMSSSXSSMAAXAMAASMSMSMXAMAMAAAAASXSMMMSXMAAAXXAXMMMMMMMMAMXAMMSMMSAMMXAAXMMXMAAAXSSSMSAMXXA
+MMSAMMSMMSAMAMXMAMXSSMXSMMAAAXMMMAMAMMAMSMMAAXSXMXAAAXAAAMMMSXSMMSXMASAMSMSMSMMMMXMAMXAMMMXSMSSMMMXMXXMXMAXXASASAMXAMXMXMSXSXMSSMMMAXAMXXMAS
+SAMXSAXAMAXSSMSAMXAAAAAXASXSAXMASAMAMMAMAMMMSXMMMMMMSMSMMAMASMXAAMAMXMAMMAMXMASMSMSSSMASMSXXAXAXASXSMXSASASXXMASMMSMMMXSAXAMXMMMMXMAMMMMAMAA
+MAMSAMXAMXXAXASAMMMSMMMSAMMXMMSASASMSSXSAXXAXAMASAMXAAXXXXMAMMSMMSXMXSMMMAMAMSMMAAAAAMAAAAXMXMMSMSAAAASAMASXXMMSAAAAAAMAXMAMSXMASMMMXAXSSMMS
+SSMSAMSAMXMAMMSSMAAAXMXMAMXXAAMAMAMXAAMSXMXXSSMMSASXMSMSXMMMSAAXMAAMASAASMSSXMASMSMSMMMSMMXMAAXMAMMMMMMAMAMXXMASMXSSMXAMXMXMSAMAXXAMMMMXMAMX
+MMAMAMSSMMAAAXSAXMXMMXAMAMSSMMSSMMAMMSMSAMXMXAMMMMMAMMAXAXAAMMMSMMSMASXMSXAMASMMXXMXMAXAAXXSMSMMSMMXMAXAMAMXMMMSMAMMMMSXXASXSXMAMSXSAMXXXAMX
+AMAMMMMXMASXSSXMMSSMSSMSASXAAAAAAMAXAXMXAMAAXMSSMSSSMMMMSXMASAXXAXXMXSXMMMXMASASAMXMSMXSXMMMAXMMMAMXMMSMSAMASAXMMMSAAXMXMASAMMMXXMASMMAMXSSM
+MMASAAXMXMMAMMMSAAAAAAXSMMXSMMSSMMXMASMMXSMSMXAAXMAMMAMAMXMMMMXMAMXMAXAXMASMXSAMXSAAXMAXAXSMAMAAXMMAAMAAMXMMXASXXXMMMMXXMASXSAMMAMXMAMXSAAAA
+XSASMSMMMAXMSAAMMSMMMMMMSMXXXAXAXXMASMMAAXAAAMSMMMMMSAMSXSAAAXXASMSMXSMMMSAMXMAMXMASMMASAMSMMSSMSSSXMAMMMSXMSAAMASXAXAMXMMSXSASMSXMSXMAMAXAS
+XMASAXASXMMXAMMSAMMXAMAMMSSMMSMSMSSXMASMMMSMSMMXXAXXMXSMASXMXSMXXAAXXAASXMMSMSAMXMMMXMASMXMAXXAAXMASAMXSAAAMAMXMAMSMSSMASMXAMAMXMAXXAMASMSMX
+XMAMXMAMMAMXMXAMAMXSXMASXAXMAXAAAMXMMAXXSXXSXAAAXSXSXMXMMMMSAAMAMMMMSSXSAMAAAAAMAXAMXMASMSSSMAMMMMMMSXAMXSXMMSSMAMAMXAMASMMXMAMASMMSXMAXAAMX
+XSASXMAMSAMAMMMSAMXXASASMAMMAMMMMMAXMMXXSAXAXMMMMMAMMSSXMAAMMXMASAAXAAMMAMMMMMMXMXMXAMXMMAAMXSMSXSAAAMMMAAXSXMASXSMMSSMXXMAAMAXXXXXMASAMXAMS
+MSASXSXMXASAXAASASAMXMASMMMSXSXXASMSMAMSMMMMXSAMSMAMAAXAMMSXXMAXSAMMASXXAMXSSMSXXSAASAMXMMSMXMAXAXMSSXAXSMAXASAMMAAAAAXMMMMXSAMSSMASAMAMXAMX
+MMMMMMAMMMMMXMXSXXXAXMXMXSMSAMASMMMXMAXSASAXMSASMSMMMMSAMAXXXMXXMAMSXMASXMAMAAXAAMAMXASXMMAMAMXMSMAAMMXXASMSMMMSSXMMXSMAXSAMMXMAAMAMXMAMSSSM
+MAMAXXAMASXMASMMMSASXMXMAMMMAMAXMSSSSXMXXMASAMXMXAXSAAXMSASMMMMMSAMXAXMASMASMMMMMSMMXAMMAXSSXSXAMXMAXAXSAMMAMAAMAMSSMXASAMASAAMSSMSAXMXXAMAA
+SASMXMASASASXSAAAAMMASXMSSMSSMMSSMAAAMMSSMMXAXMSSSMSMASMMAXXAAAASMSSMMMAMXXMASXMAAAXMMMSSMAMAMMMMSMSMSAMXMSSSMSMAMAAAMSXMSAMMMMMXXMASXXMXSMX
+SXSAASMMAMXMASXMSSXXAMAAAXMAXAAXAMMMMSAAAAMSSMAXAMAMXMXXMAMSMSSMMMXXXAMASXMASMSASMSMSAXAMMMMAMAMMMSMAMXAAXAAXMAMMSSMMMXAXMXSMMSSSXSXSAMSAAXS
+MASMXXAMXMSMXSAMXXXMXSMMMSMMXSAXMMSAXMMXSMMAASMMSMMMSMASMSXMMAXAASMSSXXAMAXXMAXMMAAAXMMMSMXSMXAXASAMAMASMMSSMMAAXXAAMXMAMXAXAAMAMAMAMMAMASMA
+MAMMMXSXSXAASMAMXMASXAAMMXMXAXMXSASMSMSAMAMSXMXAAAAAAMAMAXMAMMMMMMAMXMMSSMMXMAMXMXMSAMAAXMAMASMSMSASXSAXXAAMAMMSASXMMMSAMAMSMMSAMAMXMAXMMMXX
+MASAMMMAMMMXAAAMXAASXXMMMAMMASXXMASASAMASAMXMXXSSSMMXMAMMMSMMXSAXMAMMXAXAXMXAAMXMXXMMSXSXMXSAXAAASAMXMXSMSAMSXXXMXAXXASXSXXXMASASXSXSXXSAMXS
+MAXASAMAMAXXMSMSXMASAXSASAXXAMAMMXMMMAMASASAMSMMMMMSSMXSXAAAMAAMSXMSAMMXMAMSSMSXSAXMASMMMMMMXSSMMMAMAAMXXMAMXXAMXXMMMMSASASAMAMXMMXAXXMSASAM
+MSMMMMXAMMSXMAAXXMAMAMMASMSMXSAMXSAXSXMASASASAAAAXXAXMAMMSXMMASXSAMXXAMASAMAAAAAXMMXMXXSAAXXMAXAXXAMSXXSASAMAMSXSASXMXSAMAMXMMSMXAMAMMXMXMAS
+XMASAMSSSSMMSMMMXSXMSMMXMMAMXSASXSAMAXMASXMXMMXMSSMSXMASMMSMMAXAMXMAMXXASASMSMMMMSMSMSASXMSMAMSXMSSXMMASXMMXXAAASAAXAAMMMSMMMSAMXSAXSAMXMSXM
+XSMMAXAASMAAXMSSXMAMAMXSASASASAMXMAMXSMXSASXSSSXAAAMSMXSAAASXAMXASMMSMMASAMAMMASXSMAAAXMASMXSXSAMAMAXMXMASMSSMMXMMMMMMSAAAAAXXASAASAMXMAXMMM
+AMXSXMMXMMMMMAAMASMMSXXMASASXMASXSSMXXMAMXMAAAXMMMSMAXSXMXMXMXXMAXAAAASXMMMXMSAMMSMMSMMSXMAAXXSAMAMAMMMSAXAAMXXAAAXXMMXMMSMMSXSMMSMMSASXXAAS
+SXASMMSMXMASMMASAMXMMAMMMMAMAMASMAASXAMAMXMMMMMAXXAMMMMASXXXSAMSSSMMSMMAAXXXMMXXAXAMXAXXXMMSSMSMMASASAAMMMMMMSSSMMSMASXMMXAMAXXAMXAXXAMSMSAS
+AMMSAAMAXXAXXSASASAMSAAXSSMSMSMXMSMMSMSAMMSSXMXSSSXXSAMAMAMMXAXAAXXAMASMMMMMXASXSSXMASMMXMAMAAMASMSAMMMMAAAAXMAMMAAMAMAMASAMAMMAMSMSMSMAMXAX
+MXSXMMSMMMMMXMASASAXSSXMAMAAAMXSMMAXAMXAMAAMASAMXMMAMAMMXXMSASMMSMMXSAMAMSASMXSAAAXSXASMAMASMMMMXAMAMSASMSSSMMAMMXMMMSSMAMXMAAMAMAAXAXMMMMSM
+XMMMSASAMXAAMMAMMMMMXMSAMMSMSMASAMXMASXMMMASXMXMASXSSSMSSMXMAMXXXAMAMXSXMMAMMMMMMMXMMSASMSAXMMXXMXMAMMAMXAXMASMMMAXAAMXMASMSMSSSSMMMMMXXXAMX
+MAAXMASMMSMSSSSXSAXXXMAMXXAXXMMMAMXMASXXASMSMMMSMMSXAMAASAAMSMSXSXMAXMMMSMSMAAXAAXAXMXASMMMSAMSAMMSASXSSMXMSASAASASMXXAMAAXAAMAAAXXASMMMMSSS
+MXSSMAMAAAXAAAMASMXXXSASXSSSMSMSAMSMXSMSXSASXSASAMXMAMSMXSASAAMMMMSMXMAAXAMXSSMSXSMXAMMMAAXSAMAAXXAXMAMAMXXMASXMSMMAMSMXSASMSMMMSXXAXSASAMMM
+SAMXMASMXSSMMMMXMMSMMMASAAXAAAASXMAMAMAMASAMXMMSAMXMAXMAMMMSMSMAAMXXAXMSMSMAXAAXASMSMXASMMMXMASMMAAMMSMMMMXMAMAXMASAMAAXMAMMAMSXMAMSMSXMASAS
+MMSASMSAAXMMMXMXXAAAAMAMMMMMSMMMSXMSSSMMXMAMXMASXMAXMAMXMAAXXMMSMSAMXSAAAXMAMMMMAMAAMSMSMMMAMAMAXMMAXAXXAXSMXSXMAASASXSAMAMSSXXAMXMAASMSXMAS
+XXMXMMMMXXAAMASMMSSSMMASXAXXAXXAMMXAAAMSSSSMSMASAMXMSASASMMSMSAMXMASAAXXMXMXXXAMAMMMMAXXAASAMAXMMXASMMXSMMAXAXMXMMSXMAMMMAXAMXSMSSSMXSAMXMAM
+MSSMSXXMMSSMSAXAMMMXMSASXSSMMSMXSAMMMMMAAMAAMMMXAMAXMASAMSAAAMAXXXMMMSMMXMASMSMMXXASMSXSSMMXSSSMSXMMASMAMMMMMXAMXXXMASXSSSSSMMMAAASXASXSAMXX
+AMAAXMXSAAMXMMSSMSAMXMASAXXAAXMAAMXXASMMSMMAMMMMMMXMMAMMMMMSSMSMSXMASAXXAAXAAAAXSXMSAAAXAMSAMAAASAXMAMXAMASMSMMSXMXMAMAAAAAAMXMAMSMMASAXASXX
+SSMMMSAMMSMAAMAMXMASXMXMXMMMMXMSSMXMXMASAAXMAMMAXSMMMXSMSSXXXAAAMMXXSXXXXSAMXMMMSAMMMMMMAASAMMMMMXXMAMSMSMSAAAMSAMXMASMXMMSXMAMMXXAMAMAMSAXA
+XAAMAMASAMXMMMASXSAMXSXSASMXSAMMAMMSMSSMXAMMXASXXXAAMMMAAXSAMSMSMSMAMMMSAMXSXAAAXAMXMSSMMMSAMMXSAAXSAMAAAXMXMXMSAMXMASXMXMAASAMMAMAMSMMMXAMM
+SSMMXXMXXMASXMASXAXXMMAXAAAASAXMAMAAXXXAXSMMXMXMASXMSAMMMSMXMAAAAAMAMAXAASAMXSMSXMMXASXAXXSXMSAAMSXMASMXMSXAXSMXXMXMXXMAAMXXSXSMMMXMAAAAMMMM
+MAAXSSSXASASAMASMMMSXMAMXMMMSAMSSMSSSMMMMMAMMXMMXMAASMSMXMAASMSMMXSXXSSSXMASAMXMAMXMSMSXMASMMMMSAXMSMMXSXSAMXAMAMSXMMSASMXSAMASASASXMSMSXMAS
+SSMMSAMXMMXSAMASAXAXXMASMSMXMXMXMAXMXAAAAMAMSMSMSMMMMAAXSMXMMAXXXMMXAAXXXMSMMSAMAMXXMXAMXASMAAXMAMMXAASAAXXXXMASAMASASAAAAXAMMSAMMASXXAAMSMS
+XAMXMMMSXAASXMAXXMSSXSAXAMXMASXMMSMSXSSXSSMMSAAAAXAAMXMXMAAMSMAXXAAMMSSSSXAAAMASMMMMMMMMMMSXSXSXSXSSSMMMSMMSSXMMSSXMAXXMMMSAMXMXMMAMMXMAMAAM
+SXMXMXAXMMXSSMMSSMMXASASXSAMASAMMAMXAXAXMAMAMSMSMXSMSAMXMAMXAMMMMMMMXMXAMMMMMSAAAAAAAAAAAXMAMSAAMAMAAXMXAAXAMASAMXXMMMMAXMXMMMMMXMAMSAMXSMSM
+XMMAMMXSMXXMASAAAAMMMSAMASMSASAMXSAMSMAMSAMMMAMAXMAAAXSAMXXXXSASAMXSXMMMMSMAXMASXSSMSSSSSMMAMXMXMAMAMMMSSSMMSAMMSAXSAAMAMXXSASASASXMXAMAMMAM
+MSSMSAASMSMMAMMSXMMAXMAMXMASXSXMAMXSAMXMAXMAXASASMMMMSAMXSXMASASXMMAAMMMAAMMXAMXAAAAMAAMAASMMXMASXSASXXMXAMXMAXSXMMSXSXAXMASASASASMSSSMMMXAM
+AXAXMMXSAMXMASAMAXSSMSAMXMMMMMMXAMMMMXAMXXXXSXMASAXXXXXXAXSAAMMMXMSSSMXMSSSXMSAMMMMMMAMMMMMASAXMAMMMAMXSMMMASXMAAXAMAMXMSMMSMMMMAMAXAAXAAXSX
+SSMMXMXMMMXSXSASXMMXAMMMMMAAAASMMSASAASMMMMMAAXXMXMMMMMMMSMMMSMAAXXAAMSAAAXAAMASMAMAMSMMXXSXMAXAMMSSSMMSAXMXSAASXMMSAXAMXAAXAAXMAMMMXMMMSXMA
+MAMXSASXXMXMMMMMAAAMXMAAXXSXSMSAMSASMXMAAAAXMSMXMXAAAAAASAXAAAMMSSMMMMSXMSMMMSAMXAMAXXMXSXAAMMSSMXAAASAMMMXMXMMMMMASMSMSSSMSSMSSSSSMSMSXMAMX
+XAMXMAMMAMXMASASXMMSSSSSSXMAXXSAMMMMMASXMSXXAAAASXMSSXSXSASMMMSAMMASMASAMMASAMASMSSMMASXMASXXAAAMMMMMMMSXSAMMXAAXXMXAXAAAAMXAAAAAAXAAAXMMSMX
+SMMAMAMXAXASXSASXASAMAAAXMMAMASXMMXXSAMAMAASMMSMSAMAXMXAMMMXAAMASMSAMASXMMAMXXAMAMAXSXMASXMMMMSSMAXSMSXAXSASXMMMMMMMSSMMSMMSMMMMMXMSMSMXXAXS
+AAXXSXMSMMASAMXMXXMASMMMMMMASAMXSXAMXMSSMMMAAXXXSXMAXXMXMXAMXXSAMXMMMXSXSMMMSMMMAMXMAMSAMAMXAAMAXXSAAXAXASAMMSMXMAMAAAXAMXXXMXXMXSAXAAMXXMMA
+MSSMMAXAMMSMXMXMAMSMMXMAASMMSAMASMMMAMAXAXXSSMAMMAMMMSXMMMSSMXMMMAMXSAMAMASAAAXXMSSSMMMXSAMXMSXMMSAMXMASMMAMAAAASAMMSSMXSMMMSMMSASMMSMSMAXAA
+XAAASAMXSXMASXMSAXAXSXXMXSAASXMAMAASAMASXMMXAXMAMMMSAMXSAAAAXMAXSASAMASXSAMMSMSAAAAXXXMMSASMXMASXSMXXMASXSXSSMSMSASXMAAXMASAAASMASAMXXSMSMSX
+MMSXMAAAMAMSMXAMMSXSMMSSXXXMMXMXXSASXSXXAASMMMSSMMAMAXAXMXXXMSAMXXMAXXMXMASMAAXMMMSMMMSXSAMXAMSMAXXMXMMSAAAAXXXASMMMSAMXSXSSMSMMXMMXXAMXMXXS
+SXMASXMXMAMXMMSMMMMMMAAMAMSMSXMXMMASXSMSSMMAXMAXAMXXAMXSXSAMXMASMMSSMASAMXSMMSMMAXXASAMXMAXSMSMMMMXMAXMMXMXMXSMMMAAXXAXAXXXAXMMSASXSMAXXXAMX
+AASAMMMXSASXMAXMASAMMSSMAMAAXAAMXSXSASAMXAXXMMASMMSXXSAAAXMAXSAMAXAAMAMASXSAMAASASXSMASMMMMAMXXAAXMSXSAMXMMMAMAMMSMXSSMMSSMSMMASXSAASAMSMSMX
+MMMMXAAAMAMMMSXSAMXXAAAXSSMSMMSMMSAMXMAMMSXSSMAXAAAXAMMSMXMAMMMMXMMSMSXMMXSAMSMMAMXXMMMMASAASXMMMXMAMXMAMSAMASAMMMSAMXAXXMAMXMAMMMMMAXMSAAAM
+XSASMMMXXAMAMMAMXSXMMXXMXMAMXAXAAMSMASMMAAXSXMSSMMSMXMAXXMMXSAMASXMMAMAMXMSAMXAMSMMMMSAMMMAMMMSSSXMXSAMXAMASXXAXAAMXXSAAMMAMAMAMAAXMXMXMMMSA
+SMASXMASXMSASMAMSAXSSSSSSMSMMMSMMSMXAMAMMSSMAMXSXAXMASMSSXMAMAMXAAAMASAMXAXXMXXMXAMAAMAMXSAMXXAAXXAAMAXMMSXMAXSSMMMXAMMMSSXSXSASMSSSXMASAMAX
+XMAMXMASAASASMMMXMMAAAAXMAMAAAAAXMXMASAMXXAMXMAXMAMMMXMAMAMASXMMMMXMXMAMSSMXXSSMSXMASXXMAMMAXMMSMMMASXMMMAMXMMAAXSSXSXAAMMMMMMMMAAXMASASASAS
+XSAMXXAMMMMXMXMMMXSMMMMMSASXMMSMMXMAXSASXSMMXMMSMSSMAAMASMMMSAAAXXXXMSAMAASXSMAAXMSMMASXMMSSXXAAXMMMAMAMAMMSXXSXMXAAMMMMSAAXAAMMMXMSAMMSAMAS
+MSAMSMSXMXSMMXXAMMASAMXAMXSASAMXSASXMMAMXAMXMMAAAAAASXMASAAASXMMMAMMMSAMMXAMAXMMMAAAXAMASAMAAXSASXAXXASAMSAXMXMMSMMMMASASXMSSXSASMMMMSAMAMAX
+AMAMMAAXSAAASMSMSAMXXSMMSAMAMXSMSASXMSAMXSAAAMMSSSSMMAMASMMXSMMASAMAMMMSSMMSSMSSXSSSMMSXMASMXMMAXMSMMMXAXMASXAXSAAAXSAMAMXXXXASASAAAAMASMMMM
+SSSMMSMSMSSMMAAAAMXMXMAXMASXMMMAMAMXMAMXAMMSXSAMXMAXSXMASAMMXMSAXASMSAAAAMXMXAAAMXMXMMAXXXMXASMSMAMAMXSAMXSXMMXSASMMMAMAMSMSMMMAMMMMSMMMAASA
+MAMXAAXXAXMASMMSMSAAAXXMMMMAAXMAMAMMMAMMXMXMAAXSXSMMMAMXSAMSAMMSSXMAMMXSXMAMMMMSAMXMASASXSMSXSAAXMSSMXMSMXXAMMAXXMXXMAMAXSAMXASXMASAMASMSMMS
+MAMMSSSMSMMASAAMASMSSSMAAASXMMMASXMASAMMAASMAMXMASAMMSMAMXMSASAAMAMMMSAMXSSSMSAMXSAAASAMXAAMMMXMMMAMXAAXXXMAMXXXMMXXXAMMMMSMMASMMXMASAMMAAAX
+SMMMAXXAAAMAXMMMAMMAAAXMMMMAAXSXXXSMSXSMSXSASXSMAMAMAXMMXMMMAMMXXAMXAMASMSAAMSXMASASXMAMSMMMAMAMXMMSSMMMMMSAMXMSMSAMXSMSAAASMASASMMMMMMSSMMS
+AMAMMSXSSSMSSSSSMMMMXMMSSXSMMXMSMASAXAAAMAMXMAXMAMSMASASAMMMSMSASXSMMSMXMMSMMMMMMSXXMSXMMXMSSSSMMSAMASAXAAXAMMMAMMXSAAASMSMXMASMMAMSAAXXMASA
+MSXSAXMAXAMMXMAAASXSAAAAAAAXMXAAMAMMMMMMMAMSMXMMSAAMXMASASXMAAMAXXAXMAMMSXMSAAASXMXXASAMMAXMASXAAMASAMXSSXSXMAXAMXMAMMMMMXMMMASMMAMSSMSMSMMM
+XXAMMSMSXMMSXSXSMMASXXMSMMMSAMXMSMSXXSAMXXSAMXXAMXAASMXSAMASMXMMMXSMSASAXAASMXXXAXAXMSAMSSSMMMSMMSAMASAXAMXXSMSMSMMAMXAAXAMXAMXASXMXAXXAAXAX
+MMMMASXXASXSAMMXAMXMSMAXMAXXAMXMAAMAASMSMXMAXXMXSXMAAXXMASMMAXSASXMASMMXSMMMAMSSMMAMXSMMXMAMXMASAMXSAMMMMSAMXMAAAAMASXSSMMSAMXMMMMXSAMMSMSMS
+MAAMXXASAMAMXMAMAMXAXMAMSXSXAXMSSSSMMXSAXXSSMSXMXMSMMXMMASAMXMXASAMMSXMAXAAMAMXAAXAAMMXXAMSMXSASMSMSMMMAXMXSAXSSSXSMMMXMAAAXSASXXSAAAMMAAXAX
+SSSSSSXMMMAMAMMSSMMMMMXXXAMXXMMXMAXXXXMMMMAXMASMMMASXAAMASAMMSMXMXMAXAMMSMMSXSXXMSMXSASXSMASXMAMMAAXSAXSMMASAMXAMXSMMSAMSMMMMXSAAMASAMXMSMAM
+XAAAXXAAXSSSXSAAAMMSAMMAMXMXMASAMAMXMXMAXMAMXMXXASMXSMSMMXAMAMMSMAMMXXMAAAXSAMXSXXMAMMSAASMMMSSXSMSMMMXMAMAMMMMAMAXAASAXMAAAXMMMMMXMMMMXMASM
+XSMSMMMMMMAAAMMSXMASAMSAMASAMASXSAAMASMSXSASXSMAXMXXSXMASMSMXMAAAAAXMSMSSSMMXMAXXAMXSXMMMMXAXXAASAMAXMAMAMXSSMSMMMSMMSMMSSMXXAXSXSAMXAAXXXMA
+AXXAAMMSASMMMXAMAMXSAMXASASASXSXMAMAXAAAASMXAAMSSMMMSASAMXAMMMSSSXSAAAAMAMAXMMASXSMSSXMMSXSMSMMMMASXMMSSSMMXAAXSMMMAAXAAXMSSMXSAMXAMXSSSMMSM
+SSMSSMASASXSXMASAMAMMMSXMMSAMASXSMSXSMXMASAMSMMAAMXASXMMSMMSAMMAAAXMSMSMSMSAAXAMXXMMSAXASMMASAMXSAMXSAMXAXXSMXMAXXXMXMMMSAAXAMXMSSMMMXAMXAAX
+XAAAMMMMXMMMMSAMAMASMMMMAMMXMAMMSASAAXXXXMXMAAMMXMMMSASASMASASMMMAMAMAMAXAAMSMMSMMAAXMMMSAMAMMSAMASXMMSXMMMMAMSMMMMMSMAMSXSMSAXAXXAAXMAMMXSS
+AMMMSMMMSASAAMASASXSMAASAMXMMXXAMAMSMMMMMMAXXMMMSAXXSAMAMSMXXMXMAXMMMAMAMAMAAXMAMXMMSSSXXXMXSAMAXAMXMASAXAMMAMAAASMAASXMMAMAMMMSMSXSXMXXSAXM
+MXMXAAAAXASMSSXMASXSXSMSXSXXXASMMXMXMMMAAXMMXSAAMXMAMXMXMSXSSMMSXXXXMXMMMSXSMXSAXSAMAAMMSMSAMXSSMSSSMASMMXXSSMMSXXMAMAMAMSMAMXAAASAMMSAAMMSS
+MASXSSMSMMMAMMMSAMASAMMXMMMMXXMAAMXMMAMMSMSAAMMMSMMASAMAAMAXAAAAMSMSMXXAAAXAMXMAMSAMMSMAAAMASMXXAXAAMAMMAMXMMAMMMMXSAASMMXSSXMXMXMAMAMMSMSAM
+MAXXAXXAMAAAAAAMASMMAMAAAAASXSMSSMAMSASXAAMMSMSXAASASASXSMSMSMMSSMAAAMSMMSSSXSAMXSAMXMMSXSXAMXMMSMSMMSXMASAASXMSAMXASXMAMXAXSMASAMAMMMAMMMMS
+MSSMMMSMSSSSSMXXAMAMXMSXMSMSAAMAAMAMXAMMMMMXMASXMMMASASAXAMAMXXXAMSMSMAAXAMXMMMAXSAMXSAMMXMASXMAAXMASAASAMMMMMMSSSMMMMSSMMAMMXASASXMXXXXMAXX
+AXAMMASXAXXAAMMXXXAMMXMSXMMMXMMSSMSSSSMSXASAMXMAMSMAMAMMMAMSSSSSMMMXXXSXMMSAMASMXMASMXAMAXAXAXMAMXXMMMMMAMSAXAMMMXMAXXAMXMMMSMMSAMXASMMMSMSM
+XMAMMMMMXSXMASAAMXSMXAAMXMAXMXXMAXXMAAAXMASASASAMAMASXMMSSMMXAAXXXMASMMXSSXXXAMMASMMMSSMXSSMMXMAXMSMAXMMXMSAMSSSSSMSAMXSXMSAMAAMAMSMSAAXAAAX
+SSSMAXSAMXMASMMMSAXSSMSMASAXSAMXMAXMMMMMMAXMMXSXSMSAMAMMAMAXMMMMMAMASAMASAMSMMSAMXMAMAXAMXAXXSMXMAASXXMMSXMSMAAAAAAXASMSAMMAMMMSSMXXXMSSMSMM
+XAAMXMAMXAMXXAAXMXMAXAAMXMAAXAXSSSXMXSAXMMSSSXMASMMXSSMMASXMXAMMMSMMMAMXMMAXAASASMMMMASMSSMMXMAASMMMMMAAMXAAMMMMMMMMASASXMSSMSAMAAXMSMXXXMMS
+MSMMMXSSSXSASMMSMMMMMSMSXMXMMMMMAXAMAXASMAMMAAMAMASAMXAMMMAASMSAAMASXSSSSXMMMMSAMAASMMXMXAAMAMAMAAAAMSAMXMAMXSAAXSMMAMMMAMAMASAMXSMXSAAMMMAA
+AAXXMAMAMAMASMAAAAMXAAMMASAXMSSMMMAMMXSAMASXSMMAXXMASXSMASXMASXMMSAMAAAXMAXXXXSXMXMSASMASXMSSSMXSXMAXSASXSMSMSSMXAXMASASMMASXSSMSAMXMMMSAMXS
+SAMSAMSAMMSMMMSSMMSMSMXSAXXMSAAXXSASXXMASXXAAAXMSSMXMAASAMMMXXMAXMAMMMMMSSMSMAMXSXAXAMMMSAMAAAMAMXMXXMAMAXXAAMASMMMXMSASXSAMMMXSAMMXXAAMASAM
+MAAMAMXAXXAAXAXAXSMXMSAMASMMMMMSAMXSAMSXMMMSMMXMAXMMMMMMMSMSASMMMSXMXAAAAXAAMXMAMMSMMMAXMAMMSMMASXMXSMMMAMSSSMAMMMXSAMXMASXMASMMMXMSMMMSAMMA
+MAMMMMXSSSSSMXSAMXMASMMMSAXXAXAMASAMAAMMMXAMAMXMAMSMSMXAAAXMASMSAXASXMMMSSSSSSMXSAMXMXXSXXMAMXMASAXAMASMSXMAAMXSXAASAMMMMMMSXMAMXMSMXAAMXMAS
+MAMAMMXAAAAMMAMAMASMSAXMMAMSMMMSXMASMSMAMMXSAMSXSAXAAXSMSSSMSMAMXSAMXMAMAMAMAAMSMMMASMAMXAMXMAMASMMMSAMAMAMSMMXMMMMSAMXMMAMXAXSASMAMMMSXMAMX
+XAXASMMMSMMMMAMASXXXXAMXMAMAAXXAAXAXMAMXXAAMASXAMMMSMMAMAMAXXMXMASAMMSXSSMAMSMMMAMSASXASAMXMSAMXSXAMXXMASAMAAMMSMXMXAMAMXMSMXMMASMMSAMXAMSMS
+SXSASXXMMMSXSSSXSMSSMASASMSMMSSSSMMSSSMSMMSMXMMMMXAMMSSMASXMSMSMASAMXAASASXXAMXMAMSXMMXXAMXAXXSSXXXSAMSASASMSMASXMMSMMASAAXMSMMMMAXSASMMMAAM
+AAMAMMMMMAXAAAXXXAAAXASMSXAXMAAXMASAXAAXMAXMMMXMAMXXAXXSASAAAAXMASXSMMSMAMSAMAXMAXXAMSSMXSXMXSMXAXXMAMMMSXMAMMASAMXAXSAXMSMXAXAMMXMSMMAASMSM
+MMMAMAAAMMMMMMMMMMSSMAXMSXMMMMSMSSMAMMMMMAMAASASXMSMMSXMXSMSMMMXXMASMXAMAMSSMMSMSXSMMAASAMAXXMASXMXMMXSAMAMAMMXSAMSMMMMSAMASMSSSMXMXMSSMSAXX
+SXMXXXSXSAAAAMXXAAXXMMSSMASXXXXMXAMMMSSXMASMMSMSAAAAASXSAXMAXAXXAMXMXXXSXMMAMSXAXAMAMSSMXSAMXMAMXAXSMAXAXXMAXXAMXMAXAAAMAMMSAAAAMAMXMAMAMMMS
+AAXSMMMASXMMXSASMSXXAAMASAMASXMMSSMAAXAXMXAAMSXSMMMMMSAMMSMMSAMSSMMMMSAMMSSMMMMMMXMAXMAXXAMXSXAXXMAMMMSMSSSSSMSSSSMSMSMSAMXMMMMMMMXMSMMMMAAA
+MSMSASMAMAMXMMMAAMMSMXSMMMSAMAAAAXSMSSMSMMSSMMAXXXXXSMMMAAAXMAXAAAMAAMAMAAXXAASASMSMSAMSMSMASXSMMSSMAXXMAAAXAAAXAAXXXXASAXMMMSASASAAAXSASMSS
+SXAXAAMSMXMAAAXMXMASAASXMAMASMMMSMMMAAXAAMMXAMXMSASMSAMXSSSXSMMSSMMMSSSMMMSSSXSASAMXMAXMAXMXMAMXAAMMMSXMMSMMMMMMSAMXAMMMMXAAAMAMAXMSMSXAXAAX
+XMMMMMMXMASXSMXXMMAMMMXAMMSAMAXXXMAMSSSSSMAXMMSASAMASXMXMAMXAAAMAXSMMXMASMAMMMMXMMMAMAMMMMMSMMMMMXSAMXMXMAXXXSXAXAMXSXXAMMSMSMSMAMXAMXMXMMMM
+MXAAAXSAMXMAAAMSMMXXAMXMMXMASMSSMSSXXMAXXMSMSASMMAMAMAMAMXMSSSMSAMXAXXMASMSMSASMMSSSSXSAMAAXAAAMAASXSXAASASXAAXMXMXAMMMMSAXAAAXMSMMAAAAAMASX
+AXSSXSASAMSSMMMSAAMSMSAMXXSAMXAAMAMSMMMMXMXXMAMAMXMMSAMAMAMXXAAMMMSMMSMMXAMAMAXXAAAXAASASXSSSMSMMXSASASXSXMMMMMMSXMMXXAAMMSXMSMAMASMMMSMSAMA
+SMAAXXMASAAXAAAXMMMAAXAXSAMXXMSMMASAXAAMSAMSMSMSMSMAXXXAXAMXXMSMSMXMAXAAMMMAMXMMMSSMMMMAMMAAXSAMXXMXMAXAMXXAAXAMXAXAASMSSXAXMXMSMAMMAMAXMAMX
+MAMAMXXAASMSSMSXSASMSMAXSXSASMMXSXSMSSXSAMXAAXAAAAMMMSSMXSSMMXAAAAXMASMMSASXSSMXAAAASAMXMSMXMMMXSAMXMXMXMASMSSSMXMMSMSAMMMSSMAXMASASAMSMSAXM
+SSSMASMMMMXAAAAASASAMMMMXMAXMAAASXMXAAXSAMXMXMSMSMXSAMAMAXAAAAMSMSMMMSAASMSMMAXMSSSMMXMAMAMSXSAAAAXASAMXMAXXXAMXXXAXMMXMAAAAXAMMXAAMXXAMXXXX
+XAAAXMASAXMSMMMMMAMXMASXSSMAMMMMSAMMMSMSASAXXMMMXXAMASAMXSAMSMXXAAMAMSMMMAMMSAMMAAXAXMAMXAXAAMMSSMMMSXSAMXSMMMMXMAMMMMASMMXSMMSXMMSSSMMSMMMX
+MSMMSSXMAXXXXXMAMXMSSMSAAAXMASMXSAMXMXAMAXXXMXAXMMXSAMXAXAXMMXAMXMSMXXXMASMAMMXMASMSMSASMSSMSMMAAAXXMASASXXAASASXSAAASASMSAAAAAAXXAAAAXAAAXX
+MXMAXMMMMSSMMMXXSMMXAASMSMMXAAAASAMXSMMMSMMXMAXSAMAMASXMMMXXAMXAAXXMASMMAMMXSMXSAXAMASMXAXXXXAMSSMMASXMASXSSMSAMAMXXMMXSAMSSMMSMMXMSMMSSSMSM
+XAMMXMAXAAAAAMSMXASXMMMXXASXMASXSXMXMASAMAXASAXXAMASAMASAXMMXMMXMSAMXMAMMSASXMASAMAMAMAMAMSMMXMAMASAMAMMMAAAXMAMSMMSSMSMMMXXMXMXSSMXAXAAAAAA
+SSMSASXMMSSMMAAAMAMAXMXASAMXMAXAMASXSMMASXSMMSMSMMXMMSAMXMSAMXSMXAAMASAMXSXMAXXXMXMMXSMAAAXSMXSASXMASXSAMXMAMXMMXAAAAXMASXSASAMAMAASXMMXMMMX
+SAASASXAXXXMMSSSXASMMSAMMMMSMXSAMAMMAAMAMAMMAMMASXAAMMMSMMMAXAXAMMMXXMAXAXAMSMMMMSXMASXSXSAMXAMXXXSMMXMXSAMASXMASMMXMMMAMASAMMMASMMMMASMSSSS
+MMAMMMMSMSMSAAAAMXMXASXXAAMASMSMMXMSSMMAMAMMASMMMXMXMAXXAASXMASMSXSXMSMMSMSMAAXAAAAMAXAASMXAMSSSMXMASAMAMAMAXAMXSSSMMAXAMXMSMASAMXXAXMAAAAAX
+SMMMXAXAAXAMMMMXSMMMXMASXMXAMXMMMAMXMXSAMAMMAXAXSXSASXMSSMSXMMAAAASMMAXXXAAXMXMMSMSMMMSMMSXXXXAAAAXAMAMSXSMSXMMSMAMASXSSSSMMXXMMSMSXSXMMMMMM
+XAMMSSSMSMMMSAXXMAXSAMMMMSMSSXMSSSSXSASMSSSMSSSXMASASAMXAAXXXAMXMAMASXXMMSMMMXMMXXXAXXXAAAXSMMSMMXMSSSMMAXAXMAMASMSXMAAMMAAXXMAXAAXAXMSXMSSM
+SSMAMXAAXAAAXMSMSSMSXSAMXXAAAAAAAMAMMAXAAAMAXSXAMAMXMAMXMMMMSMXAMXSXMMXSAMMSAASAMXMXMAXMMMXAAMMMXMXMAMXMAMAMSXSASXSMMSMASMMMXMASMSMXMASAAAAM
+SMMASXMMMXMSXXAAAMXMXSMMMMMMXMMMSMXMMSMMMSMSXMSXMSMSSSMXMXAAAXAMXXSAAAXMASAMSSMASMMSAMXSMSSSSMMXMAAMSMMMAMSMAMMMMXMXAMAMSAMXSXAXAXXXAXMMMSSM
+SASASXSXSAXAMSMSMSSMAMXASXMASXAXXXXMAMAMAXXMAXXMAMAMAXXAMXSSMXSAMASXMMXSAMMMXXMMXAAAXXMXAAMAAMXAXSAXAAMMMSAMXMAMSSMMMSSXSAMASAMSSSMMSSXMXMAM
+XMMAMXSASMSXAXAMXAXMASXMSAMXAMXXMSXMASAMASASXMMMAMAMXMMMSAMAMMMAMMMAMXXMXMXAMXAAMXAMXSASMXXSXMMSXMMSSSMMSXMAMMAMAMAXAAAAMXMAMMMAAAXAAMAXMMXA
+MSMSMAMAMXSASMSMMSSMASAASAMXSMSMXMASASASASAMMMAMXSXMAMXAMXMAMAXXXAXAMXAASMSASXMAXSAXAXMMMSMMASAMAAAAAMAXMAXXSASMMSMMMSMMSMMMSMMXSMMMSSSMMSSM
+MAAXMXMAMXXAMAMAMXXMAMMMMMMMMAAASXMMMSAMAMAMASXSXMXXASMASMSMSMSMSMSAXAMXMASASXMAMSXMXXXSAAASAXASMMMSSSMMSXMASAMXXAAXXXXAAAAXAAXAMXXAAMMAMAAX
+SMSMXAMAXXMMMMMSSMXMMMSXXAXAMSMSAMSAMMAMAXAXXXAXMAMXMSAMAXXAAAAXAMSAMSMSMAMAMXMSMMMSSXAMSSMMMXMMAXAMXAAAXAAMMXXXSXSMMXMXSMMMSSMSAAMMMMXAMSSM
+XMAASASAMSMSXXMAAAMSSXMASMSMXMMAAASXMSXMMSMSMMMSMAMASMMMMMMSMSMMXMMXMMAAMAMMMXMXAAAAMMXMAXMASAMXAMSSSSMMSXMXMXMASAXMASXAMXSAAMMMMMXMXMXMMAMX
+MSMMXMXAXSAMXSAMXSAAMMSAMXAXAXXSMMXAXSAMXAMAXAMXMSSMAAAMASXMAAXAMMMMMMXMSMSMSMMSSMMSSSSMAXXASASXSSMAMAXXXAMXSAAAMAMASAMXSAMXXXAAASXSASASMMSS
+AAMMAMSXMMAMAMAXSMMMSXSASAMSXSAMASMMMSAMSXSASMSAMXAXMSMSASAMXMSSMMAAAAAXXMXMAAMAAXMMMMAMAMMMSAMXMAMMMSMMMSMASMSAMMMMMMMAMAMMMSSSMSASASMSASAM
+SXSSXMAAXSAMXSAMXASXSAMXMAXAMAAMAMAAASMMMXMASXMASMSMAXAMASAMXXSAASMSSSSSXXASXSMSSMSAASAMAXSAXAMXSAMXAXAXAAMXSMMXAAAAAAMASAMAMAAXMXAMAMMSXMAS
+XAXMASXSMXXXXAMXSAMXMXMASXMAMSAMXSSMMXSXMASMSMSMMXMASMXMXMXAMXSSMMMXAAXXXSMSAXAMMASXMSXSAXMASMAASXMMASXMSSSMXMASXSSSSMSASMSMSMSMMMAMXMXMASAM
diff --git a/AdventOfCode.Tests/Data/2024_Input_Day_5.tst.data b/AdventOfCode.Tests/Data/2024_Input_Day_5.tst.data
new file mode 100644
index 0000000..4790cb4
--- /dev/null
+++ b/AdventOfCode.Tests/Data/2024_Input_Day_5.tst.data
@@ -0,0 +1,1374 @@
+95|51
+92|45
+92|39
+55|51
+55|91
+55|43
+46|93
+46|69
+46|84
+46|99
+11|43
+11|99
+11|63
+11|39
+11|88
+66|86
+66|96
+66|68
+66|24
+66|76
+66|81
+19|95
+19|45
+19|66
+19|44
+19|64
+19|55
+19|86
+45|88
+45|69
+45|57
+45|44
+45|86
+45|54
+45|51
+45|58
+84|37
+84|55
+84|18
+84|28
+84|76
+84|66
+84|86
+84|68
+84|71
+67|69
+67|66
+67|71
+67|37
+67|61
+67|26
+67|55
+67|52
+67|45
+67|19
+63|88
+63|73
+63|97
+63|37
+63|84
+63|42
+63|52
+63|95
+63|19
+63|64
+63|45
+91|38
+91|84
+91|26
+91|43
+91|77
+91|82
+91|39
+91|97
+91|99
+91|35
+91|92
+91|73
+69|88
+69|86
+69|61
+69|51
+69|57
+69|18
+69|58
+69|24
+69|68
+69|38
+69|81
+69|62
+69|32
+97|44
+97|19
+97|55
+97|81
+97|24
+97|68
+97|69
+97|58
+97|96
+97|71
+97|64
+97|14
+97|76
+97|18
+28|54
+28|62
+28|86
+28|91
+28|81
+28|23
+28|61
+28|52
+28|76
+28|64
+28|57
+28|95
+28|18
+28|88
+28|96
+42|96
+42|95
+42|26
+42|35
+42|68
+42|84
+42|69
+42|55
+42|97
+42|88
+42|28
+42|81
+42|67
+42|86
+42|71
+42|66
+35|37
+35|95
+35|76
+35|96
+35|52
+35|97
+35|69
+35|24
+35|88
+35|61
+35|81
+35|68
+35|86
+35|18
+35|19
+35|44
+35|14
+73|86
+73|77
+73|26
+73|96
+73|67
+73|66
+73|52
+73|35
+73|45
+73|84
+73|69
+73|24
+73|18
+73|19
+73|37
+73|55
+73|64
+73|97
+61|93
+61|91
+61|57
+61|92
+61|44
+61|63
+61|42
+61|51
+61|65
+61|54
+61|38
+61|62
+61|73
+61|58
+61|46
+61|39
+61|77
+61|23
+61|43
+93|67
+93|95
+93|97
+93|18
+93|52
+93|81
+93|35
+93|96
+93|45
+93|71
+93|19
+93|73
+93|77
+93|69
+93|86
+93|64
+93|28
+93|37
+93|66
+93|88
+65|35
+65|28
+65|39
+65|99
+65|84
+65|67
+65|19
+65|45
+65|37
+65|71
+65|93
+65|97
+65|63
+65|42
+65|77
+65|32
+65|73
+65|43
+65|92
+65|26
+65|46
+23|84
+23|77
+23|38
+23|65
+23|93
+23|26
+23|73
+23|11
+23|43
+23|46
+23|62
+23|39
+23|67
+23|92
+23|63
+23|99
+23|82
+23|35
+23|54
+23|42
+23|51
+23|91
+58|62
+58|92
+58|82
+58|43
+58|93
+58|99
+58|77
+58|23
+58|65
+58|39
+58|54
+58|51
+58|63
+58|46
+58|73
+58|26
+58|38
+58|91
+58|11
+58|84
+58|35
+58|32
+58|42
+52|32
+52|57
+52|11
+52|14
+52|23
+52|68
+52|44
+52|55
+52|43
+52|91
+52|76
+52|54
+52|18
+52|51
+52|61
+52|65
+52|82
+52|58
+52|46
+52|62
+52|39
+52|38
+52|92
+52|86
+76|99
+76|62
+76|82
+76|73
+76|46
+76|42
+76|61
+76|32
+76|54
+76|44
+76|93
+76|63
+76|38
+76|57
+76|51
+76|43
+76|91
+76|14
+76|65
+76|58
+76|39
+76|23
+76|92
+76|11
+38|77
+38|99
+38|84
+38|35
+38|66
+38|65
+38|43
+38|28
+38|46
+38|92
+38|67
+38|97
+38|82
+38|32
+38|42
+38|39
+38|19
+38|26
+38|63
+38|37
+38|93
+38|11
+38|71
+38|73
+44|57
+44|32
+44|63
+44|77
+44|51
+44|67
+44|65
+44|58
+44|23
+44|84
+44|93
+44|73
+44|82
+44|11
+44|92
+44|42
+44|39
+44|62
+44|99
+44|43
+44|54
+44|46
+44|38
+44|91
+62|77
+62|42
+62|73
+62|84
+62|43
+62|11
+62|32
+62|35
+62|67
+62|26
+62|92
+62|54
+62|63
+62|65
+62|38
+62|91
+62|99
+62|97
+62|19
+62|46
+62|39
+62|51
+62|93
+62|82
+54|11
+54|71
+54|99
+54|51
+54|42
+54|35
+54|39
+54|67
+54|65
+54|43
+54|93
+54|46
+54|77
+54|73
+54|26
+54|84
+54|38
+54|82
+54|92
+54|19
+54|32
+54|63
+54|97
+54|66
+43|66
+43|45
+43|37
+43|99
+43|69
+43|67
+43|93
+43|26
+43|28
+43|19
+43|97
+43|71
+43|24
+43|35
+43|63
+43|42
+43|88
+43|95
+43|64
+43|96
+43|77
+43|81
+43|73
+43|84
+24|39
+24|38
+24|11
+24|14
+24|55
+24|91
+24|51
+24|58
+24|86
+24|62
+24|61
+24|65
+24|76
+24|82
+24|44
+24|32
+24|23
+24|46
+24|68
+24|54
+24|57
+24|52
+24|18
+24|92
+37|44
+37|86
+37|64
+37|69
+37|96
+37|24
+37|14
+37|91
+37|57
+37|76
+37|52
+37|88
+37|68
+37|55
+37|54
+37|45
+37|62
+37|58
+37|95
+37|61
+37|81
+37|51
+37|18
+37|23
+39|69
+39|97
+39|88
+39|26
+39|45
+39|96
+39|35
+39|71
+39|19
+39|77
+39|64
+39|67
+39|28
+39|63
+39|73
+39|99
+39|84
+39|93
+39|37
+39|66
+39|42
+39|95
+39|81
+39|43
+82|77
+82|73
+82|67
+82|96
+82|93
+82|26
+82|37
+82|43
+82|19
+82|99
+82|39
+82|11
+82|95
+82|28
+82|97
+82|42
+82|69
+82|71
+82|64
+82|84
+82|35
+82|66
+82|63
+82|45
+81|38
+81|51
+81|18
+81|55
+81|52
+81|76
+81|44
+81|92
+81|68
+81|14
+81|86
+81|32
+81|24
+81|61
+81|62
+81|57
+81|91
+81|23
+81|46
+81|58
+81|54
+81|82
+81|65
+81|11
+71|86
+71|55
+71|62
+71|66
+71|57
+71|45
+71|76
+71|69
+71|96
+71|23
+71|64
+71|44
+71|28
+71|95
+71|24
+71|37
+71|18
+71|61
+71|68
+71|88
+71|58
+71|52
+71|14
+71|81
+99|19
+99|52
+99|66
+99|84
+99|88
+99|42
+99|95
+99|28
+99|69
+99|64
+99|35
+99|45
+99|24
+99|93
+99|97
+99|96
+99|81
+99|73
+99|71
+99|26
+99|67
+99|77
+99|37
+99|86
+32|37
+32|71
+32|46
+32|11
+32|39
+32|96
+32|45
+32|66
+32|28
+32|43
+32|63
+32|35
+32|19
+32|92
+32|73
+32|93
+32|26
+32|84
+32|67
+32|99
+32|77
+32|82
+32|42
+32|97
+26|64
+26|37
+26|69
+26|55
+26|44
+26|86
+26|61
+26|76
+26|24
+26|81
+26|45
+26|19
+26|14
+26|95
+26|97
+26|88
+26|71
+26|66
+26|35
+26|28
+26|96
+26|52
+26|68
+26|18
+14|99
+14|43
+14|44
+14|46
+14|54
+14|32
+14|65
+14|84
+14|82
+14|93
+14|23
+14|57
+14|39
+14|42
+14|63
+14|73
+14|62
+14|38
+14|11
+14|92
+14|77
+14|58
+14|91
+14|51
+57|91
+57|93
+57|54
+57|99
+57|58
+57|42
+57|23
+57|67
+57|26
+57|77
+57|82
+57|11
+57|92
+57|38
+57|65
+57|39
+57|63
+57|73
+57|43
+57|32
+57|51
+57|84
+57|46
+57|62
+18|23
+18|99
+18|91
+18|44
+18|61
+18|62
+18|82
+18|58
+18|63
+18|43
+18|55
+18|38
+18|51
+18|46
+18|76
+18|57
+18|32
+18|68
+18|39
+18|11
+18|65
+18|54
+18|14
+18|92
+96|65
+96|23
+96|51
+96|52
+96|38
+96|88
+96|44
+96|76
+96|61
+96|86
+96|64
+96|62
+96|55
+96|18
+96|14
+96|95
+96|57
+96|24
+96|54
+96|91
+96|69
+96|58
+96|68
+96|81
+68|44
+68|61
+68|82
+68|63
+68|46
+68|92
+68|62
+68|23
+68|91
+68|32
+68|76
+68|43
+68|38
+68|65
+68|99
+68|73
+68|11
+68|14
+68|39
+68|57
+68|93
+68|51
+68|54
+68|58
+77|66
+77|28
+77|86
+77|64
+77|19
+77|45
+77|84
+77|71
+77|68
+77|67
+77|35
+77|69
+77|52
+77|96
+77|55
+77|18
+77|76
+77|24
+77|26
+77|37
+77|95
+77|81
+77|88
+77|97
+88|18
+88|86
+88|52
+88|65
+88|32
+88|61
+88|92
+88|81
+88|76
+88|38
+88|23
+88|24
+88|58
+88|68
+88|44
+88|62
+88|82
+88|14
+88|51
+88|46
+88|55
+88|54
+88|91
+88|57
+51|39
+51|42
+51|93
+51|99
+51|71
+51|97
+51|38
+51|84
+51|67
+51|28
+51|65
+51|73
+51|82
+51|11
+51|32
+51|26
+51|77
+51|66
+51|19
+51|43
+51|63
+51|35
+51|46
+51|92
+86|58
+86|62
+86|46
+86|32
+86|55
+86|92
+86|38
+86|39
+86|43
+86|44
+86|23
+86|91
+86|76
+86|54
+86|18
+86|63
+86|57
+86|68
+86|65
+86|61
+86|14
+86|11
+86|51
+86|82
+64|95
+64|81
+64|23
+64|54
+64|18
+64|51
+64|55
+64|61
+64|86
+64|88
+64|62
+64|52
+64|91
+64|14
+64|57
+64|32
+64|92
+64|58
+64|44
+64|65
+64|68
+64|38
+64|76
+64|24
+95|57
+95|68
+95|76
+95|23
+95|92
+95|81
+95|24
+95|55
+95|54
+95|58
+95|46
+95|86
+95|14
+95|32
+95|62
+95|38
+95|18
+95|91
+95|65
+95|44
+95|52
+95|88
+95|61
+92|77
+92|67
+92|42
+92|97
+92|96
+92|73
+92|71
+92|37
+92|82
+92|84
+92|63
+92|26
+92|35
+92|28
+92|46
+92|99
+92|69
+92|43
+92|19
+92|93
+92|66
+92|11
+55|44
+55|11
+55|23
+55|92
+55|57
+55|65
+55|54
+55|68
+55|76
+55|32
+55|61
+55|58
+55|38
+55|82
+55|63
+55|93
+55|46
+55|14
+55|99
+55|39
+55|62
+46|19
+46|42
+46|39
+46|97
+46|63
+46|77
+46|67
+46|28
+46|73
+46|66
+46|37
+46|43
+46|82
+46|11
+46|26
+46|71
+46|45
+46|96
+46|35
+46|64
+11|73
+11|93
+11|69
+11|19
+11|95
+11|84
+11|71
+11|96
+11|77
+11|64
+11|45
+11|67
+11|26
+11|66
+11|37
+11|42
+11|35
+11|97
+11|28
+66|88
+66|55
+66|44
+66|91
+66|95
+66|52
+66|23
+66|61
+66|18
+66|45
+66|37
+66|62
+66|69
+66|58
+66|64
+66|14
+66|57
+66|28
+19|69
+19|52
+19|96
+19|28
+19|24
+19|37
+19|68
+19|14
+19|76
+19|57
+19|61
+19|71
+19|58
+19|81
+19|23
+19|18
+19|88
+45|62
+45|55
+45|64
+45|52
+45|24
+45|14
+45|18
+45|81
+45|38
+45|95
+45|96
+45|76
+45|61
+45|23
+45|91
+45|68
+84|69
+84|61
+84|81
+84|88
+84|97
+84|35
+84|95
+84|64
+84|19
+84|24
+84|52
+84|45
+84|26
+84|96
+84|67
+67|64
+67|14
+67|96
+67|18
+67|24
+67|81
+67|35
+67|28
+67|68
+67|86
+67|76
+67|88
+67|97
+67|95
+63|66
+63|77
+63|67
+63|81
+63|71
+63|24
+63|96
+63|93
+63|69
+63|35
+63|99
+63|28
+63|26
+91|63
+91|54
+91|46
+91|67
+91|19
+91|71
+91|65
+91|51
+91|42
+91|93
+91|32
+91|11
+69|55
+69|14
+69|52
+69|54
+69|95
+69|23
+69|91
+69|44
+69|76
+69|65
+69|64
+97|57
+97|61
+97|86
+97|52
+97|28
+97|66
+97|45
+97|37
+97|88
+97|95
+28|58
+28|24
+28|69
+28|45
+28|14
+28|55
+28|68
+28|37
+28|44
+42|19
+42|77
+42|64
+42|24
+42|45
+42|18
+42|52
+42|37
+35|64
+35|55
+35|66
+35|71
+35|57
+35|45
+35|28
+73|95
+73|42
+73|81
+73|88
+73|28
+73|71
+61|32
+61|14
+61|11
+61|99
+61|82
+93|84
+93|24
+93|42
+93|26
+65|82
+65|11
+65|66
+23|97
+23|32
+58|67
+
+37,45,96,69,95,88,81,24,52,86,18,55,68,76,61,57,58,23,62,91,54
+97,71,66,28,95,86,18,76,61,14,57
+11,58,62,65,82,76,43
+35,93,66,42,86,45,88,67,96,26,73,71,95,81,24
+64,95,88,81,24,52,86,18,55,68,76,61,14,44,57,58,23,62,91,51,38,65,32
+69,88,81,24,86,18,55,68,76,61,14,44,57,58,23,62,91,54,51,38,65
+54,65,32,92,82,39,43,99,93,73,42,84,26,97,19
+92,46,82,39,43,73,84,67,19,71,96
+65,32,67,99,77,57,39,93,11,51,42,63,91,58,62,38,73
+92,26,93,66,51,39,42
+73,63,35,77,37,19,43,93,26,95,28,66,71,45,67,42,84
+99,93,73,42,84,26,97,71,66,28,37,45,64,24,52
+97,71,66,28,45,96,69,64,95,88,81,24,52,86,18,55,68,14,57
+39,54,92,91,51,11,46,84,77,43,23,73,63,58,62,99,32
+37,95,55,76,58,91,54
+11,44,54,46,62
+26,99,11,97,39,62,32,46,92
+14,44,58,23,54,38,92,39,43,63,77
+99,93,42,84,26,35,97,71,66,37,69,64,95
+61,44,57,23,62,91,51,38,32,92,82,11,39,43,63,93,42
+51,63,93,73,42,84,67,26,97,71,66
+88,81,86,14,23
+18,55,68,76,61,44,57,58,62,91,54,38,65,92,46,82,11,43,63
+93,63,11,23,51,68,76
+38,43,82,77,91,23,14
+42,84,37,45,88,52,55
+44,61,54,62,76,82,92,23,63,57,99,38,32,14,65,93,11
+97,64,96,66,88,86,68,76,28,61,24,37,18,19,69,14,44,71,45,52,35,55,81
+91,38,65,32,92,46,11,39,43,63,99,93,73,77,84,67,19
+91,38,65,46,63,99,84,97,19
+73,63,43,51,99,92,38,82,26,65,84,46,97,93,11,77,42,54,35,19,71
+84,26,64,95,24,86,18
+28,37,44,19,58,76,52,14,96
+55,68,76,61,14,44,57,58,23,91,54,51,65,32,92,82,11,39,43,63,99
+46,82,11,39,43,63,99,93,73,42,77,84,67,26,35,97,71,66,28,37,45,96,69
+35,37,96,64,52,55,44
+37,63,66,84,64,45,26,67,35,88,69,71,28,81,77,42,93,95,99,97,24,96,19
+24,81,19,88,18,37,26,95,45,84,67,28,97,52,66,73,69,86,35
+14,76,95,57,68,86,92,55,51,91,52,61,81,54,65,24,18,58,44,32,23
+65,73,19,43,99,26,92,71,11,67,39,66,84,28,46,93,97,35,32
+45,96,86,76,61,44,58,54,51
+32,92,46,82,11,39,63,99,93,73,42,77,84,67,26,35,97,19,71,66,28,37,45
+69,61,44,62,91,54,65
+91,54,32,99,57,92,65,14,39,46,63,42,43,58,44,82,61,51,93
+92,82,11,63,93,73,42,77,97,19,71,66,37,45,96
+42,26,71,37,45,64,24,52,86,18,55
+82,18,61,62,57,14,46,58,54,24,91,11,86,68,52,92,65,76,23
+39,43,38,71,46,84,99,73,67,77,51,19,35,92,11,97,66,63,65,82,93,32,26
+37,82,42,43,39,64,28
+68,69,71,64,14,96,86,52,28,44,57,95,19,55,18,76,61,88,37,97,66
+54,58,18,52,44,11,39,82,92,76,51,86,14,55,57
+37,45,96,69,95,81,24,52,86,18,68,61,14,44,58,62,91
+84,67,26,35,19,71,66,28,37,45,96,69,64,95,88,81,24,52,86,18,55,68,76
+71,66,28,37,45,69,64,88,81,24,52,86,18,68,76,61,14,44,57,58,23
+77,73,35,28,96,71,43,39,66,95,69,37,84,26,93,19,99
+71,96,66,11,73,37,35,28,97,84,69,39,93,77,43,45,99,63,46
+91,54,51,38,65,32,92,46,82,39,43,99,93,73,42,77,84,67,26,97,19
+68,38,86,32,61,54,44
+92,46,82,11,43,63,99,93,73,42,77,84,67,26,35,97,19,71,66,28,37,45,96
+86,95,96,28,52,26,88,97,69,19,35,55,66,24,45,67,37,76,71
+65,46,82,39,63,42,67,26,35,19,71,66,37
+68,76,14,44,57,58,62,91,54,51,32,92,46,82,43,99,93
+45,64,95,81,52,86,18,55,68,61,23
+69,64,86,55,68,61,44,58,62,38,65
+14,62,91,51,65,46,82,11,77
+39,91,63,46,11,84,82,65,35
+69,64,95,88,81,24,52,86,18,55,68,76,61,14,44,57,58,23,62,54,51,38,65
+92,82,39,93,73,42,77,84,67,97,19,71,66,28,37,45,96
+19,71,66,28,37,45,96,69,64,88,81,24,52,86,18,55,68,76,61,14,44,57,58
+67,19,42,96,18,24,55
+84,67,26,35,97,19,71,66,45,69,24
+32,92,46,82,11,43,99,93,42,84,67,35,19,71,66,28,37
+39,43,99,73,42,77,84,26,97,19,66,28,37,96,64,95,88
+84,91,32,97,73,93,46,19,11,99,39
+93,67,91,39,54
+24,65,86,32,57,55,44
+38,65,46,11,39,42,77,84,28
+11,43,63,99,93,73,77,84,67,35,97,19,71,28,45,96,95
+91,57,39,65,76,46,38,55,58,54,18,44,62,51,86,68,92,14,52,32,82
+81,24,52,68,76,61,14,57,58,23,62,54,38,92,82
+66,63,82,99,97,42,64,11,45,67,37,69,35,71,84,26,93,43,73,96,28
+67,38,46,19,11,99,82,54,63,92,32,91,65,51,73
+96,28,24,26,45,84,88,99,97,67,77,93,69,42,19,64,95
+32,45,39,26,73,37,35
+14,57,58,62,91,54,92,39,43,99,93
+67,26,35,97,19,71,28,45,95,88,81,24,18,55,68
+11,97,66,26,63,93,77,42,39,96,82,69,46
+55,76,61,14,57,58,23,62,54,51,38,65,32,92,46,82,11,39,43,63,99
+35,37,45,19,73,93,63,24,77,88,67,42,66,28,71
+62,32,57,43,63,11,51,82,42,38,61
+73,42,77,84,67,26,35,97,19,71,66,28,37,45,96,64,95,88,81,24,52,86,18
+45,96,77,37,66,84,73,63,99,97,67,39,95
+23,62,82,11,93,67,35
+93,42,51,11,58,54,82
+51,24,14,65,55,44,86,88,57,58,46
+18,55,68,61,14,44,57,23,62,91,54,51,38,65,32,46,82,11,39,43,63
+43,99,93,73,42,35,19,71,66,28,96,64,95,88,81
+43,73,58,65,99,63,38,51,32,67,39,26,42
+61,14,23,46,11,43,99,93,42
+46,82,39,63,99,73,42,77,84,67,26,35,19,71,66,28,45,96,69
+81,24,52,86,55,68,76,61,14,44,57,58,23,62,54,51,38,32,92,46,82
+97,19,71,66,45,88,52,68,57
+69,14,88,24,97,52,96,86,76,45,26,81,35,66,37
+91,69,57,14,88,38,96,23,76,68,64,61,95,58,81,54,55,18,52,86,51
+65,42,39,46,43,77,91,57,58,67,23,38,51
+68,77,19,67,69,37,66
+38,51,76,44,46,68,65,92,32,91,14,61,39,43,55,54,63,82,18,62,57,23,11
+26,35,97,71,28,37,45,69,64,95,88,81,52,86,18,55,68,76,14
+95,81,24,52,86,18,68,76,14,44,57,58,23,62,91,54,51,38,65,32,92
+14,44,51,32,92,46,77
+82,77,84,67,35,28,64
+77,84,45,81,24,18,68
+62,54,51,38,65,32,46,39,43,63,93,84,67,35,97
+95,81,52,55,44,38,92
+88,71,55,28,37,95,97,18,64,35,44
+91,58,61,38,11,32,92,39,65,23,68,76,14,43,82
+91,54,51,38,32,92,46,82,11,63,99,77,84,67,26,35,19
+18,68,14,44,57,23,62,51,65,32,46,82,43
+91,55,69,96,86,62,81,58,44,28,88
+57,81,24,66,96,76,68,97,45,37,55
+96,69,95,24,86,68,76,61,44,57,23,62,91,54,51
+18,86,95,69,52,97,96,28,19,67,81,76,35,45,64
+81,54,46,65,24,76,52,51,55,91,86,68,44,57,18,23,82,38,58,62,92,32,14
+61,14,95,55,37,69,96,81,71,68,18,26,76,88,66,97,52
+84,67,71,66,28,37,45,64,88,68,76
+38,32,19,46,54,63,67,65,26,51,97,39,77,84,42,99,43,82,71,11,35,93,73
+92,46,82,11,39,63,99,73,77,67,35,66,28
+66,28,61,37,58,44,14,71,52,88,68,64,55,18,23,45,95,86,96,57,81
+67,97,91,65,46,54,26,35,62
+32,92,46,99,73,77,26,35,97,19,71,28,45
+86,95,19,77,71,24,66,18,55,68,88,45,67,64,28,37,97
+69,64,95,88,81,24,52,86,18,55,68,76,61,14,44,57,58,23,62,91,54,38,65
+55,61,86,92,46,14,76,39,51,32,44
+88,24,55,52,28,68,45,71,35,64,97,14,26,18,37,76,61
+26,73,63,84,58,32,39,92,54,93,38,42,82,77,67
+37,45,69,64,95,81,24,52,86,18,68,76,61,14,58,23,62,91,54
+44,73,51,93,62,57,38,63,99,54,92,76,58,23,14,32,91
+88,81,18,68,61,44,58,23,62,91,54,51,32,92,46
+76,73,57,99,63,61,91,14,32,93,23,58,65
+84,66,28,64,81,55,76
+44,82,39,93,42
+92,82,39,63,93,42,66
+38,32,82,11,73,77,66
+73,42,84,67,97,64,95,24,18
+73,92,84,91,57,42,39,77,99,58,54,46,23,65,67
+96,64,95,88,81,24,52,86,18,55,68,76,61,14,44,57,58,23,62,91,54,51,38
+99,73,35,71,66,28,37,69,52
+65,92,46,82,39,63,99,93,42,84,19,71,37
+76,71,26,64,86,66,18,95,69,35,28,96,24,37,88,55,81
+11,39,43,63,93,73,42,77,84,26,97,19,71,66,37,45,96,69,95
+55,62,95,96,66,86,61,28,45,58,81
+64,88,18,44,54,65,32
+38,43,77,26,97,71,28
+46,43,93,73,42,19,28,45,69
+18,61,58,54,51,38,65,32,46,82,11
+14,92,82,68,51,76,44,18,32,86,46,55,65,62,52,54,57,39,23,91,58,61,38
+99,93,73,42,77,84,67,26,97,66,28,37,45,69,64,95,24
+26,92,42,67,19,99,43,46,28,66,84,73,71,93,82,35,97,11,63,45,39,77,96
+81,55,44,92,62,52,88,91,24,54,18,58,46,65,61
+84,43,51,39,91,42,99,32,38,23,82,65,11,77,62,73,46
+39,43,63,99,93,73,42,77,67,35,97,19,71,66,28,37,45,96,69,95,88
+42,97,67,52,96,84,35,45,55,77,81,66,86,71,95,37,24,64,69
+38,92,46,82,11,39,63,99,42,97,19
+26,35,71,19,77,92,11,65,42,99,51,43,67,63,73,66,93
+67,26,35,19,66,37,88,81,52,86,55,68,61
+86,68,76,65,92,39,43
+81,24,52,61,18,44,76,96,28,64,37,58,14,57,88,68,45,95,86,91,62,69,23
+52,18,55,68,57,23,65,82,39
+52,91,69,62,51,88,14,24,68,38,55,86,65,64,61,54,18,95,57,81,58
+18,14,64,24,68
+97,37,96,69,76
+26,95,35,77,67,84,71,42,55
+58,43,54,65,18,62,38,39,44,14,68,32,86,76,46,91,11,92,51
+55,14,91,54,11,39,99
+81,45,18,52,37,61,64,95,19,66,58
+82,73,54,92,58,44,43,46,61,57,42
+35,69,88,24,76,14,44
+62,91,54,51,38,65,32,92,46,82,11,39,43,63,93,73,42,77,84,67,26,35,97
+88,76,45,96,28,24,95,18,68,55,61,52,19,67,71,86,37,26,69
+62,54,51,46,82,11,43,63,99,93,73,77,84,67,26
+42,77,84,67,26,35,45,96,52
+23,51,38,65,46,82,11,43,99,93,84,26,35
+64,44,81,58,66,55,61
+84,19,97,26,64,81,28,35,63,99,73,67,93,69,43,88,37,71,95,77,45,66,42
+81,24,52,86,55,68,76,61,14,44,57,58,23,62,91,51,38,32,92,46,82
+24,18,68,44,57,23,62,91,54,51,38,65,92,82,11
+66,28,45,96,69,64,95,88,81,52,86,18,76,14,62
+95,86,88,57,71,61,37,18,66,96,24,81,97
+65,23,42,91,11,82,43,39,62,57,63
+26,24,19,35,81,86,55
+46,28,84,73,11,32,82,63,26,99,43,67,66,38,39,97,42,65,35
+37,96,88,61,14,44,62
+77,84,26,35,97,19,71,66,28,37,45,96,69,64,95,88,81,24,52,86,18,55,68
+81,68,57,23,91,54,82
+18,55,68,44,57,23,62,91,54,51,38,65,32,43,63
+99,93,73,77,26,97,19,71,66,28,37,45,96,64,95,88,81,24,52
+95,73,93,99,19,43,64
diff --git a/AdventOfCode.Tests/Data/2024_Input_Day_6.tst.data b/AdventOfCode.Tests/Data/2024_Input_Day_6.tst.data
new file mode 100644
index 0000000..13453bc
--- /dev/null
+++ b/AdventOfCode.Tests/Data/2024_Input_Day_6.tst.data
@@ -0,0 +1,130 @@
+.........................#...........#.#...#...............#..............##.....................#...........#..#.........#.......
+.....................#.................#.......#.........................#...........#.#.......#..................................
+.........#...........#........#.........#.........#...........#........................................#.........................#
+.......#.........................#...........................#.............#......................................................
+..................#................##...............#.#.....................##............#.......................................
+......#...#................#..................................................................#....#.#............................
+.......##................#........#..#.......#......................................#........#............#......###..........#...
+.....................#....................................................#...........#..#...#..........................#.........
+...........#....#...........................#.#...............#..#....................................#..............#......#.....
+.....#........##...............#.......#..#..............................................#..........................#.............
+.#.........#.#...........................#..........................#......................#...........#........#.................
+.................................................................#..#.#.......#..#................................................
+...............................................#.......#...................#....................#.................................
+.......#......#......#......................#...............................#.....##........#...........#......#..................
+........................................................................................................#.....#.#.................
+..#...............................#.#..................................#.............#............................................
+..............#..........................................#.....#.....#..........................#....#.........#..................
+...................................#........................................#................#...........##.....#....#............
+.#.....................................#.......#........................#...................##............#.......................
+.#..................#...........#...........................................................................................#.....
+........................#...................................................##.................................#..#..........##...
+........#............................#.......#...........................#.#...#...................................#.....#........
+...............................#............#.....#......................#.......#...#........................#...................
+.........#.............#.................................................#.......................................#....#...........
+...................................................................#...#.................................#...................#....
+...#.....................#...#...............#..................................................#...#...#.........................
+...................#........#....#....#..#..#...................#.........#..................#..#....#.......#.#.................#
+..............................#........................................#......#.....#..............##................#............
+............#..#.............#.......#........................................................##........#.....#...................
+.....#.............................................................#...#.#.#.............................#..#.#...........#.......
+.......#....#............................................#.................................#...................................#..
+..#.................#.......#..........................#........................................#...............#..............#..
+....#.#...................#............................#..#.......................................................................
+.......................#...............#..............#......#......................#.....................#..............#........
+.#..........#.......................................................................#....................................#........
+.#.......#..................................................................#.....................................................
+..................................................#.............#.............................................#................#.#
+.......................#......#....#................#......................................................#.......#.........#....
+..........................#.#........................................................#......#................................#....
+....................................................................#...............................#.............................
+..#...........#..............................#..#....#............................#...............##..............#...#...#...#..#
+...................................#................................................................#....#...................#....
+..#....#........#..##....#........................#...#...................................#.......................................
+...................#................................................................................................#.............
+.......#........#................#...#.......................................................................#....................
+..............#....................#..........................##.........#.....................................#..................
+.........................................................................#.................#........................#.............
+.............................#..........#.......................................................#......................#..........
+............###....................................................................#.......................#......................
+........#........#...........#.............................#....................#..........#.........................#.#.....#....
+.........................................................................................................#..#.....................
+#.#.....#..........................................................#.....................#........................................
+........##..........#....................................................#..#........#.......#........#................#..........
+.............................................#..........................#.........#........................#......................
+...........................##.............#........................#.#........................#..#................#.....#........#
+#...#..............................................#........#...................................................#.................
+.............#................#............................#............#.........................................................
+#..........................#............#.....................#.....#.................#......#...##...#.............#.#...........
+.....................#...#..#....#...................................#....................#..............#........#...............
+.......................#.................#...........#....#.......#...........................................#..#................
+.........#...........#.#.........#.........................#.....#................................................................
+....................#........#...................................................................#............#..#.#.#............
+..........#.......................#.......................#.......................................................................
+......................................#......#............................#..............................................#........
+.....................#...#.................#.............................#....#...................................................
+..............##...................................................................#......................................##......
+.....#....#...............................................#.......#.##........#.#.............#...............#...................
+....................................#......................#........#.......................................................#.....
+.....#.........................................#.....................#.............#.................#..................#.........
+................................#.........#..#............................................#.........................#.............
+....#.#.....................#......#...................................#..........................................#..#.....#...#..
+.........##.......................#..........................................#.........................#...##.....................
+...............................................................#................................................................#.
+............#.........................................##.......................................#..................................
+.............................#..............................#..................#.........#.....#..................................
+..........................................................#...#.....#..................#................................#.........
+......#...................#.........................................................................................#.............
+#...............................#...........................#.....................................................................
+.......#........#.................................................#.......................................................#.......
+.#......................................................#..............#..................................#...........#...........
+.............#..#.#.......................#..........#......#.##.........................................................#..#.....
+.......#...............#........#......................................................................#..#...........#...........
+............#.........................................#................................................#...................#......
+............#...........................................#.#.......#....................................#..........................
+...........................................#.........................................................#..............#.............
+..................#..#....................................................#..................#....................................
+..#........................#........#.............................................................................................
+.............#........#......................#.......................................#...#....#............................#......
+............#.......#.............#...#...........#.#.................................#.................##........................
+.....................................................................................#.........#.......................#.....#....
+.................#................................#..#....#......#..........................................#.....#...............
+..#...............................#........................................................#.......#...#............#.............
+#.........#..#..#.....................................#....................................#................#.................#...
+.......................#..#...#............................................................................#..#.....#.......##....
+..........#............#.......................#.........................^......#.#...................................#...........
+...##........................##..........#..........#.................#...............#...........#.....##........................
+..............#............#..........................#....#...........#......#......#......................#.....................
+......#.....#....................................................#............#.#......................................#..........
+......#.............................#......................#...............................#........#.............................
+.#..........#.............................................#.............................................#.........................
+...............................##.................................................................................................
+.....................#................................................#...............#............#...............#.....#.....#..
+..................#...........................................................................#...........#...................#...
+##..............................#.#...#.#...............................#...........#.#...................#.......................
+......................#.........#...................................#.................#...........................................
+.......................#............................................................................#.........##...........#......
+.....................................................................#.......#.....#.......................................#......
+#....................................#........#.#.................................................................##.....#........
+..............#..............................#......#..........###.........#................#..............#..................#...
+..................................#..............................#.................##.............................#...#...........
+...............#......#........................#....#........#............#.........#..........#..............#......#............
+...#...........#........#...#...........................#.............#.....................................#.....................
+..............###............#...........................................................#.............#.........##..#............
+............#................................................#.......#..................#....#....................................
+.........#.#...#.....#...........................#.....##......#.....................#..#........#......#.........................
+.#....#.......#.......................#.................................................................#.......#..............#..
+...................#................................................................#.............#...#...........#.........#.....
+.......#.#.......#.......................#....#.....#...............#...#.....#...........................................#.......
+.......#........#...........................................#...........#.........................#....#.......#..................
+..................................#.#.................#.#............................................#...........#....#...........
+....##......#.............#...................................#...#.........#...........................#......#..................
+.........................#......#....#...#........................................................................................
+...#...............#............................................................................#...........................#.....
+....##.#..............................................#............#................#................................#......#.....
+.........#...........................................#...#.......##..............................#................................
+..................#..........#......#.......#......................................#........#...............#......#...........##.
+........................................#......#..........#......................................................................#
+..............#...#...................#.....#..........................................................#..............#......#....
+...#........#........................#...#................#........#.............................##..........................#....
+............#............................#.#........................#.................................#..........................#
diff --git a/AdventOfCode.Tests/Data/2024_Input_Day_7.tst.data b/AdventOfCode.Tests/Data/2024_Input_Day_7.tst.data
new file mode 100644
index 0000000..eb344f0
--- /dev/null
+++ b/AdventOfCode.Tests/Data/2024_Input_Day_7.tst.data
@@ -0,0 +1,850 @@
+31084: 8 67 8 735 38
+40541461584: 5 81 9 4 32 43 283 228
+6208: 915 6 2 539 148 29
+306501986: 6 3 630 45 536 64 6
+21276000: 8 5 5 91 6 5 8 6 8 985 2 8
+1432991: 3 403 4 821 591 2 236
+17115994: 69 321 254 764 3 99
+19961295: 5 311 84 6 63
+22953531: 22 95 35 2 8
+18894343830: 90 5 3 2 65 7 159 2 91 1
+4312695565: 158 8 716 615 95 59
+391: 1 326 64
+25202: 8 5 62 1 401
+5324514: 6 8 466 59 169
+658234: 3 83 592 97 57 4
+26804472776473: 7 61 1 447 29 496 71 9
+1503368: 653 23 18 824 625
+24803314445: 5 2 4 4 417 1 987 4 447
+1021069871: 7 3 2 7 9 37 2 2 8 5 58
+1614: 63 645 4 3 31 868
+4258805: 68 532 78 91 5
+4495130022: 583 78 275 37 77
+45111648: 47 98 45 855 998 46 6
+2964501691711: 9 672 76 9 754 7 4 65
+90685578359: 906 855 782 33 126
+13608006: 3 5 7 7 3 602 7 4 7 720 6
+4645623: 66 863 5 615 8
+2569495: 443 74 7 71 5
+134484: 68 55 4 77 9 2 327 4
+1143450000: 24 750 35 264 5 1
+5449: 4 2 907 7
+23061783: 854 9 5 6 1 1 7 3 2 76 5
+2930: 18 6 7 555 5
+2115475: 9 194 8 54 42 5 31
+19449: 6 1 9 4 4 769 8 1 79 905
+4595553: 298 3 4 257 5 3 345 45
+208314087: 7 3 877 815 9 9 3 2 6 51
+2905504: 46 58 514 626 763
+963368: 48 425 484 6 370
+9980664: 1 98 80 5 98 68
+652568: 7 197 871 290 68
+45827: 15 3 665 9 154
+722: 2 21 337 5 357
+27652464029930: 7 829 9 700 7 9 3 7 4 1 8
+6868809: 45 2 9 848 9
+1175: 7 5 98
+2133: 17 2 5 36 5
+528: 55 1 5 8 9 31
+8206806: 1 4 9 4 99 6 24 97 2 5 6 5
+37530658373: 1 2 8 5 8 4 5 7 3 946 373
+65484738025: 47 5 4 43 8 6 43 7 7 26 5
+2157: 8 2 1 93 8 568
+23082508: 7 5 3 3 2 5 8 477 2 3 1 1
+29090880: 45 28 37 8 78
+1262763: 1 1 27 729 93 16 2 75
+1409848204234: 7 87 622 84 820 42 34
+3304: 6 55 4
+1196013120: 8 340 179 35 192
+124278235: 4 4 69 225 78 235
+2735190615: 273 2 3 1 906 1 5
+52192: 104 89 6 45 10 72
+573777850: 680 31 807 8 50
+35694425: 82 38 921 61 871 84 2
+658877085778: 7 86 55 156 10 977 8
+20860682976: 546 3 7 930 7 954 42 6
+224616: 441 46 8 36 73 8 3 45 7
+358087: 7 236 9 45 2 9 3 9 6 4 2 5
+6354432: 55 792 7 153 639 7
+1923524: 177 175 9 3 3 528 21
+117340: 9 82 159
+1234059: 64 357 9 45 6
+2651349895: 8 526 4 7 9 1 6 42 9 89 5
+3884759: 737 251 3 5 7
+633925731: 346 4 3 5 472 9 7 9 4 8 9
+43555: 37 4 60 25 53 77
+4230519: 2 2 12 8 9 9 91 41 2 5 2 3
+5489: 69 8 9 515 6
+82630872: 33 1 2 19 81 9 4 5 6 6 33
+203340489: 181 55 1 4 112 9
+72068: 7 197 4 5 9
+168389664: 1 683 84 5 667
+30367442: 2 657 6 4 384 5 673 49
+2846739576: 4 8 743 9 3 9 829 719 6
+78401: 77 4 9 93 5
+627886555182: 1 61 78 8 65 4 57 94 82
+53361: 85 3 592 1 63
+154268: 48 43 3 892 4 8 3 8 1
+525075263: 656 34 4 8 6 6
+248294606: 6 896 24 1 83 9 4 1 7 75
+9082152: 182 66 9 8 6 7 7 2 195 2
+1657909631: 8 5 76 7 5 95 2 9 22 544
+484430: 2 5 64 7 49 961 83 3
+11192683920: 6 26 7 8 5 8 6 3 8 372 1 1
+52887178: 4 863 61 118 60
+896861: 88 9 7 671 4 187
+721710054179: 135 891 60 541 81
+12403134: 92 6 34 58 6 5 7 9 6 6
+33615296: 312 44 55 9 3 1 572
+183192: 35 8 5 5 612 28 71 3 4 8
+1244794661146: 6 4 9 6 1 6 4 57 7 685 8 6
+362827266: 86 643 395 8 738 813
+1477891785: 86 6 2 8 13 2 91 7 1 8 8
+5983: 3 888 5 291 2 57 6
+73739569: 668 6 687 89 6 69
+902757501: 855 24 627 1 63 26 9
+177442819: 6 9 401 2 4 52 256 4 3
+87403263: 95 920 3 191 7 65
+223398085: 57 3 1 8 11 50 45 8 9 85
+76471: 81 472 2 1 6
+102739: 1 284 1 8 9 1
+98723250300: 79 119 1 1 2 143 5 7 21
+37813543: 28 4 5 813 540
+21449386021: 185 4 9 9 3 6 4 46 7 1 3 8
+355140846: 39 4 6 90 845
+25511824797: 3 7 4 746 48 55 3 15
+11681963: 5 76 9 67 1 35 3 8 50 3 2
+10812636790: 3 778 3 954 790
+144: 90 14 40
+2954988: 6 3 3 16 4 95 2 1 7 3 9 3
+1666626: 282 573 74 39 1 46
+380854191760: 2 7 24 5 54 177 5 5 664
+20485976: 47 155 643 323 3 8
+562264400: 8 1 3 1 5 74 3 67 309 88
+5054: 67 3 55 599 604
+5790: 8 6 4 3 7 43 1 9 8 4 17 6
+1423: 232 6 23 2 6
+2214885600: 1 5 2 1 3 50 183 41 82 3
+586061: 507 69 31 975 3
+68594249: 2 9 373 9 50 340 3 32 6
+380980: 95 4 980
+7510: 5 4 825 4 71 9
+451918: 90 50 18 11 106
+16294: 29 134 8 65 4 1 455 3
+10536237: 6 6 3 9 1 1 4 724 4 5 1 97
+24566372: 1 34 8 3 90 592 85 87
+284990: 5 5 5 91 7 5 88 5
+1108832032: 80 93 29 3 727 88
+215422984: 63 82 417 8 70 1
+37636247: 3 875 3 39 615 6 73 5 2
+511718662: 3 505 3 718 23 42 9
+172674894: 6 76 9 6 7 5 6 6 7 7 22 2
+2494298: 21 8 468 606 6
+1164891: 12 97 891
+1303421387: 8 604 17 5 6 48 95 87
+113169: 242 889 55 7 6
+28083319654: 7 1 6 2 780 4 8 9 9 3 8 7
+689769: 2 479 72 6
+664006: 603 60 997 9
+383810: 312 123 4 7
+278838736: 254 851 15 86 76
+35266920: 4 8 65 481 94
+2342060: 5 55 2 43 99 710
+61499384: 760 4 83 423 2 4
+1337677: 769 562 5 67 3 9 13
+20708670: 1 7 8 1 9 9 6 70 6 1 3 57
+22607703347: 23 6 7 6 7 67 80 39 44
+422584: 1 6 185 2 95 23 1 878
+16961283369: 7 614 720 9 609 1 9
+7743900: 12 80 8 38 33 75 525
+5198: 5 14 5 5 3
+7706: 5 765 6
+60799047884: 9 6 5 331 7 2 2 6 3 3 5 87
+373279812855: 74 65 5 946 16 571 5
+273426612: 519 24 87 2 656 3 958
+449: 250 94 8 9 88
+69949442: 8 92 4 1 15 33 8 3 1 2 2
+2540247614: 578 3 346 73 29 5 5 9 2
+72710790952: 99 4 87 255 85 7 4
+43727113667: 3 1 333 66 106 71 2 4 7
+74125836117: 4 5 52 6 25 35 9 3 521
+527906: 54 9 9 931 29
+139782: 11 33 6 526 918
+19218: 704 402 9 522 284 8
+8668810: 40 8 6 3 6 2 84 2 2 75 7 3
+1487663526: 9 9 517 70 2 6 2 5 94 8 4
+20610: 1 152 3 2 45
+359112: 323 5 47 54 7 6 3 8 4 2 4
+3198: 1 7 8 8 24 7 1 4 41 7 27
+41189: 13 9 3 624 5
+4720776758223: 47 20 776 758 222
+195264: 4 2 339 36 2
+16012371600: 6 9 6 3 6 3 95 3 76 4 185
+3864074: 3 4 426 84 73
+45674415: 42 4 9 7 82 410 5
+1175718380: 6 340 5 911 746
+51156: 3 4 4 540 87
+4831584: 2 43 8 2 55 5 7 5 69 96
+874516400: 874 5 16 368 32
+220190: 7 974 32 38 1 7 4 172 4
+429894584: 1 9 5 7 5 98 94 9 6 9 58 4
+114640: 3 7 31 52 7 6 1 772 299
+10759: 23 1 6 12 7 2 1 4 81 28 7
+360390945715: 2 431 696 27 213 20 5
+3140056: 783 9 5 1 43 9 8 864
+15606936: 96 6 40 639 172
+1134226: 9 824 46 152 2
+640: 5 32 2 2
+46339061240: 7 20 9 987 5 715 618
+35646030: 42 1 885 137 7
+271367519: 7 45 964 127 96 893
+495104: 1 960 8 56 64
+3480: 7 1 12 3 1 40
+2608290: 91 95 46 3 3 30
+55890251: 1 65 7 9 4 81 454 3 582
+541872: 774 7 46 2 27
+309960637: 8 43 4 90 640
+14270: 44 8 875 1 9 6 1 8 3 5 5
+2461824: 1 4 1 9 7 12 61 71 1 4 1 8
+53575: 6 73 9 7 118 3
+3128658: 93 9 2 2 20 8 94 331 7
+223592: 5 43 381 5 9 4 5 884 8
+12112807054: 870 119 7 61 15 274 4
+27775914: 6 1 781 1 9 18 4 3 5 889
+279477744: 33 3 9 411 87 763
+9896932013: 647 3 331 353 343 46
+8127207475: 8 1 2 720 3 4 29 9 4 91 3
+3683665: 981 751 5 5 8
+7203976: 3 51 7 5 629 3 5 9 9 8 5 4
+12182439609: 5 57 9 9 9 7 9 8 4 320 3 3
+6547981: 9 727 2 47 84
+269451007: 9 262 62 4 992
+1760418: 99 34 1 5 99 96 4 27 6
+4881246: 5 3 46 2 4 67 57 8
+104401: 68 69 8 72 1
+57612060: 6 270 53 61 11
+65336211: 92 71 912 169 540 1
+1056886344323: 8 990 3 9 1 6 18 695 64
+431112: 3 19 108 92 69
+1497953467: 1 640 5 8 6 9 38 65
+20122455: 24 76 903 9
+112719469: 32 80 7 13 6 456 4 6
+1178483161: 18 8 6 29 75 754 4 3 4
+119908723232: 48 39 7 5 3 73 8 64 30
+21106565: 350 1 37 4 966 2 1 7 2 2
+70193: 4 53 9 2 7 701 59 746 4
+3034: 21 45 68 816 3
+3005: 2 89 24 92 7 58
+81430304: 124 4 989 2 83
+22260548: 7 15 212 54 7
+494808: 87 6 665 6 8
+6723: 4 81 13 457 13
+463069864051: 995 8 4 91 7 465 10
+913887: 3 6 7 2 752 9 5 1 36 5 2 1
+824408862: 82 43 9 86 8 94 6 5
+3431928092169: 5 3 67 76 755 15 362 6
+502132176: 9 109 624 964 702
+83412526: 1 4 7 2 27 405 3 1 721 8
+407094: 27 7 60 433 7 5
+701412: 2 5 84 648 97 836 8
+25707842242: 311 3 2 3 711 8 8 2 2 42
+505119: 1 44 41 7 40
+295936440: 9 27 963 89 272 4 38
+59813: 595 97 657 457 984
+297534: 348 61 1 1 2 7 296 46
+143500: 618 32 8 31 19 1 82 7
+138312966147: 5 29 5 3 2 2 7 50 4 8 96 2
+311740: 5 76 5 37 1 1 597 3 20
+4908292: 9 785 31 59 5
+6141663: 204 7 25 3 5 1 7 2 9 6 2 2
+746258: 1 3 61 6 48 21 4 11 81 5
+310680: 6 7 59 782 9 45 8
+170615594: 447 3 7 74 35 7 7 6 6 6 2
+160656040: 75 78 105 603 7
+5577322182: 47 49 942 2 24 5 7 1 2 7
+48328: 3 7 4 7 9 149 9 456 7 3 7
+155259452737: 56 746 874 2 8 342
+35341: 5 76 93 1
+22236341: 3 381 88 641 5 1
+44989863673: 96 6 5 6 71 2 3 381 7 3 3
+606: 4 80 50 4 70
+12733: 65 9 2 86 5
+22463298: 24 88 3 5 80 1 4 89 8
+377019478: 6 748 5 1 3 4 1 9 7 2 3 8
+19642752: 696 5 7 544 51
+702511961: 887 792 1 7 961
+6024648: 8 86 75 47 168
+104509650: 5 1 482 62 72 597 7 70
+1135227: 2 218 25 27 45 5 5
+224: 2 4 6 2 86 100
+173902: 99 277 462 89 4 99
+823929: 9 9 8 5 929
+25781529: 60 9 8 4 7 65 9 2 4 213 9
+15984006: 38 6 5 9 727 7 6 4 96 1 5
+911: 7 6 1 868 1
+1319338035: 7 6 1 7 6 438 1 448 5 87
+281978: 561 4 9 5 5 56 1 4 1 9 5 3
+26739745316256: 3 772 8 21 75 45 5 75 5
+804636: 50 6 26 542 927
+4368: 9 87 1 8 42
+1339970241787: 2 6 8 17 4 82 9 29 4 95 2
+27896197888: 8 8 849 619 66 521
+1624907806241: 9 270 3 9 649 18 9 44 1
+804053256: 531 30 7 9 25 91 6
+19887: 394 48 682 27 264
+576579196: 34 7 5 75 6 8 1 5 5 5 91 9
+4075638918: 886 5 23 97 1 5 4 7 48
+1242184922: 7 4 5 7 88 9 393 4 925
+816: 5 2 5 6 45 6
+16640: 34 60 177
+55047199922: 5 674 9 97 58 8 985 7 1
+202: 1 57 3 8 1 4 28 2
+128584480: 34 6 835 650 94 8
+14447: 166 3 28 420 83
+302594: 5 6 2 511 83
+100153: 4 389 35 70 60 43 450
+2185551: 38 3 43 19 3
+6746: 4 6 583 93 784 39
+3486469538: 8 47 3 40 786 7 9 1 19
+2105210: 7 4 8 2 6 9 8 31 7 56 3 2
+47524069: 6 4 610 811 106 4 85 8
+24206: 25 599 13 2 19
+83444222: 309 3 9 96 1 8 38 21
+1157600: 383 930 42 92 800
+135424: 274 494 29 6 33
+41759168088: 63 4 91 3 77 2 33 9 94
+912: 6 1 9 58 1 838
+1483426560: 4 6 1 69 801 406 692 6
+1291767304: 41 475 889 4 88 65 8
+4740630: 941 32 56 2 87
+145255683: 6 928 2 270 96 3 3
+2804256: 2 563 36 41 6 91 8
+3662: 592 6 91 11 8
+2070609492: 9 460 7 1 66 352 9 8 5
+58896: 73 2 5 17 5 15 8
+161664199: 5 9 8 9 746 32 2 1 9 8
+28767133: 6 69 10 43 37 96
+321150750: 6 3 33 7 6 191 1 74 355
+32221373185: 931 4 3 78 56 33 8
+125188150: 1 84 8 299 7 6 3 623 38
+529: 1 2 63 54 350
+371329981: 53 730 8 78 760 4 57 1
+8636010413: 34 6 1 516 8 4 4 82 1 1 1
+16436: 8 8 36 7 70
+2610384: 6 74 93 329 8 42
+2511598: 21 497 80 7 10 12 5
+2051303: 68 6 53 523 6 91
+3583491: 58 3 3 8 852 79 4 5 5 46
+2567: 5 3 32 4 3
+37412197: 63 94 238 46 197
+660996: 61 61 7 43 18
+772595115: 1 7 2 25 4 2 314 72 5 8 6
+1125072: 6 82 64 2 3 7 444 2 3 48
+40030036: 9 68 7 66 646
+26483808: 5 6 9 862 16 33 96
+89503594: 2 91 80 112 72 61
+34849136: 7 14 6 1 9 857 68 88
+1052469452651: 5 94 9 5 5 5 9 870 8 8 3 8
+2333026: 2 9 1 8 36 9 5 5 75 1 7 9
+2142047: 55 2 6 1 60 3 9 40 6 5
+18329059: 1 7 398 2 523 11 1
+1515: 1 5 216 3 1 214
+636751072: 65 7 58 3 967 7 759 9 4
+65121: 3 648 21
+1203384: 855 2 9 12 7
+1231: 567 1 29 21 1 612
+5830477499: 416 2 925 357 7
+39904736: 2 2 987 58 51 2 1 8
+7192: 4 881 3 11 8
+984797352: 86 84 99 3 1 459
+4330380: 444 3 8 3 797 7 6 9 1 5 6
+174675: 8 41 206 75 824 530
+644000: 2 4 89 4 17 7 92 14 1 4
+275310: 6 11 31 58 888 4 2 9 2
+2980025: 29 72 7 96 4 61
+1100140: 3 8 9 91 3 9 466 5 6 8 3 9
+26416153: 5 3 64 9 4 764 7 7 5 4 6 7
+392307: 644 22 589 2 30
+1703108: 23 789 9 532 7 8
+84496967641: 9 8 7 71 696 158 605 9
+4926: 5 47 3 5 2 6 60
+1238: 7 20 5 8 75
+4166368: 4 8 393 74 22 7
+264286: 5 5 2 6 11 26 80 115 8 6
+5390070: 38 5 77 813 35 3 54 8 6
+7109213251: 798 2 5 88 89 50
+11479038526: 245 1 5 7 333 456 3 7 9
+35577532: 71 155 500 25 5
+516: 7 4 6 4 1 70 9 66 1 5 39 2
+12159: 9 6 1 225 9
+593081: 1 92 6 4 343 2 6 8 3 41
+52698: 89 592 7
+36739952992513: 9 4 779 4 627 92 4 8 3 7
+2006: 22 8 90 75 5 8
+83601: 68 30 8 5 1 56 3 1 3 7
+478266: 1 4 8 6 3 724 612 8 286
+297000: 49 50 820 9 90 6 88
+1229910807: 262 102 46 6 600 807
+185356128: 44 5 401 7 82 115 48
+246521: 787 6 4 6 307
+86285202: 25 96 42 856 402
+23586: 70 1 3 52 9 5
+18086584: 46 6 144 8 27 534 7
+33690: 4 69 4 56 89
+46311716: 12 3 41 18 619 6
+214023: 5 793 66 7 53 9
+6755: 270 2 799 12 5
+14223284: 9 9 7 5 7 8 2 111 1 45 4 8
+2291081: 3 2 632 725 81
+284789717303: 605 3 9 3 960 30 47 49
+17262: 105 4 3 1 3 9 3 240 2 7 1
+157051: 9 7 6 181 6 9 3 3 451 81
+1349805670: 59 4 874 26 71
+2361910101: 5 623 7 3 38 6 8 1 3 1 8 2
+45459840: 8 42 71 1 3 8 4 9 8 9 384
+644841302: 7 658 2 70 62 68 2
+196349: 69 6 192 81 2 4
+25233495: 14 6 1 3 34 83 14
+2502364627: 9 73 7 1 76 4 7 95 8 5 27
+891841251: 79 62 560 2 63 6 51
+526: 95 9 4 1 417
+46610701: 46 605 5 697 4
+101160: 5 5 6 5 9 4 873 8 4 3 3 63
+74700: 86 2 765 47 83
+487499: 9 52 6 6 85 502
+12930315: 4 77 3 9 48 9 1 5
+818480: 3 4 8 966 10 3 7 1 4 5 4 1
+8956575: 6 8 827 5 676 864 35
+6467920693: 5 8 5 48 652 1 8 8 1 3 8 5
+877: 71 10 689 32 75
+53325209060: 554 965 941 2 53
+23291024284082: 9 42 193 47 6 9 515 48
+929424926: 3 6 29 42 492 5
+17829266: 6 56 4 53 63
+12276: 2 5 55 3 66
+181712606: 595 74 75 412 6
+8831966: 2 56 30 2 2 39 65 2 9 8 7
+661454663997: 231 3 453 350 8 10 78
+237094: 3 3 311 50 646 12
+5707220457: 71 82 86 966 4 920 55
+152255376595: 76 17 40 820 65 163
+1347305: 9 4 8 65 664 3 4 3 701 9
+70155: 91 2 88 257 706 58 1
+60468016: 640 1 23 5 27 726 812
+408075824: 40 74 6 758 22
+149767280436: 1 221 860 788 436
+1581985302: 83 9 258 3 8 38 72 3 6
+157694208: 94 8 52 3 5 15 56 1 3 8
+3814512: 5 6 4 8 8 5 6 5 5 37 9
+4548610: 66 9 3 3 7 57 50 1 9
+21119484: 38 822 28 29 876
+5946398: 661 589 67 71 91 57
+151648362: 894 75 5 9 93 54 317
+10321152: 99 807 712 2 8
+114489: 6 5 4 8 31 84 37 9
+145909: 75 70 909
+106820010: 722 269 10 2 55
+1480075: 44 2 198 9 3 71 691 6 7
+28827: 19 1 5 7 6 9 78 1 8 849 3
+7566: 7 244 8 141 62 23 5 83
+5508361: 495 4 214 13 1
+4988516: 5 33 55 12 568 66 2 97
+184373: 1 9 7 9 5 1 1 33 9 11 20
+199283931852: 3 5 8 4 158 6 3 539 855
+1666857472580: 77 654 23 180 331
+14487733: 557 891 68 9 9 5 828
+1198391800: 231 965 8 84 2 93 1 4 2
+126143604: 86 2 6 463 88 55 5 3
+153392452209: 6 482 7 3 939 11 5 4 9 7
+12681: 5 7 2 9 4 7 44 2 5 65 4 9
+989: 1 9 99
+93840: 98 38 46 15
+217780: 419 3 516 23 5
+33264: 447 87 973 5 22
+7178025: 995 9 5 2 87 7 527 20 5
+9028: 3 83 7 5 3
+12935: 711 5 6 3 47
+3659499181: 365 925 6 229 9 5 181
+701521: 9 4 3 64 7 61 8 26 67 53
+340704429: 52 78 84 319 7 7 99
+62241150: 7 176 842 8 77 6
+112424: 5 1 8 936 82 8 183 92
+723672: 347 67 1 2 874
+3066: 51 5 8 8 8 898
+1274880: 23 52 542 9 87
+2517506958: 37 68 780 726 9 59
+110283391: 3 52 3 53 8 3 8 6 3 903 1
+4536: 83 5 81 9 747 2
+87466: 19 46 6 3
+605783111392: 404 91 601 37 741 4
+58853775: 4 485 79 4 384 399
+47889063: 516 64 89 984 999 29
+23241016: 7 3 5 5 6 1 3 819 27 9 9 1
+27260572330: 9 9 7 9 28 57 2 3 8 2 5 5
+233756964: 61 958 6 5 1 5 26 8 314
+781268: 376 6 743 4 692 1
+69945120: 7 4 539 5 113 5 6 4 7 73
+267715242: 92 8 663 9 4 3 632 3 1 2
+1896465174: 976 920 1 4 651 72
+2800123: 203 8 17 9 384 23
+206464: 3 7 3 186 1
+127766017: 74 12 9 35 714 1 24 1
+24: 7 5 1 9 3
+10510918116: 59 46 109 181 15
+3621981: 2 248 954 2 1 3 9 78
+7258534: 70 96 523 840 898
+12932425: 928 6 43 57 8 54 1 3 9 7
+40426441: 6 8 7 7 3 8 1 2 1 18 509 9
+258400: 70 120 34 40
+895: 81 303 38 2 51
+80809920: 932 69 727 47 995
+21779938: 9 411 92 64 226
+1613: 4 401 4 7
+43158803498: 36 222 9 7 26 39 6 9 9 1
+4366703135: 57 7 93 7 2 70 982 8 6
+167694750: 9 89 350 76 598
+1913663802: 64 299 63 6 2 10 2
+1444191: 556 9 11 4 6 5 1 41 83 7
+1003880435: 19 82 746 977 863
+4155: 72 810 13 4 575
+96614034: 15 6 361 72 6 2 3 6 59
+1688: 5 9 1 5 3 8 8
+41338714328: 41 338 639 75 328
+9197318140: 2 59 6 1 690 8 1 5 227 4
+46479360: 61 7 4 2 9 7 39 272 6 5 8
+404048233: 951 7 8 576 2 4 235
+11494468882: 3 187 5 9 1 3 24 2 6 7 5 7
+1922: 6 233 457 6 61
+6955: 9 7 8 4 5 7 4 2 4 5 202 5
+31285182: 23 136 506 7 63 52
+8117862: 437 1 6 921 2 381 46 6
+47589: 9 94 374 39 7
+2256037: 60 376 39
+2527024499: 4 3 1 7 8 10 3 1 6 51 91
+37690: 3 720 52 6 1 88 1
+4175256007: 4 8 5 39 20 2 34 2 23
+380247474471: 2 4 2 45 497 88 5 7 2 7 1
+21474: 9 9 9 1 17 4 784 8 4 39 9
+3277745: 18 2 5 4 414 89 271
+20611117618: 3 3 2 4 8 1 4 9 39 76 19
+6706090709: 799 2 3 1 8 9 8 4 7 872
+5792: 618 29 68 8 3 69
+410827821: 4 927 73 453 16 409
+233173828: 3 74 634 6 896 3 4 7 5 6
+187959: 119 32 2 556 23
+486043544: 3 230 57 52 54 74 62 7
+2347696: 4 1 35 40 19 769 8
+4278588041013: 44 7 29 4 7 456 7 4 684
+5637600: 58 9 54 25 8
+4977330: 9 7 6 79 3 9 8 838 3 4 7 6
+22497: 82 79 983 1 1 3 9 102
+35382699154: 77 617 2 14 2 46 554
+16502056: 8 6 58 319 488 5 819
+756793: 88 3 3 944 192 3 1 72
+4214: 6 697 1 5 27
+12450094: 2 2 2 6 3 629 9 857 5 9 4
+1618088: 76 4 6 1 7 7 62 90 5 1 8
+1060491: 3 361 14 906 66 1
+266689086: 3 2 17 83 5 6 8 42 6 5 3 3
+68560832: 3 1 82 6 8 5 3 308 2 1 2
+1326: 423 846 4 1 8 44
+68085: 674 6 78 7
+1840707: 85 9 62 6 804 4 3
+13403416: 2 1 3 5 4 65 7 8 7 3 933
+2093: 56 6 868 26 614 9 8
+12213922: 73 703 14 1 17
+224283: 640 7 4 5 8 4
+97770: 1 214 7 27 1 8 378
+25990: 6 5 5 87 2 7 767 6 92 4
+299184551: 325 2 92 544 7
+63062194: 70 9 605 7 46 123 825
+68322843482: 28 244 28 434 82
+37380255: 80 1 935 87 493 4 5
+305472677: 509 6 7 267 7
+46: 1 45 2
+2250: 29 1 75 6 69
+191773: 19 176 5 8
+91083792: 4 7 236 878 7 5 6 4 3 1 1
+335524376: 8 53 51 68 668 158
+29640281671: 7 8 4 6 3 5 7 44 7 8 8 90
+497340: 9 3 762 7 3 6 3 5 6
+279527: 402 67 149 4 1 3
+279694: 1 935 96 765 97
+224785469: 2 1 9 5 68 10 2 3 9 3 7 23
+10732502: 15 5 477 5 60
+7497250: 8 936 1 9 249
+56971: 4 76 9 79 91
+41393070: 2 53 5 781 70
+12168228431496: 64 3 8 2 161 9 7 831 3
+117142318737: 3 6 6 9 2 60 436 3 9 6 9 3
+158260: 9 45 5 4 78
+2363212870: 2 363 212 4 52 420
+447325: 463 2 795 355 25
+4751: 11 48 9
+841: 81 9 97 2 13
+3346211520: 3 9 858 11 522
+697352492: 67 1 4 4 18 3 455 69 9 5
+7319280640: 61 45 7 709 7 656 80
+27260: 7 9 344 79 5
+10737320581: 7 8 5 5 55 7 8 6 294 70
+17943: 9 839 921 18 6 9 4
+35412: 6 724 1 9 8 580
+6453: 161 1 475 81 9
+840798: 975 287 52 3 647 517
+17854: 3 32 69 42 7 655
+1735468803: 3 86 8 5 9 91 68 3 26 80
+1955340326: 54 8 292 2 54 5 327
+7614444: 86 7 718 824 7 88 7 19
+108369902185: 3 9 115 814 7 9 5 7 1 8 6
+139223: 8 3 53 2 77 38 6 3 2 7 4
+2142640: 49 43 35 566 72
+266228026: 3 80 51 8 597 5 62 24
+68870224: 6 62 870 22 4
+393281: 5 4 109 9 32 77 2 22 9
+22257035: 29 25 685 5 6 3 597 3 5
+1480: 679 67 130 537 9 58
+11720991: 1 8 23 7 364 5 5 5 59 7
+156699: 663 9 301 5 5
+1292069: 17 760 21 42 6
+83229203: 100 1 4 7 1 808 321 9 2
+15899250: 986 375 43
+80808: 40 4 521 212 104
+10465625002: 9 77 71 47 50 1 425 2
+819408192: 31 68 991 7 3 87
+667: 8 8 2 7
+26860: 200 45 23 56 4
+49480468: 43 29 90 127
+5186813940000: 504 967 5 825 5 86 2 3
+19174057: 6 7 652 7 51 7
+72691616664: 991 7 733 662 6 38
+18573243: 343 360 489 9 900 6
+3883810560: 6 88 2 8 4 438 8 980 6
+19738: 5 2 508 38 54
+703764: 13 8 48 495 20 77 23 6
+273920: 7 629 987 89 8 20
+911: 7 5 9 4 592
+33029: 50 644 822 7
+524702: 7 153 24 79 7 3 95 17
+109342: 84 130 3 3 2 2 80
+35742400: 8 1 706 7 51 174 6 6 9 7
+1483641: 2 64 70 737 153
+7397: 364 5 8 4 85
+10622451329: 5 80 3 7 1 4 7 879 3 1 2
+1513454743: 69 31 8 732 963 91
+87816030: 47 1 7 80 3 8 1 6 417 1
+2957777379: 30 265 7 777 379
+279602: 759 1 23 4 4 274 9 7
+2793723: 2 10 66 1 6 24 2 723
+13426560: 36 37 180 8 7
+72281484: 8 25 758 6 17 9 36
+15157818475: 26 124 1 5 7 818 475
+1726473: 857 5 41 9 819 2
+69102877793: 9 997 2 91 7 17 711 7 5
+1182849: 2 249 31 38 4 129 8
+81125766: 7 2 670 17 308 3 789
+20198: 8 6 3 396 2
+130416799: 10 27 483 6 7 9 6 4
+29969: 7 62 38 7 91 5 4 907
+4071: 3 10 4 7 23
+3447616557: 858 111 362 9 54
+31720: 38 59 43 63 4 2
+10386966: 1 3 8 612 2 96 5 7 8 4 6 3
+2515969: 2 768 9 906 8
+2085272: 18 65 114 297 25
+245966149: 96 3 146 5 6 4 2 2 3 731
+936628: 57 38 19 887 90 88
+434515299: 905 64 9 8 56 99
+7751781085279: 8 7 900 819 9 389 11
+6523: 4 61 26 151 28
+507242778: 6 822 69 44 4 459 1 6 7
+4557: 2 48 3 9 169 3
+6172533: 37 9 207 43 7 9 7 7 12 9
+4528512: 7 27 871 689 5 6 63
+35178: 1 682 81 46 80
+40198: 67 4 25 6
+12418780: 54 7 6 8 351 6 164 11
+37440: 24 9 8 12 870 247 32
+7303307255: 35 695 324 6 64 8 52
+42929: 9 124 38 5 516
+101311: 2 99 31 1 3
+3786723: 1 685 92 6 3 3
+757762: 76 997 1 3 38
+728: 567 6 23 42 90
+19126995: 593 1 70 65 59 58 458
+83647: 8 828 47
+1250549: 24 939 1 71 50
+9778: 9 173 39 15 5 3 39 262
+18714: 89 265 5 13 4 43 1 3
+10446534727248: 61 465 74 62 990 8 6
+4136: 12 289 668
+986: 919 65 2
+382284584: 655 1 7 1 144 578 7 1
+2087668: 521 7 75 94 48 4
+13551: 62 69 8 36 9
+54736659: 504 52 8 38 17 261
+46609728: 5 9 6 5 78 8 818 9 3 1 5 6
+8001: 55 7 6 9 7 3
+2164: 20 62 3 7 8 8 76
+34288954: 174 227 512 141 854
+149143039: 568 157 839 4 4 8 745
+858002: 715 600 1 2 2
+355275: 3 550 5 22 6
+1161901609: 9 3 7 1 9 5 8 2 99 9 492 4
+14265505: 7 4 77 237 684
+93906: 1 23 457 4 78
+280258704: 396 16 217 528 81
+2447: 237 9 217 9 88
+21103892: 688 2 139 4 3 64 55 7
+572320: 571 889 7 8 7
+22940: 74 1 31 10
+453933144: 884 1 7 2 8 75 164 94 9
+9387402762: 447 7 134 3 70 3 57 2
+628: 2 96 5 6 10
+58729373: 53 4 53 29 373
+16162243: 2 3 90 75 92 139 927
+1806271: 4 319 283 5 13 718
+1908: 72 26 16 8 9
+87108518916: 8 349 61 129 729 4
+1120226562: 81 8 1 54 7 89 8 5 2 32
+5619463232: 7 860 2 3 9 3 24 29
+28275666: 4 35 65 440 227
+57418552: 8 96 4 18 9 6 4 142
+337848089754: 893 778 54 82 7 9 5
+101244761: 2 8 4 1 222 8 1 631 6 4 5
+31091: 2 94 6 323 9 4 4 53 8 3
+9551142: 2 7 4 4 92 9 87 2 54
+431798: 2 827 32 904 554 96
+368064: 62 5 31 10 568 6
+641856: 80 23 1 2 8
+356332: 848 13 8 38 853 4
+1530148: 107 13 11 13 33
+10595: 4 93 3 71 524
+13825: 37 88 128 73 4
+485809: 9 597 19 6 996 5
+6598799: 541 2 674 617 6 5 3 1 1
+15595884486: 6 36 560 69 8 961
+655845: 5 5 2 512 8 298 7 115
+167578404: 716 3 162 9 916 19
+539849: 3 7 1 594 25
+3430232: 9 15 29 9 2 700 7 56 4 8
+4196: 951 77 9 8 4 4
+24625387: 9 6 8 6 9 37 846 38 3 8 8
+4318272002: 10 7 2 3 80 6 5 2 7 306 2
+49392736: 80 63 4 72 34 2 944 2
+97244751876: 3 45 6 3 7 293 8 5 9 2 3 1
+2827209446: 384 6 35 4 9 6 7 3 441 5
+773376516: 7 73 37 651 5
+466781: 21 76 5 364 782
+314242938: 77 30 223 22 610 218
+654638167: 14 95 6 631 7 169
+11952: 76 23 69 7 50 439 18
+7579925: 860 37 435 47 5
+1618: 80 4 7 711 59
+33287: 1 822 40 354 48 2 3
+126232779: 6 3 841 9 5 4 77 8 34 9 3
+155627: 1 6 99 989 54 95 13 99
+713339897: 9 7 5 8 9 30 430
+131670050047: 231 19 75 12 5 1 4 8
+7727322: 2 795 9 753 513
+349733: 615 8 637 271 4 6 28
+2481710424: 1 58 9 49 1 3 96 5 9 3 8 3
+261963659: 9 7 4 7 2 308 655 650 9
+51571974: 7 5 579 7 848 1 1 3
+20290: 3 85 3 467 36 1 1 6 196
+2626: 2 6 96 545 2
+22878: 2 2 80 275 4 21 3 9
+575535: 54 4 14 18 10 8 73 6 3
+477517: 43 3 4 5 8 46 7 50
+1384703: 4 401 6 7 738 51
+891003337: 86 6 12 4 825 3 3 39
+90028742465: 608 3 1 37 4 3 4 2 4 6 2 1
+231588050: 35 3 1 586 1 2 8 1 3 65 5
+1072: 7 9 995 9 5
+11381395: 73 4 974 2 36 2 435 7
+3841: 847 4 87 358 8
+88734868: 3 6 9 8 9 2 7 5 4 838 725
+280240227: 2 981 23 1 48 94
+343965: 6 35 67 885 23
+14417393: 9 4 7 2 63 6 38 35 90
+227912: 8 183 31 19 3 72 9 8 1
+2511501082: 1 946 88 2 430 3 7 6 2 4
+9770975: 2 207 7 58 9 4 36 33 5
+181098129983: 36 3 6 1 3 399 7 9 8 1 8 6
+5511886: 749 92 63 2 9 4 104 94
+11912: 3 167 581 43 15
+54194003: 24 5 7 50 632
+40135618285: 5 5 5 4 8 7 7 38 182 8 3 5
+8817032: 460 2 2 6 4 4 7 2 57 728
+236071: 566 414 610 196 941
+1699: 874 26 799
+9082: 59 85 7 9 10
+14399715: 7 6 5 84 32 1 9 9 8 756 7
+957922: 5 76 282 265 853
+519850: 854 1 1 608 8
+494598: 8 8 8 9 1 2 4 1 3 4 17 78
+717301: 769 92 138 844 1
+79732051: 8 1 7 80 45 5 221 629 8
+193315: 5 329 577 536 60
+443120: 71 7 62 5 764 4
+799531202: 320 693 332 72 50 2
+25055194: 241 48 900 7 194
+148742749564: 341 93 73 435 240 65
+2975722: 802 811 6 919 2
+69614316: 3 9 65 34 9 9 6 3 1 96 59
+9211672: 92 116 51 20
+1384: 5 687 2
+2227754259: 312 1 75 78 952
+1980: 6 46 5 70 6
+1051: 74 41 921 7 8
+7224: 69 9 6 405 7
+100058717: 58 44 628 7 145 31 9 8
+13325842: 86 4 981 7 534 49 5 9
+135606016: 86 1 1 7 2 4 8 877 96 8
+188416: 4 8 735 32 8
+13081748: 306 58 2 737
+3408461: 654 396 4 34 348 94 9
+19518: 2 1 8 9 1 54 9 25 9 616 2
+31719: 65 6 9 78 597
+246572: 26 98 9 4 393 9 81 2 8
+127805458: 40 71 9 1 5 457
+7811: 198 16 5 7 31 1 4 794 6
+1168319105: 5 2 1 2 4 44 8 93 9 12 8 8
+7211685: 411 5 7 562 8 554 93 5
+4028985022: 77 86 48 505 604
+127755655140: 73 70 5 3 8 31 5 140
+208269903: 3 75 267 990 3
+956027222: 455 20 5 10 4 3 5 7
+332644: 63 1 8 660 4
+739903: 8 744 1 67 3 630 9 1 5
+449841: 8 6 3 1 9 9 4 9 608 73 88
+3162: 88 4 6 9 7 3 53 7 9 17
+123780: 961 528 514 51 9 60
+397: 88 299 1 1 9
+20327221321: 10 40 83 98 1 460 7 6
+22759444: 366 7 6 3 241 6
+1397068088398: 419 2 5 161 5 6 4 414 1
+5172: 6 431 2
+7637: 251 9 85 746 7
+1812: 908 35 789 3 77
+1120: 7 9 1 68 9 2 4
+770138283: 11 6 57 1 3 8 947 9 1 3 3
+163644: 610 32 344 63 156
+6168: 137 5 9
+507: 41 9 2 76 60
+593693: 77 77 16 765 9
+1214074355: 9 4 5 3 9 73 5 7 8 4 855 8
+607244471: 6 3 7 3 1 83 2 510 2 4 6 8
+275: 26 2 9 2 2
+250040507: 24 9 455 585 504
+5137920095731: 44 7 438 78 3 23 573 2
+282926819: 6 4 827 26 812 42 3 32
+80952: 37 2 6 948 2
+8890436: 635 2 7 43 8
+10600: 2 1 8 8 6 6 8 3 91 541 6 5
+23840: 5 86 1 9 4 1 7 511 57 5
+283368: 3 8 8 322 8
+1123947090: 49 3 877 8 1 323 9 342
+25775616: 8 8 6 97 692
+243687944: 650 5 815 32 92
+2855764: 2 1 912 730 1
+2736185924: 835 66 2 53 8 3 31 3 2 2
diff --git a/AdventOfCode.Tests/Data/2024_Input_Day_8.tst.data b/AdventOfCode.Tests/Data/2024_Input_Day_8.tst.data
new file mode 100644
index 0000000..1e7f2b1
--- /dev/null
+++ b/AdventOfCode.Tests/Data/2024_Input_Day_8.tst.data
@@ -0,0 +1,50 @@
+.........................p........................
+......................h....C............M.........
+..............................p....U..............
+..5..................p............................
+..6z...........................................C..
+...............c...........zV.....................
+...5.....c........................................
+.Z.............h........S...z....9................
+.O............................9...z........M..C...
+..O....5..............................F..M..C.....
+..Z.........5.c...............M....V..............
+........ZO................q.......................
+s...O................h..Uq.....7V...........4.....
+.q.g..............c.............p.......4.........
+............hZ.............................4G.....
+6s...........................U.Q.....3............
+.......6.................9.......Q.............3..
+....s..D.........................6................
+.............................................FL...
+..................................................
+..g...D.........q.....f.......Q...F....L......7...
+...............2.........f.............V.L...4....
+...................2.s...................f3......G
+....g...........................v......7P.........
+..2..g.............d.....v...........P.......1....
+..............u.........f.............L........G..
+.........l.D....u...............d........o..P.....
+..................8...............9..1......o...7.
+............l.....................................
+...................l...S...........F.......o..U...
+.......................u...S......................
+..........l....u...............m...........P....G.
+......................................1.8.......o.
+..................................................
+..................v.......S................0......
+.............v........d.....1.....................
+..................................................
+..........D....................................0..
+...................m.............H..........0.....
+...................................d......0.......
+..................................................
+....Q.............................................
+................................H.................
+........................H....................8....
+..................................................
+..................................................
+.........................................8........
+.......................H3.........................
+............................m.....................
+................................m.................
diff --git a/AdventOfCode.Tests/Data/2024_Input_Day_9.tst.data b/AdventOfCode.Tests/Data/2024_Input_Day_9.tst.data
new file mode 100644
index 0000000..6340581
--- /dev/null
+++ b/AdventOfCode.Tests/Data/2024_Input_Day_9.tst.data
@@ -0,0 +1 @@
+1567695880152629268190373935669834441122671164843435594685946137627357126992283375559839157113543530837781319468827960988554885696657851949953694013735690136546564590543324339165657131135848759180857910695696794024746086944091842992435077111272177045608647487870389810156269564478281782746683234358619191467074125025634536412575186842522519144218583987837276807945569973705265225640162514281710658861563191265641937069322652721852488172492082478591548826669212696148622380411143559067681619945837154481535223329242254269292162897363185232101447557276823335318377106960677073128910388064829684559151545828269720244827964284853979732858274183198757286526887065427445535346102242214018913495285895792733497062779373646513478816371584779496951116998760422134488790326625909072902419106771414296366633568871447412579192513822296612397044478132673036608092781844101950935927373844479484764349673771237643161867121747989082642570249422345381114465343484303217723359266841223356548877415757165440795558854772893855439472757118262837832127777592507388173370918638801368833115852818267595191034432478589486177273482474129795588137931153386727879879425222402211928644988486632067709744851363953077678980838818647539614484279112974373107923631558733898924620591613617657969080112893367682322330295596566214443428993865321959318825794720422492226250634137894049613627575129413554945392137958646166179549136843553743156516207475542923833287845424643685448177351651856826107695987587988962613396813478746446838972697742858147924323544324615987601330399937647950367952513289357222527354898569724815706187912642162057805463559671619143527568361516417275655999292146542496644996543731304463412223791081445784155575468749585650868536965596362045496075654328772696149179149453891999827074505919925584454788576797867553276980228056335088248399667998567036347212767888478670421390579973946898546486392043225254739283381471899612539231139870929887608026119988765023283720134910855883104266585125445465121171152078927772864445195490501987563572218598518271981425621314457064958714846286916329763859596732259351793246209714737648618756965962693475655545961771161335408265321471369764386848364270793215825073139536509042602125579794811378463824782610433366773036759576821775109649912511383327195948814071583867759131913626447221455786547488513012442782588249349939361382397231401675627681937828186226281552544595547865541851341090604097608247547763662592429660746856365087502414339972579114934667953533678260923418845324502031548131949138135451508754222431126559231577976413891866837069956456144585101289762044352188675878851437356675492797646026495699283239165267205684167394499217256345964084633920585242859642322016401211132312871656241189946049824346406750575187627063427482566983115111513861596677264264992446797264119824982177651984881038999753295657611246148346876169396448149048507236388055779852622636101561635340203288915832647128752662561276193377912186558646139230888067326635806583935827872719701290999135942374838481976992737944104982627140587293133391901732259073471810817538894842908266963147941022691062486988162457787527413581451444736031543259317385391985115123442244338151939850102829471799696386947558355916806231378468411981366971574421958318101514783319317489694235669112619836894021274362819452149881801364742715462615111925536820844653806632228240486771975829797841874838668048253065634849589799736218817249322922241324297513679268711010273340449065603995179667626166209762428891385092358898319328944530595311788582699719305762429619365864612590653742671129286675283086293928805631865477561667149124674177262828419668175916667290874378781069744434403550186432811139372844133570583151746492218554447836665858864923366173205236371254673318246896892532348029123098264789391921319195841363463955529819179870633347785029109562943989846994231244787440712791164289204980287836861458368224442930537545954150922425353280822122641154341396596270566438917993824612994723205926148971534733809166503429347191189125997887387592742567673439925532661631601991225465288467926644224867421565943515626555421883581159254412182691311839834482184940782753965868374544446917128627168365894564308991128188159680476259149597641074127072443767718824101031327310888594608344392087819537507954394748828658284973381667178017162225656834709987138331785311556122711419433565971040684630534322839298308573265587417018366729161241138869631432523844128447946555501493595711969963527143754378203050397845857963174890934589108777838880826312614182459275568898613349921267837992427471938270616814294663754337831427144522986954897286298380516994105475349072558932381171917181126029336182847884294738814243359199999057242575343672508941978952726210883378125835892738233574212086567483533374555918819428699958301756862729521775338886988742708570582730555991364241658824733687196887461852925658701781472271848537585888176313742511114411804981417997795894535428999422852099329355359712315261565345819736956757119167872134176724597453555895728557389292729585317599937723655245576930145518179832546563632917928563454249707442197881541780519091787116323825272937639574531861967799632715797597333657681929975328772465967243771478434523279749153571577421171246296128679667743913562082911244492979591487978279711744896254678563112640532827829446713432504727856353455418657027338925412158437813954027501577186810194824309069773556454962335017835359691363272547334498596897944718533982925370879140129929828472512235774850341186535375555694119816739184524255955217992057122746386333361229311341587368848845928982714169191064625165145692736864201747158469252999772691141577942924109463972484807325108167652438744185697933154714167522698126125865799745631698696288347875855499822294332249975744544569332679648178119562152145784849835488924159722651687464584354351666863384385856353619935087373959332397547823791456875317209043591340799788213360745719887376433933771246572667444891111852618083636536412015567465409736247938839589355489866747929562482426684354745133273118799630304139838672211849933833659729843723125818653341498128837313832938539487534788612958827030912859556369852211237549906935167069173814896184114476436760149152435013952679233121554654439662754939549173283970706495795482746741287631764173706758436393798522734063566391288447791392508979823557922735548833998357784694541921326765243933875414647475368921104022355688403086322630854185427775954466742533238446292188543450904770525110561689312134982252554882605528747967225530147191494433639433976047494737853726688357343776789478279465456354543665255684944042757117409245101885586953523899581741892790823968601036805823427529284946394930754480114026171721937691342731659714905718615295295388813414115610613164661570175986681336627294901163673046292862741477869174721269429354644176848560938642619016636968967729431516295810476641491955585675897693444499486645602545103370724418396061618428659863582640386488559365653358868924437198714236511270994173846223938716865212135310722289421138496819504862305824738625938798715484929935371615176425186769243965892247524919433195496830292425765081492043274626311861401967591068821962945581672498961698786561827213694047696987203091736825768518377782394798844935579816467215144873342439748826834387626074577561484317821118876091668415308677752995598518375230745658975545152095614190972650459359818834555659588211256678794725465427207527256496899291913459644012729648794038792015166775797550749020576999163156701031496630391320631220234073836484488835747149101137572357125775771793328440238366483589567314698386515386902638434024838711516773126910723640764242331940673762434287792998328040112619206812862499357429626253242863465075902964535968664986884086526551637967143810475156553358288850643111198573547195258085707529599231671185182420652552874921761170983888375670372517177761942675876624804138102747341247154590904260221740936654298096469126538412367341144732381654877435292216998899299142682315826148265596461132345220408069452756671649142444174112734540555538486814634088613197988145597866391567454610495930704962486887346637318421269242376123409316242119985130361331688076979921558197819922464712472760957890449476738299228326873139156655449287524736889319759268629617918985445463674569671466823967554557849980701884952379839435423121873455982316845999352934246613777451933893183222709334103275966858164742851838336934352236365790325535254490415886427953926342481929539781852574196397892159794833849436714423992590444821919585263424512080672845862657305958156330939030529379452245865753428980198177758361558038236729457294782879495141971036372621111558174912318762315359641530201141403586316273259310938376556889439324696015799628108080859344152866537836152910979464682575852392311867693268689462686638202677357653567714964476809981979860132567607165972625279256651028842226787893699740195877836368698571909198852273761582657473754863522253374034869335584625433614182833148798656511324137104660677789759025706172268181528617454353742991174354353274695616901844371286945468935324972443755832172697946654769511464342142521697239553173153598718563811416145792423358234945363773154496421615963775584284695720208959319219658892351978118491192579398838666289266089662243208355955824817830654938569911141638981849997538371117979220187351578228991126635094117199991946955182512610641790336151188417255756579956104340224446974917551580915115868814758721379271889130322061664068156616572514621840524789128930205610384455412536955965326637271033755832215220617485531478178516702886754457817240796374961751957513883375259699286945176374146121635561878841617432637937745737243996712366528369491865821928444156982949517799948529586085726382643244464617123912579435874162281865757547949974739261223452961088402711978929823137331732904149156233718458395767498275256376899374244561829230339067486772376068775549865956335969762221213487876093549881913338605395199185931714321624242777261647455618222276634823188473432970351770302692833815645870359392146616611499835449727349714865617964529188299614543726544870145389843443829032297569936481373096229060621546633159284881172817588378756495434812204080342081385014693119116649901820609024332485218720927474743321787486568628716141949611767414168887843652785226114633106315156036466060821667759136562612684741598892715878765995713986397165585847131922379753453779601154547458794886273623602469165910206621771821443241936542741145993671521464966142801187682036326878153264181213409174352462803561544595711243195497929654724043741223969481837682603083388414751855731827144519139177967711248272291376121926508037435451848741965916763966703945575751366426624395903258543142331957841162514299313524508060136447817017617377661330272526235692197518718746554090451379903060668060796334774463347436676010983318683144837796192119328124812840902431625158442666582449788486453332384663193562668079718840124016507145847646509199602043509495378631205950951019846134277041268862802477795521196862766547326682311564473131976682876983318880477655983613767590812787305230661167918857729494668361749177758186745160165767843360845918103294113223392179275551585671226638235214944764949235437967129456917497259134275488652322381965975863556958215363703715259367978622636737206321671728446485673467465993434128645882491466203760535334663835553294865541571822836163714523428963239183501160785710184575711499925822645740828841875368666257954517856456562385596626905110699137365861589516466350616220772236428245708161959332408283441157284057726267798691481074916262598867616167547575932361844811856118254841926324181531658526568646683664408070616026507116807494273593934572814282403439328211101497252440204171345164896559277574212010646163822777499370587447602910886188668923408116517955978178135590706118173071803564233718487529356836718711933820518811556731894197701348661357622365641953128632185190961798239611218134768191135070947030275712565950156170996257779452564448953284992467136118812116364869644763577027551923315061476994353963871982841564126137347979931353428454432045822896122467593160235194534587112615315287925870681010491091483993215544776695807486101448263390776529286393111574734836918226845117281660377623636324331689743524142567808271661060709439468643344050475547264937706756996219772418574053152890825798376846274381151084613886351226769784664964998946595277224631557763142425898775284436389779417444465050652748172995291152193420198732909828909257485465826452269392293075325782412468391384678167421013602387238962591694193786544248613026593667596713362071433656872213729051197433483844352780229326264964796710167075168096969475253667759314201432461973931997691637643875395462532621333653935527192363766843223561878144456434431680779175809318648634755967175839136230222872348457598343412847773193147718184780741446922316104286705492166020428515227518968053981730247984657676993550938759988546172071372681255310424961135822552592609196818785303847715922336550435111947235943013268110531077972891711472815684531491669391833826517555451796836515247374634240231367279195231689987448492972315546745978524132619640246957201053972440667384979031241454419952282132548471271510358125958955235554948320472757621715299632271412405011496179318534495530491643568465746469641726136872375251165368775044614196745240847161541681415917191428635579997649188056189798313926478212568618147346433829613399893647441010928896126390734553129938398013971178346060724333926367582386977368263450999837627825127777662515745633958633855148851531378980567788226943874760527959471870196297704636471874887863955582644342976988511880933165384727213137109241284278807831108238916258859038908775191614336554526446875014252016776697953819942069687919259053963861775989988674794438126497502581717934293045162896572912438011993358108427676459836949568681477850884730755510156034773733779073974255718160578086286929826463203028499364144917477728836320307527165963258572465167888156326320578694841231225017525469688476573984119226682843735143581384978124264732455413356978173190551573699677707871467280781178259417811479466298645418729194488682524898464720719240573168494543608623294835843757424831142694288481927057804154235115834349351537251769237393677967177567437949929326176418978821457668298110402223818056738964506870875199504753537444791297705673305769652649907214537572141631311038649723217285196078552478902232446528114448923169351250897760635299348381214422361685456661284341497887638481947453401324899413832521885755176561764269732259428917239919218373677640606959417489702533297485937796208745952669403125299258765191649886298878437030965145583111385873691995526280184285564065656938132496828292198119341013811472796771802455411759836552255934639996894024372864387765526740586489887089958343501241932217772989159842946278737792224553251930629018701570835449755355395877753660686926872945467911839411966316963676784679776394916771873460268796623431373371477073112564654938188738332952541523929969297223187412745567163670848530192458502387703011276078829148977498814333661188807554109672304343936831982418918231418245695464478739794961362937111473797051565390348856951648181590782551337656181418171414389868249032354580869442666757192823923769787076181839846092598936384812175467205477946559692927594667207747952881727097663483446222866454558442421071679391774134315828476399672055737052361991472333798892299140876366668992963533647659635138699433493223963397398390183964355848692287382686404149625048772257995989375612845734838511938651626265376360154690244780844138967417349685538944308413162995206341208158711358612336329015515644525989845239452124846132228782502626191661714742655632452034177310202192687415575222414085596865598657742599669412305177868790108793172175855246766778506583837418737388607014695014189262785232298498835640249470795516212422365093938126228138887576564690622734476368277027506975247799661316966639495426626519655547931285521126737152599057819023252690508232998571563946211076112860846966461722246313566364405660795945832394469039729398388465504712812532352662978519875270119793542573181982564541806534366833964224297857569168675499476712875959649081505134123233581598834761974441482517207593175887364854348091646820887284763954412999881558635337921494873349666429451465252088235494829844195935959372303236434877431824209523287557912240319513367734124321716313226011443974189437926964386689337459107013259566684466665196998438826667973128442963822194496667834765548658239321523166268211649963971675863632318540704415566538395119931731382641928210189286747566273150808749926572337225627880734159244969791546191119778222749078889497672961767724136116713218119126335170727058995841458243704623643141713235311653176360389246486385497578136482706589162526368929156893975578314494466717452848543658752926352059935564867769467118288285885844426145455695965188315375379511596075779154714991153940695039807291442064154056133950238235128738933174316284747568799585403123956611461657831615928749439393727439278534943085545111654816606098878994455751277751333132795543645124436938462156874978672430696031506799771420997893602410501617463072446140871521362070819911823494384319887736145421976985468875646531368080809146793873405126999471379785338144455945877144891540706011138978374631264333716239163663468537635583613329525624645288105293774868163668986948444476382073795027149592307452648688585791548868453121626129412077471534939814214380714414274556282960638224965842566067473270793957337757261676767078473180247866779763138667448256962266173764667778246965676432939385433388763423461656864225372162359562837028581696238290373844796790475538808910845562755941588830831772578467839256957841554081539611512248659057439723709640199523604127626629945966435056406127876284866811508889735153604453357641567383507028637599287537971917656477357116208179421350755587678141623474834845437843595513251548526635309262579766558163276144418224839013664568796445392460669628188233174467401133166215722835638296208556421137677293598481741975449889758861515149845293667418629196564934508888351663549575701238394516295434417173235089783056251759462821524564667431807521804762631297498511237252276888535776278271148452154144213681697372391615552961883456734250406846696754809876123820643634284873466281444564537699818592249514643313581711762544333590169756454934776336175098957681487799702484801346573241531285423294992044663833866916105561815038652522123570607886561120939381404284666321792873917293653923329041669985946742495840206614566963509980139117117279882373563745207266327161646150758213349557402990524798648479873938839442421862805468826898282015122450816016995563947910724590926914112272883721189070925219274934326696758980454744738321281197736933507458923345577530216059656172398464305269629738157829173066919169782785115952346464292053345957505623486933479670863610603693205426165180377654617420908082202772807386353756404544287313349943464215969022459887581784714169398550978315858387203829845440381328185755633148126883609073275064143471439445879457966622373772332531552666577794173640987615283441295693806688912646879781596496989045373573496298877732913794381879523180255468474488777539617026934641858078402292207174383747477663947691617778554457375438785332505154173434724858804317818712796361378245136151353967282511519383296582129939453853513199508780323677202117607721266270378958909245205662128536835033869979322394979417175654675437504213584492492345638324478090961451921676436744446594328678536991883610474427234738646643523513496264427724808078422494108156798066227239642834356848581629859163203628932384312191731025647111588079716516407760261562367062291382841125663383525281724436191960902924832598412543405297791528197220151086376247628917351031436787303696395383918363818070621841483361663321385987769499993817832780644578304088759251711086387510315383488425406194779188891624158374529251192631982494906165355887144836484427674187425751728961303577959141974142434512969887479761609095468733359288956218865852746
diff --git a/AdventOfCode/Common/AOCExtensions.cs b/AdventOfCode/Common/AOCExtensions.cs
index 4b24299..d59e5ec 100644
--- a/AdventOfCode/Common/AOCExtensions.cs
+++ b/AdventOfCode/Common/AOCExtensions.cs
@@ -34,19 +34,7 @@ namespace AdventOfCode.Common
}
}
- public static void PrintSquareArray(this int[,] arr)
- {
- for (int x = 0; x < arr.GetLength(0); x++)
- {
- for (int y = 0; y < arr.GetLength(1); y++)
- {
- Console.Write(arr[x,y] + " ");
- }
- Console.WriteLine();
- }
- }
-
- public static void PrintSquareArray(this char[,] arr)
+ public static void PrintSquareArray(this T[,] arr)
{
for (int x = 0; x < arr.GetLength(0); x++)
{
@@ -58,16 +46,12 @@ namespace AdventOfCode.Common
}
}
- public static void PrintSquareArray(this string[,] arr)
+ public static bool IsWithinBoard(this T[,] board, int newX, int newY)
{
- for (int x = 0; x < arr.GetLength(0); x++)
- {
- for (int y = 0; y < arr.GetLength(1); y++)
- {
- Console.Write(arr[x, y] + " ");
- }
- Console.WriteLine();
- }
+ if (newX < 0 || newY < 0
+ || newX >= board.GetLength(0) || newY >= board.GetLength(1))
+ return false;
+ return true;
}
}
}
diff --git a/AdventOfCode/Models/AOCDay.cs b/AdventOfCode/Models/AOCDay.cs
index 2a99352..3f15585 100644
--- a/AdventOfCode/Models/AOCDay.cs
+++ b/AdventOfCode/Models/AOCDay.cs
@@ -62,11 +62,6 @@ namespace AdventOfCode.Models
return this._request.Input.Trim().Replace("\r", "").Split("\n");
}
- protected string[] GetSplitRowInput()
- {
- return this._request.Input.Trim().Replace("\r", "").Split("\n");
- }
-
protected List SplitInputOnEmptyLine()
{
var rows = GetSplitInput();
diff --git a/AdventOfCode/_2024/Day1.cs b/AdventOfCode/_2024/Day1.cs
new file mode 100644
index 0000000..e6ea8de
--- /dev/null
+++ b/AdventOfCode/_2024/Day1.cs
@@ -0,0 +1,44 @@
+using AdventOfCode.Models;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace AdventOfCode._2024
+{
+ public class Day1 : AOCDay
+ {
+ protected override AOCResponse ExecutePartA()
+ {
+ var leftList = this.GetSplitInput().Select(x => int.Parse(x.Split(" ")[0])).OrderBy(x => x).ToArray();
+ var rightList = this.GetSplitInput().Select(x => int.Parse(x.Split(" ")[1])).OrderBy(x => x).ToArray();
+
+ var totalDistance = 0;
+ for (int i = 0; i < leftList.Length; i++)
+ {
+ totalDistance += Math.Abs(leftList[i]-rightList[i]);
+ }
+ Answer = totalDistance;
+ return this._response;
+ }
+
+ protected override AOCResponse ExecutePartB()
+ {
+ var leftList = this.GetSplitInput().Select(x => int.Parse(x.Split(" ")[0])).GroupBy(x => x)
+ .ToDictionary(group => group.Key, group => group.Count());
+ var rightList = this.GetSplitInput().Select(x => int.Parse(x.Split(" ")[1])).GroupBy(x => x)
+ .ToDictionary(group => group.Key, group => group.Count());
+
+ var similarityScore = 0;
+ foreach (var input in leftList)
+ {
+ var targetOccurence = 0;
+ _ =rightList.TryGetValue(input.Key, out targetOccurence);
+ var score = targetOccurence * input.Key; //To generate the similarity score
+ similarityScore += score * input.Value; //Score * num of occurence in source lust
+ }
+ Answer = similarityScore;
+ return this._response;
+ }
+ }
+}
diff --git a/AdventOfCode/_2024/Day2.cs b/AdventOfCode/_2024/Day2.cs
new file mode 100644
index 0000000..95bf5dd
--- /dev/null
+++ b/AdventOfCode/_2024/Day2.cs
@@ -0,0 +1,79 @@
+using AdventOfCode.Models;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace AdventOfCode._2024
+{
+ public class Day2 : AOCDay
+ {
+ protected override AOCResponse ExecutePartA()
+ {
+ var numSafeReports = 0;
+ foreach (var level in this.GetSplitInput())
+ {
+ if (IsValidLevel(level.Split(" ").Select(x => int.Parse(x)).ToArray()))
+ {
+ numSafeReports++;
+ }
+ }
+ Answer = numSafeReports;
+ return this._response;
+ }
+
+ protected override AOCResponse ExecutePartB()
+ {
+ var numSafeReports = 0;
+ foreach (var level in this.GetSplitInput())
+ {
+ var pLevel = level.Split(" ").Select(x => int.Parse(x)).ToArray();
+ if (IsValidLevel(pLevel)) //If initially safe, increase the count
+ {
+ numSafeReports++;
+ }
+ else
+ {
+ for (int i = 0; i < pLevel.Length; i++)
+ {
+ //Remove a single value of each array and test again, if it ever works then consider valid
+ var tempLevel = pLevel.Where((_, index) => index != i).ToArray();
+ if (IsValidLevel(tempLevel))
+ {
+ numSafeReports++;
+ break;
+ }
+ }
+ }
+ }
+ Answer = numSafeReports;
+ return this._response;
+ }
+
+ private bool IsValidLevel(int[] levels)
+ {
+ char dir = 'U';
+ for (int i = 0; i < levels.Length-1; i++)
+ {
+ var delta = Math.Abs(levels[i] - levels[i + 1]);
+ if (delta < 1 || delta > 3)
+ return false;
+ switch (dir)
+ {
+ case 'U':
+ dir = levels[i] < levels[i + 1] ? 'I' : 'D';
+ break;
+ case 'I': //Record should be increasing
+ if (levels[i] >= levels[i + 1])
+ return false;
+ break;
+ case 'D': // Record should be decreasing
+ if (levels[i] <= levels[i + 1])
+ return false;
+ break;
+ }
+ }
+ return true;
+ }
+ }
+}
diff --git a/AdventOfCode/_2024/Day3.cs b/AdventOfCode/_2024/Day3.cs
new file mode 100644
index 0000000..dfef47d
--- /dev/null
+++ b/AdventOfCode/_2024/Day3.cs
@@ -0,0 +1,80 @@
+using AdventOfCode.Models;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace AdventOfCode._2024
+{
+ public class Day3 : AOCDay
+ {
+ private static string Operation = "mul(";
+ protected override AOCResponse ExecutePartA()
+ {
+ var totalSum = 0;
+ var row = string.Join("", this.GetSplitInput());
+ foreach (var mulIndex in IndexesOfValue(row, Operation))
+ {
+ if (this._request.Version == AOCVersion.B //We only check enablement for Part B
+ && !IsEnabledAtIndex(row, mulIndex)) continue;
+ var commaSplit = row.IndexOf(",", mulIndex + 1);
+ if (commaSplit == -1) continue; //Means nothing was found
+ var firstOperand = row.Substring(mulIndex, (commaSplit-mulIndex)).Replace(Operation, ""); //Remove 1 to get rid of the comma
+ var endBracket = row.IndexOf(")", commaSplit + 1);
+ if (endBracket == -1) continue; //Means nothing was found
+ var secondOperand = row.Substring(commaSplit + 1, (endBracket - commaSplit) - 1);
+ if (IsValidOperand(firstOperand) && IsValidOperand(secondOperand))
+ {
+ Log($"{firstOperand} * {secondOperand}");
+ totalSum += int.Parse(firstOperand) * int.Parse(secondOperand);
+ }
+ }
+ Answer = totalSum;
+ return this._response;
+ }
+
+ protected override AOCResponse ExecutePartB()
+ {
+ return ExecutePartA();
+ }
+
+ private bool IsValidOperand(string operand)
+ {
+ if (operand.Length > 3) return false;
+ if (!operand.Replace(" ", "").Equals(operand)) return false;
+ if (!int.TryParse(operand, out _)) return false;
+
+ return true;
+ }
+
+ private bool IsEnabledAtIndex(string row, int index)
+ {
+ //Get the indexes of the entries, then take the higher index one indicating more recent status
+ var enabledIndex = IndexesOfValue(row.Substring(0, index), "do()");
+ var disabledIndex = IndexesOfValue(row.Substring(0, index), "don't()");
+
+ if (!enabledIndex.Any())
+ {
+ return !disabledIndex.Any();
+ }
+ if (!disabledIndex.Any())
+ {
+ return true; //We assume that it is enabled if not set to disabled
+ }
+ return enabledIndex.Last() > disabledIndex.Last();
+ }
+
+ private List IndexesOfValue(string row, string value)
+ {
+ var indexes = new List();
+ int index = row.IndexOf(value);
+
+ while (index != -1)
+ {
+ indexes.Add(index); // Store the index
+ index = row.IndexOf(value, index + 1); // Search from the next position
+ }
+ return indexes;
+ }
+ }
+}
diff --git a/AdventOfCode/_2024/Day4.cs b/AdventOfCode/_2024/Day4.cs
new file mode 100644
index 0000000..4093e1a
--- /dev/null
+++ b/AdventOfCode/_2024/Day4.cs
@@ -0,0 +1,132 @@
+using AdventOfCode.Common;
+using AdventOfCode.Models;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace AdventOfCode._2024
+{
+ public class Day4 : AOCDay
+ {
+ private int[,] AllDirections = {
+ {-1, 0}, //Up
+ { 1, 0}, //Down
+ { 0, -1}, //Left
+ { 0, 1}, //Right
+ {-1, -1}, //Diagonal up-left
+ {-1, 1}, //Diagonal up-right
+ { 1, -1}, //Diagonal down-left
+ { 1, 1} //Diagonal down-right
+ };
+ protected override AOCResponse ExecutePartA()
+ {
+ var input = this.GetSplitInput();
+
+ //Create our grid
+ var rows = input.Length;
+ var columns = input.First().Length;
+ var board = new char[rows, columns];
+ for (int y = 0; y < rows; y++)
+ {
+ for (int x = 0; x < columns; x++)
+ {
+ board[x, y] = input[x][y];
+ }
+ }
+
+ //Parse our grid in all directions
+ var numOfXmasWords = 0;
+ for (int x = 0; x < board.GetLength(0); x++)
+ {
+ for (int y = 0; y < board.GetLength(1); y++)
+ {
+ for (int d = 0; d < AllDirections.GetLength(0); d++)
+ {
+ int newRow = x;
+ int newCol = y;
+ string path = $"{board[x, y]}";
+
+ bool valid = true;
+ for (int step = 1; step < 4; step++)
+ {
+ newRow += AllDirections[d, 0];
+ newCol += AllDirections[d, 1];
+ if (newRow < 0 || newRow >= rows || newCol < 0 || newCol >= columns)
+ {
+ valid = false;
+ break;
+ }
+ path += board[newRow, newCol];
+ }
+
+ if (valid && path.Equals("XMAS"))
+ {
+ numOfXmasWords++;
+ }
+ }
+ }
+ }
+ Answer = numOfXmasWords;
+ return this._response;
+ }
+
+ protected override AOCResponse ExecutePartB()
+ {
+ {
+ var input = this.GetSplitInput();
+
+ //Create our grid
+ var rows = input.Length;
+ var columns = input.First().Length;
+ var board = new char[rows, columns];
+ for (int y = 0; y < rows; y++)
+ {
+ for (int x = 0; x < columns; x++)
+ {
+ board[x, y] = input[x][y];
+ }
+ }
+
+ //Parse our grid in all directions
+ var numOfXmasWords = 0;
+ for (int x = 0; x < board.GetLength(0); x++)
+ {
+ for (int y = 0; y < board.GetLength(1); y++)
+ {
+ if (!board[x, y].Equals('A')) continue;
+ int[,] CrossedDirections = {
+ {-1, -1}, //Diagonal up-left
+ { 1, 1}, //Diagonal down-right
+ {-1, 1}, //Diagonal up-right
+ { 1, -1} //Diagonal down-left
+ };
+
+ var leftDiag = string.Empty;
+ var rightDiag = string.Empty;
+ for (int i = 0; i < CrossedDirections.GetLength(0); i++)
+ {
+ int newX = x + CrossedDirections[i, 0];
+ int newY = y + CrossedDirections[i, 1];
+
+ if (newX >= 0 && newX < rows && newY >= 0 && newY < columns)
+ {
+ if (i < 2)
+ leftDiag += board[newX, newY];
+ else
+ rightDiag += board[newX, newY];
+ }
+ }
+ if (leftDiag.Contains("M") && leftDiag.Contains("S") &&
+ rightDiag.Contains("M") && rightDiag.Contains("S"))
+ {
+ numOfXmasWords++;
+ }
+ }
+ }
+ Answer = numOfXmasWords;
+ return this._response;
+ }
+ }
+ }
+}
diff --git a/AdventOfCode/_2024/Day5.cs b/AdventOfCode/_2024/Day5.cs
new file mode 100644
index 0000000..012e1dc
--- /dev/null
+++ b/AdventOfCode/_2024/Day5.cs
@@ -0,0 +1,118 @@
+using AdventOfCode.Common;
+using AdventOfCode.Models;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.Intrinsics.Arm;
+using System.Threading.Tasks;
+
+namespace AdventOfCode._2024
+{
+ public class Day5 : AOCDay
+ {
+ protected override AOCResponse ExecutePartA()
+ {
+ var input = this.SplitInputOnEmptyLine();
+ var orderingRules = input[0].Select(x => new OrderingRule(x)).ToList();
+
+ var validUpdates = new List();
+ foreach (var update in input[1])
+ {
+ var updateOrder = update.Split(",").Select(x => int.Parse(x)).ToArray();
+ var applicableRules = orderingRules.Where(x => updateOrder.Contains(x.Min));
+ var violation = false;
+ foreach (var applicableRule in applicableRules)
+ {
+ if (applicableRule.DoesViolateOrder(updateOrder))
+ {
+ violation = true;
+ break;
+ }
+ }
+ if (!violation)
+ {
+ validUpdates.Add(updateOrder);
+ }
+ }
+
+ var finalSum = 0;
+ foreach (var validUpdate in validUpdates)
+ {
+ finalSum += validUpdate[validUpdate.Length / 2];
+ }
+ Answer = finalSum;
+ return this._response;
+ }
+
+ protected override AOCResponse ExecutePartB()
+ {
+ var input = this.SplitInputOnEmptyLine();
+ var orderingRules = input[0].Select(x => new OrderingRule(x)).ToList();
+
+ var invalidUpdates = new List();
+ foreach (var update in input[1])
+ {
+ var updateOrder = update.Split(",").Select(x => int.Parse(x)).ToArray();
+ var applicableRules = orderingRules.Where(x => updateOrder.Contains(x.Min));
+ var violation = false;
+ foreach (var applicableRule in applicableRules)
+ {
+ if (applicableRule.DoesViolateOrder(updateOrder))
+ {
+ violation = true;
+ break;
+ }
+ }
+ if (violation)
+ {
+ invalidUpdates.Add(updateOrder);
+ }
+ }
+
+ var finalSum = 0;
+ foreach (var invalidUpdate in invalidUpdates)
+ {
+ var applicableRules = orderingRules.Where(x => invalidUpdate.Contains(x.Min) && invalidUpdate.Contains(x.Max));
+ do
+ {
+ foreach (var applicableRule in applicableRules)
+ {
+ if (applicableRule.DoesViolateOrder(invalidUpdate))
+ {
+ var first = Array.IndexOf(invalidUpdate, applicableRule.Min);
+ var second = Array.IndexOf(invalidUpdate, applicableRule.Max);
+ var swap = invalidUpdate[first];
+ invalidUpdate[first] = invalidUpdate[second];
+ invalidUpdate[second] = swap;
+ }
+ }
+ } while (applicableRules.Any(x => x.DoesViolateOrder(invalidUpdate)));
+ finalSum += invalidUpdate[invalidUpdate.Length / 2];
+ Log(string.Join(",",invalidUpdate));
+ }
+ Answer = finalSum;
+ return this._response;
+ }
+ }
+
+ class OrderingRule
+ {
+ public int Min { get; set; }
+ public int Max { get; set; }
+ public OrderingRule(string rule)
+ {
+ var split = rule.Split('|');
+ Min = int.Parse(split[0]);
+ Max = int.Parse(split[1]);
+ }
+
+ public bool DoesViolateOrder(int[] pageOrdering)
+ {
+ var indexOfMin = Array.IndexOf(pageOrdering, Min);
+ var indexOfMax = Array.IndexOf(pageOrdering, Max);
+ if (indexOfMin == -1 || indexOfMax == -1)
+ return false; //Means no page found in rule, should skip
+ return indexOfMin > indexOfMax;
+ }
+ }
+}
diff --git a/AdventOfCode/_2024/Day6.cs b/AdventOfCode/_2024/Day6.cs
new file mode 100644
index 0000000..ba615c1
--- /dev/null
+++ b/AdventOfCode/_2024/Day6.cs
@@ -0,0 +1,174 @@
+using AdventOfCode._2022.Day9;
+using AdventOfCode.Common;
+using AdventOfCode.Models;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.Intrinsics.Arm;
+using System.Threading.Tasks;
+
+namespace AdventOfCode._2024
+{
+ public class Day6 : AOCDay
+ {
+ protected override AOCResponse ExecutePartA()
+ {
+ var input = this.GetSplitInput();
+ //Create our grid
+ var rows = input.Length;
+ var columns = input.First().Length;
+ var board = new char[rows, columns];
+ Guard guard = null;
+ for (int y = 0; y < rows; y++)
+ {
+ for (int x = 0; x < columns; x++)
+ {
+ board[x, y] = input[x][y];
+ if (input[x][y] == '^')
+ {
+ guard = new Guard(x, y);
+ }
+ }
+ }
+
+ while (guard.IsWithinBoard)
+ {
+ guard.Move(board);
+ }
+ Answer = guard.VisitedLocations.Count;
+ return this._response;
+ }
+
+ protected override AOCResponse ExecutePartB()
+ {
+ return this._response;
+ }
+ }
+ class Guard
+ {
+ public bool IsWithinBoard { get; set; }
+ public HashSet VisitedLocations;
+ public Direction Direction { get; set; }
+ public int X { get; set; }
+ public int Y { get; set; }
+ public Guard(int x, int y)
+ {
+ IsWithinBoard = true;
+ Direction = Direction.U;
+ X = x;
+ Y = y;
+ VisitedLocations = new HashSet();
+ MarkLocationAsVisited(); //Initial starting point
+ }
+
+ public void Move(char[,] board)
+ {
+ int newX = GetNewX();
+ int newY = GetNewY();
+ if (!board.IsWithinBoard(newX, newY))
+ {
+ IsWithinBoard = false;
+ return;
+ }
+ else
+ {
+ while (board[newX, newY] == '#')
+ {
+ Rotate();
+ newX = GetNewX();
+ newY = GetNewY();
+ if (!board.IsWithinBoard(newX, newY))
+ {
+ IsWithinBoard = false;
+ return;
+ }
+ }
+ }
+
+ //if (newX < 0 || newY < 0
+ // || newX > board.GetLength(0) || newY > board.GetLength(1))
+ //{
+ // IsWithinBoard = false;
+ // return;
+ //}
+
+ //do
+ //{
+ // newX = GetNewX();
+ // newY = GetNewY();
+ // if (newX < 0 || newY < 0
+ // || newX > board.GetLength(0) || newY > board.GetLength(1))
+ // {
+ // IsWithinBoard = false;
+ // return;
+ // }
+
+ //} while (board[newX, newY] == '#');
+
+ board[X, Y] = 'X';
+ X = newX;
+ Y = newY;
+ board[X, Y] = GetDirectionChar();
+ MarkLocationAsVisited(); //Track each visited hex
+ //TODO Check if it exceeds the board
+ }
+
+ private void MarkLocationAsVisited()
+ {
+ VisitedLocations.Add($"{X}-{Y}");
+ }
+
+ private int GetNewX()
+ {
+ if (Direction == Direction.U)
+ return X - 1;
+ if (Direction == Direction.D)
+ return X + 1;
+ return X;
+ }
+
+ private int GetNewY()
+ {
+ if (Direction == Direction.L)
+ return Y - 1;
+ if (Direction == Direction.R)
+ return Y + 1;
+ return Y;
+ }
+
+ private void Rotate()
+ {
+ if (Direction == Direction.U)
+ {
+ Direction = Direction.R;
+ }else if (Direction == Direction.D)
+ {
+ Direction = Direction.L;
+ }
+ else if (Direction == Direction.L)
+ {
+ Direction = Direction.U;
+ }
+ else if (Direction == Direction.R)
+ {
+ Direction = Direction.D;
+ }
+ }
+
+ private char GetDirectionChar()
+ {
+ switch (Direction)
+ {
+ case Direction.R:
+ return '>';
+ case Direction.L:
+ return '<';
+ case Direction.U:
+ return '^';
+ case Direction.D:
+ return 'v';
+ }
+ throw new ArgumentException("Invalid direction");
+ }
+ }
+}
diff --git a/AdventOfCode/_2024/Day7.cs b/AdventOfCode/_2024/Day7.cs
new file mode 100644
index 0000000..d51e5e6
--- /dev/null
+++ b/AdventOfCode/_2024/Day7.cs
@@ -0,0 +1,120 @@
+using AdventOfCode._2022.Day9;
+using AdventOfCode.Common;
+using AdventOfCode.Models;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Options;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.Intrinsics.Arm;
+using System.Threading.Tasks;
+
+namespace AdventOfCode._2024
+{
+ public class Day7 : AOCDay
+ {
+ protected override AOCResponse ExecutePartA()
+ {
+ var sum = 0l;
+ foreach (var line in this.GetSplitInput())
+ {
+ var to = new TestEquation(line, this._request.Version == AOCVersion.B);
+ if (to.Evaluate())
+ {
+ sum += to.Result;
+ }
+ }
+ Answer = sum;
+ return this._response;
+ }
+
+ protected override AOCResponse ExecutePartB()
+ {
+ return ExecutePartA();
+ }
+ }
+
+ class TestEquation
+ {
+ private char[] ValidOperators = new char[] { '+', '*' };
+ public long Result { get; set; }
+ private long[] Operands;
+ public TestEquation(string input, bool isPartB)
+ {
+ var split = input.Split(':');
+ Result = long.Parse(split[0]);
+ var operands = split[1].Trim().Split(" ");
+ Operands = operands.Select(x => long.Parse(x)).ToArray();
+ if (isPartB)
+ {
+ ValidOperators = new char[] { '+', '*', '|' };
+ }
+ }
+
+ public bool Evaluate()
+ {
+ var combinations = GenerateCombinations(Operands.Length - 1);
+ foreach (var combination in combinations)
+ {
+ var equation = new List();
+ int operatorPos = 0;
+ for (int i = 0; i < Operands.Length; i++)
+ {
+ equation.Add(Operands[i].ToString());
+ if (operatorPos < combination.Length)
+ equation.Add(combination[operatorPos++].ToString());
+ }
+ var result = Compute(equation);
+ if (result == Result)
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private long Compute(List equation)
+ {
+ var result = long.Parse(equation.First());
+ for (int i = 1; i < equation.Count; i++)
+ {
+ if (equation[i] == "+")
+ {
+ result += long.Parse(equation[++i]);
+ }
+ else if (equation[i] == "*")
+ {
+ result *= long.Parse(equation[++i]);
+ }else if (equation[i] == "|")
+ {
+ result = long.Parse(result.ToString() + equation[++i]);
+ }
+ }
+ return result;
+ }
+
+ private List GenerateCombinations(int n)
+ {
+ var results = new List();
+ GenerateCombinationsRecursive(n, "", results);
+ return results;
+ }
+
+ void GenerateCombinationsRecursive(int n, string current, List results)
+ {
+ if (current.Length == n)
+ {
+ results.Add(current);
+ return;
+ }
+
+ foreach (var option in ValidOperators)
+ {
+ GenerateCombinationsRecursive(n, current + option, results);
+ }
+ }
+
+
+
+ }
+}
diff --git a/AdventOfCode/_2024/Day8.cs b/AdventOfCode/_2024/Day8.cs
new file mode 100644
index 0000000..442dc31
--- /dev/null
+++ b/AdventOfCode/_2024/Day8.cs
@@ -0,0 +1,36 @@
+using AdventOfCode._2022.Day9;
+using AdventOfCode.Common;
+using AdventOfCode.Models;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Options;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.Intrinsics.Arm;
+using System.Threading.Tasks;
+
+namespace AdventOfCode._2024
+{
+ public class Day8 : AOCDay
+ {
+ protected override AOCResponse ExecutePartA()
+ {
+
+ return this._response;
+ }
+
+ protected override AOCResponse ExecutePartB()
+ {
+ return ExecutePartA();
+ }
+ }
+
+ class FileSegment
+ {
+ public int FileId { get; set; }
+ public FileSegment(int filled, int empty)
+ {
+
+ }
+ }
+}