diff --git a/AdventOfCode.csproj b/AdventOfCode.csproj index 1168b6b..1390a4f 100644 --- a/AdventOfCode.csproj +++ b/AdventOfCode.csproj @@ -18,4 +18,8 @@ + + + + diff --git a/Days/Day8.cs b/Days/Day8.cs new file mode 100644 index 0000000..dcf9d4b --- /dev/null +++ b/Days/Day8.cs @@ -0,0 +1,221 @@ +using System.Buffers; +using System.Numerics; +using Spectre.Console; + +namespace AdventOfCode.Days; + +public class Day8 : Day +{ + public override int Number => 8; + public override string Name => "Playground"; + + public override void RunPart1(bool display = true) + { + var boxPositions = ParseBoxPositions(Input); + var boxPairDistances = FetchOrderedDistances(boxPositions); + + var circuits = new List>(); + + var connectionsCount = 0; + + while (connectionsCount < 1000) + { + // Fetch next minimal distance pair. This is always the last pair in our ordered list + var (pairLeftBox, pairRightBox, _) = boxPairDistances[^1]; + boxPairDistances.RemoveAt(boxPairDistances.Count - 1); + + // Create a connection if those two boxes are not already connected + if (!ConnectionExists(circuits, pairLeftBox, pairRightBox)) + { + // Connect the boxes, eventually merging circuits + ConnectBoxes(circuits, pairLeftBox, pairRightBox); + } + + connectionsCount++; + } + + var result = circuits + .OrderByDescending(circuit => circuit.Count) + .Take(3) + .Aggregate(1, (product, circuit) => product * circuit.Count); + + if (display) + { + AnsiConsole.MarkupLine($"[green]Result is: [yellow]{result}[/][/]"); + } + } + + public override void RunPart2(bool display = true) + { + var boxPositions = ParseBoxPositions(Input); + var boxPairDistances = FetchOrderedDistances(boxPositions); + + var circuits = new List>(); + + long result; + while (true) + { + // Fetch next minimal distance pair. This is always the last pair in our ordered list + var (pairLeftBox, pairRightBox, _) = boxPairDistances[^1]; + boxPairDistances.RemoveAt(boxPairDistances.Count - 1); + + // Create a connection if those two boxes are not already connected + if (!ConnectionExists(circuits, pairLeftBox, pairRightBox)) + { + // Connect the boxes, eventually merging circuits + ConnectBoxes(circuits, pairLeftBox, pairRightBox); + } + + // Check if there is a circuit with all boxes connected + if (circuits[0].Count >= 1000) + { + result = pairLeftBox.X * pairRightBox.X; + break; + } + } + + if (display) + { + AnsiConsole.MarkupLine($"[green]Result is: [yellow]{result}[/][/]"); + } + } + + private static double BoxDistance(Box left, Box right) + { + return Math.Sqrt( + (right.X - left.X) * (right.X - left.X) + + (right.Y - left.Y) * (right.Y - left.Y) + + (right.Z - left.Z) * (right.Z - left.Z) + ); + } + + static bool ConnectionExists(List> circuits, Box left, Box right) + { + foreach (var circuit in circuits) + { + if (circuit.Contains(left) && circuit.Contains(right)) + { + return true; + } + } + + return false; + } + + static void ConnectBoxes(List> circuits, Box pairLeftBox, Box pairRightBox) + { + // Try to find circuit containing each box + HashSet? leftCircuit = null; + HashSet? rightCircuit = null; + + foreach (var circuit in circuits) + { + if (circuit.Contains(pairLeftBox)) + { + leftCircuit = circuit; + } + + if (circuit.Contains(pairRightBox)) + { + rightCircuit = circuit; + } + } + + // None is in a circuit, create a new one + if (leftCircuit is null && rightCircuit is null) + { + var circuit = new HashSet + { + pairLeftBox, + pairRightBox + }; + + circuits.Add(circuit); + } + // One of the two is null + else if (leftCircuit is not null && rightCircuit is null) + { + leftCircuit.Add(pairRightBox); + } + else if (leftCircuit is null && rightCircuit is not null) + { + rightCircuit.Add(pairLeftBox); + } + // Both are already in a circuit, merge them + else + { + foreach (var box in rightCircuit!) + { + leftCircuit!.Add(box); + } + + circuits.Remove(rightCircuit); + } + } + + private static List ParseBoxPositions(string input) + { + var positions = new List(); + + foreach (var line in input.EnumerateLines()) + { + var split = line.Split(','); + + split.MoveNext(); + var x = long.Parse(line[split.Current]); + + split.MoveNext(); + var y = long.Parse(line[split.Current]); + + split.MoveNext(); + var z = long.Parse(line[split.Current]); + + positions.Add(new Box(x, y, z)); + } + + return positions; + } + + private static List FetchOrderedDistances(List boxes) + { + var boxPairDistances = new List(); + + for (var i = 0; i < boxes.Count - 1; i++) + { + for (var j = i + 1; j < boxes.Count; j++) + { + var leftBox = boxes[i]; + var rightBox = boxes[j]; + + var distance = BoxDistance(leftBox, rightBox); + + boxPairDistances.Add(new BoxPairDistance(leftBox, rightBox, distance)); + } + } + + // Sort in reverse order + boxPairDistances.Sort((left, right) => right.CompareTo(left)); + + return boxPairDistances; + } + + private record Box(long X, long Y, long Z); + + private record BoxPairDistance(Box Left, Box Right, double Distance) : IComparable + { + public int CompareTo(BoxPairDistance? other) + { + if (ReferenceEquals(this, other)) + { + return 0; + } + + if (other is null) + { + return 1; + } + + return Distance.CompareTo(other.Distance); + } + } +} \ No newline at end of file diff --git a/Inputs/Day8.txt b/Inputs/Day8.txt new file mode 100644 index 0000000..76095a3 --- /dev/null +++ b/Inputs/Day8.txt @@ -0,0 +1,1000 @@ +31316,90057,44547 +31517,64067,5099 +83231,82688,97747 +35658,44604,3753 +87880,40490,45177 +27324,13457,1244 +22745,1984,28324 +26351,73026,74409 +25331,88312,51857 +22272,83015,10838 +11772,69225,77897 +2362,92619,41178 +72041,60347,12547 +91637,80564,10728 +51646,19948,363 +64490,99698,80715 +35104,61088,60640 +75449,86256,69966 +99231,82557,31953 +57276,54487,12253 +79055,17005,74781 +25969,25959,62622 +91573,81515,99351 +77117,2935,15893 +44899,2657,90561 +56600,35285,94162 +20949,22854,67370 +68820,54431,92815 +19657,12028,96854 +38219,30593,82733 +14829,69232,94376 +31748,4416,59648 +93221,66602,57552 +94215,41064,78454 +33579,68931,83415 +79512,83512,93136 +19663,74262,30818 +65226,8247,21634 +18540,86670,10501 +7093,43165,20753 +86926,78782,10155 +11132,99499,57336 +34741,33114,97399 +78304,39734,28526 +81067,94432,55241 +58676,93514,53931 +34445,23276,78738 +83598,66115,24797 +58303,72013,84950 +85057,99681,49337 +72052,35235,7790 +54463,62029,32713 +46000,26785,62916 +2666,49355,44789 +78158,42922,3056 +94611,44426,64985 +28794,2719,58496 +9130,13065,23831 +24627,68009,71066 +80246,69830,71146 +20832,95819,27603 +26093,31113,27317 +5752,23938,47704 +39728,25919,4425 +23209,98896,41637 +35287,9705,14624 +18877,1917,89956 +86851,53980,76328 +46303,14909,35001 +52047,5358,79839 +45222,96421,67360 +8898,4014,487 +80303,62323,27390 +54353,57575,29919 +26094,62986,53397 +99840,95730,51599 +59,26905,64392 +14747,5169,21865 +66959,152,93718 +47149,472,13364 +29578,5812,65817 +97383,42687,67773 +21821,11476,33088 +86235,18378,73480 +90323,14386,55540 +72330,8690,61711 +50818,23152,55116 +5565,22984,61764 +49882,48632,98383 +32681,1380,39956 +66395,53474,27950 +35886,809,65766 +43679,99184,90471 +50937,54800,27310 +97706,77223,40697 +74217,69312,98990 +93155,19854,40232 +82272,81616,35401 +92348,30825,56094 +54538,3817,20969 +6064,57177,61628 +72016,58712,94567 +20818,22268,27292 +77244,7210,2255 +46128,30414,51680 +90295,47493,16991 +57461,57509,24083 +85147,78479,6565 +64035,15050,86678 +40674,61076,95031 +35733,66219,65858 +29109,63727,97077 +14266,70119,89904 +43806,10416,42405 +42301,2775,55311 +97538,41258,14661 +53264,70846,65899 +8135,36855,36169 +49536,41668,74783 +4278,8791,77031 +45543,65586,78398 +73988,11475,31132 +37976,62782,33275 +94418,12649,94279 +52920,89575,60576 +66023,4793,3693 +26971,93989,9726 +60198,16091,26801 +66772,99253,75223 +52527,92599,65418 +83596,13446,11283 +74035,25326,45397 +68256,68996,244 +84150,14720,35710 +86320,8847,73910 +75376,29314,13694 +82319,38187,61417 +44128,78874,13082 +73576,97363,57840 +66437,13661,53183 +79156,48947,2885 +66911,48238,63308 +49312,59359,98899 +20743,53672,79220 +83903,54251,8115 +81724,51171,94533 +62441,67397,46504 +21317,99336,99589 +79802,50149,15319 +76108,48493,1298 +37796,65075,63864 +73192,31446,38255 +41037,34551,15048 +95830,16867,85263 +49186,88436,60409 +70841,87476,7498 +53835,75411,51066 +50180,96834,46430 +75262,26055,31217 +5303,45882,78519 +84288,82684,44013 +53861,86882,48192 +24518,87280,64984 +20644,84310,50064 +20512,87505,19834 +41300,78019,98250 +13497,25950,58234 +44691,30343,47805 +58133,97381,98751 +48891,39667,27968 +12439,38317,7540 +36334,40822,94752 +50327,93694,6560 +92690,21497,60102 +63732,87894,97902 +90319,38961,20293 +6574,85531,27388 +20401,96966,11189 +32655,79800,29480 +91387,17194,47687 +83467,17006,68600 +88755,73912,4383 +67621,16364,27688 +1290,61355,46760 +63001,21371,45148 +92022,52350,62936 +52205,72056,25793 +25222,50040,19571 +91160,18807,77138 +30271,47578,97265 +96195,66802,42326 +36269,37079,16198 +45969,2766,93544 +73080,81445,90688 +83443,34789,57276 +27514,88521,49325 +98640,56098,33322 +15849,1050,73446 +14653,52950,15948 +18638,45520,88480 +14576,79063,67546 +91933,22683,61800 +21181,35942,13669 +16510,46378,95939 +38891,10142,40881 +49311,41255,31289 +97448,29183,79965 +33823,13841,99252 +11093,32898,54445 +9692,49131,10200 +94300,49196,40347 +15081,94760,42695 +28738,10663,15123 +40324,91815,82914 +21563,72030,76153 +30999,99326,89070 +14276,90610,37237 +2813,55564,11809 +36543,51165,77729 +48717,95442,51016 +53065,1817,53245 +22796,49216,42285 +6201,31216,29196 +1420,63174,69079 +44465,12623,21273 +2404,60424,86405 +57458,92769,20790 +94415,45569,53627 +9062,52483,82775 +82038,47450,67261 +4350,26131,39729 +40135,60223,5150 +1143,76109,45770 +36752,69708,96252 +17637,51975,86287 +98586,73570,88500 +389,4145,43716 +57572,72516,88902 +85736,28601,27513 +66690,23590,81397 +75019,7760,41489 +41669,69014,58788 +82358,57256,77355 +55648,91197,46315 +81011,74718,45646 +73705,10869,62919 +81638,97102,54857 +83618,24375,92383 +60059,54177,92460 +80660,1148,72016 +44706,62613,59010 +96862,68825,34639 +30207,96194,73519 +44652,80440,64244 +89887,11314,32786 +89146,34799,11052 +95982,91638,53094 +53784,49604,66966 +72943,55885,3969 +81279,60280,52083 +93821,57763,95305 +4953,79294,16084 +63070,98897,56672 +32502,18133,86587 +98885,75457,62354 +70216,83197,51681 +47614,92309,35808 +7305,59381,14895 +52407,54331,50894 +29346,95260,99600 +24531,48916,34172 +6556,10661,42884 +86489,12130,83858 +15126,23754,95665 +11323,64959,86072 +74434,23234,87225 +74158,2958,74818 +28982,50093,29543 +75232,68044,56291 +13257,49718,74188 +75388,4701,84892 +56406,77467,22589 +58577,52653,93354 +20118,47005,34335 +79862,86672,25387 +43020,3726,4664 +69872,56963,22281 +12425,37465,69737 +20287,73461,48223 +11117,20970,32235 +44308,24330,5666 +36502,21514,45449 +88175,16525,59679 +86124,18138,49691 +52843,64879,60773 +73909,12589,43846 +79811,90121,88495 +25186,55542,60306 +87868,26634,2609 +35956,48392,59786 +22500,68388,7676 +63284,76146,57889 +53726,20057,93215 +97017,31515,1891 +29885,84018,19635 +12984,37128,6658 +94287,38572,30896 +82811,27954,75498 +45644,51201,59385 +23607,68085,19911 +47942,33560,61130 +39291,36988,36027 +3952,83682,91322 +55834,55932,18891 +6489,43638,45690 +41688,72066,26793 +45141,97747,86392 +94394,98948,85688 +91045,32096,86082 +9328,15006,17226 +19529,46284,81027 +70329,77357,8940 +40934,45634,71059 +10019,28426,79472 +20760,37946,73629 +15793,29911,51492 +34815,93931,50502 +25336,11147,32337 +52604,979,93416 +28516,65917,5404 +44786,39714,35473 +4086,33605,19441 +26185,17856,38430 +84678,51535,94113 +29923,39264,78595 +22418,94177,6417 +45326,90095,81198 +42584,95486,3839 +45236,44781,2879 +53890,40048,92404 +89243,65173,62101 +14236,91066,88249 +13380,63280,59585 +7332,18637,51394 +78225,34412,60491 +16628,2872,71069 +41006,7382,6255 +32607,86902,96081 +79272,73989,54228 +22767,83329,41713 +69303,96305,90372 +9569,48728,92445 +5911,75389,49811 +17375,67163,87817 +12316,612,98901 +1137,6191,28648 +6340,87922,11869 +81801,83624,66030 +38782,31017,21453 +62056,63342,43054 +44682,58306,14577 +24457,94706,76516 +98760,64311,68856 +87455,74213,59007 +25025,1450,24510 +79448,71854,67222 +38640,71638,68542 +63636,66478,28731 +11994,15613,48746 +88867,58757,58179 +14542,64955,13898 +43981,33498,5605 +75322,74381,11348 +90189,89756,93268 +29926,34350,2846 +28717,78552,97776 +50942,89645,71774 +55708,84007,13523 +37404,95138,48525 +34079,22717,91129 +24972,63868,59959 +86926,67704,10774 +54729,61840,55260 +17054,82257,5181 +28163,97956,62558 +94109,79149,89272 +21408,83445,10097 +91134,61171,80356 +81127,22202,64809 +85130,33917,3757 +34670,7983,64069 +58625,41648,12929 +70570,93104,92336 +23441,5509,90676 +44282,45740,48981 +70275,40323,7696 +14781,86881,40331 +72278,57278,92284 +95963,1076,61754 +44900,5011,16449 +5282,1602,55751 +30452,26532,35718 +7661,78556,27141 +73834,77736,59736 +88700,2011,6453 +48561,55083,57822 +54440,5893,34590 +48508,40869,82832 +87882,44051,33327 +36970,11492,15385 +62863,74240,10982 +77097,88468,96100 +98888,57086,14459 +86925,99122,35704 +59223,75984,98501 +58446,42097,71716 +46865,40136,49620 +2061,67310,7552 +36175,25918,27602 +10639,25547,69393 +30691,10546,97981 +12079,77419,93060 +55968,18229,16447 +77398,65646,4335 +36619,88171,19077 +26265,44719,29647 +75720,88071,58761 +69700,34627,41840 +93651,81214,97663 +98892,14746,52784 +89660,81598,36153 +21614,54781,50259 +77772,79324,96386 +68595,9231,87237 +37037,65684,73926 +19637,58241,92390 +34092,40843,18711 +965,22712,50817 +22920,31381,52583 +92012,16989,14718 +72002,61421,69680 +89407,83529,82019 +66351,21364,52693 +49326,12277,63646 +31126,25436,38042 +39670,39776,25055 +98591,78831,96802 +47758,3880,32142 +8587,6391,53365 +94084,55833,83432 +29346,15777,17664 +91747,41393,12892 +60429,1892,82157 +13078,32953,29572 +25117,4267,22218 +10549,59397,3730 +32033,58944,52768 +73653,8685,43181 +68821,31973,91553 +82590,41044,5857 +60578,79719,48112 +22466,66298,47670 +9744,39071,229 +59200,69570,58290 +14045,52001,84896 +19049,54345,41466 +57202,78770,6847 +63781,11598,25478 +59127,45178,38113 +61920,96409,41407 +8115,58883,50348 +39814,60803,66543 +68881,66650,48783 +25628,66580,97539 +39219,22442,32731 +59237,84780,61064 +9846,17168,23307 +73652,32255,23789 +99086,86449,14697 +16942,54330,99280 +68857,91100,44775 +3920,74123,55428 +36368,59249,42373 +54935,34211,95636 +58635,80543,44182 +38154,95557,72731 +30849,8167,43513 +25615,92009,89436 +56242,94113,44998 +71227,28449,68287 +7898,14189,23741 +4542,50289,21091 +93643,43253,93806 +44188,38751,23183 +18485,73308,86953 +52957,2996,37111 +9308,73796,16919 +16804,77754,51792 +33090,33403,39248 +55395,25001,81985 +44950,88780,15769 +68888,20231,75433 +4096,69212,88913 +81324,82116,84982 +3503,72472,98510 +10755,70132,58332 +96497,29219,63418 +47528,54442,79338 +80945,54875,81174 +92835,1133,43724 +18401,49432,51001 +62514,98928,89268 +13963,62436,16996 +63627,71917,39510 +21566,37683,73559 +80713,25915,55760 +2127,63374,88496 +79021,14341,39621 +7482,34898,78999 +64553,51421,18568 +32591,5995,33447 +39847,22065,14524 +8727,58666,36133 +71176,12421,32555 +58532,54153,56301 +57952,64692,39436 +9888,10576,40281 +38930,20271,29382 +21867,76075,82765 +83728,50129,46486 +91539,68296,21028 +30639,50224,78124 +14392,38839,52043 +83931,49538,24146 +87772,1957,48643 +96845,68275,93010 +98359,90977,62612 +31729,64056,47606 +28892,22442,87396 +95792,24817,55072 +52819,86896,20133 +59662,40872,3765 +31108,36847,52855 +58181,65274,83766 +31579,68492,5844 +58920,64469,87347 +2505,8347,18004 +16065,37267,20844 +54468,88039,39379 +67827,44161,46058 +66169,78555,36995 +58362,40673,48817 +41359,64490,65298 +87151,49314,34210 +71705,66323,43556 +97083,645,53665 +99197,44806,21770 +8606,56480,44219 +45803,80681,8138 +49409,90923,82652 +9094,88403,32454 +6014,24409,767 +42770,82026,40871 +7725,95942,80389 +27033,70846,55181 +7369,19408,11142 +18153,63996,36790 +22891,79879,46120 +16993,88545,953 +75490,31690,28529 +82468,3761,55313 +56187,42231,8689 +47216,40074,29875 +28571,95564,47329 +83487,52158,73819 +80217,15696,87263 +72388,57813,73050 +82555,99352,3985 +65633,29775,44395 +6756,42212,53874 +82530,21140,44967 +28094,61487,13669 +22928,71606,85028 +41123,97906,86217 +29727,25058,45186 +23385,34411,17184 +84747,96151,88214 +45913,39765,35783 +37883,21529,46871 +58326,99248,44480 +37806,40747,17716 +79126,21928,93887 +92990,2333,2491 +64513,93184,24192 +51970,51028,891 +75997,50068,96888 +91037,20496,75811 +47850,58375,21240 +17590,59405,26699 +4246,73554,213 +56566,6619,12923 +67163,61855,66630 +36040,54606,75263 +9019,38971,71015 +10521,92040,64837 +83284,34993,40618 +18480,74332,35357 +7517,69466,1738 +64605,4114,58449 +41662,48733,79151 +17693,37032,92725 +10996,83832,55438 +8921,11995,12000 +9628,36298,26309 +39109,31219,80806 +71408,10801,91002 +77553,22530,3267 +72015,12645,45888 +35119,88801,27862 +65612,14034,13651 +49588,13402,12715 +98626,28101,21323 +61660,12235,40001 +70701,83952,18956 +24940,81026,10863 +41940,2588,85486 +88250,52156,98452 +23300,19893,79055 +75678,36270,22491 +49375,48851,96521 +72519,49218,34618 +90674,76252,86018 +35511,99279,98889 +36515,96246,65809 +26976,41671,37763 +27688,87187,34810 +54383,52986,86324 +67349,27161,55653 +43142,37079,86870 +35314,37653,69724 +54866,35515,32215 +56049,2368,38278 +9283,87208,28439 +9434,756,51678 +45377,95284,44741 +81721,35245,9060 +27994,47725,62471 +67716,50803,59505 +80721,73878,69402 +17059,95252,32134 +26885,64536,48899 +37076,13813,3319 +6356,36066,5248 +58881,59863,11846 +91581,25143,63580 +28221,60456,15760 +94255,60772,39187 +78456,4293,88944 +78668,3155,78445 +46257,46816,12134 +77249,22441,12604 +28450,75659,40906 +89826,2872,12298 +23493,86376,47903 +8149,23379,72414 +96186,99694,98344 +55941,18689,43378 +97422,92359,12235 +70294,1926,75466 +85762,13262,49616 +69449,37468,55437 +51723,67759,51025 +99624,4836,66966 +36160,71095,92398 +47696,68023,11351 +47526,75581,19444 +14691,14627,1662 +41869,99116,51551 +22062,3723,84950 +76660,83093,91107 +2091,1761,11383 +75211,35293,37763 +44502,45935,97695 +96345,10164,52818 +49432,88933,89703 +15486,30286,90631 +31784,7717,84242 +27500,80196,89088 +54688,59428,75479 +29848,9634,74098 +23998,39309,77669 +86083,4498,37607 +69610,2243,76665 +57619,89940,17004 +89304,98297,36599 +74479,33202,40706 +57997,70431,15738 +67449,7192,81067 +89040,59777,37390 +25893,59454,52747 +25743,46851,83723 +53650,78665,15886 +77194,32677,79331 +44539,27446,76853 +62060,40399,99350 +21980,97261,41018 +6285,95133,10679 +12597,98822,78679 +40627,61252,24113 +51321,13653,3454 +43635,42113,32040 +40357,67093,8191 +63114,90763,88963 +89102,80780,48590 +70017,11786,71837 +33613,27947,96321 +8604,91985,87318 +99,898,34499 +56151,81092,93105 +99661,45747,51122 +58419,20539,78994 +31778,58223,44797 +48069,48593,7788 +15044,25346,27216 +70822,91443,15200 +84234,65696,29563 +90569,14724,96550 +89592,87553,35408 +90073,1536,3691 +82170,54050,26441 +20167,15959,71404 +818,31336,89786 +87212,2337,53896 +19717,33644,35067 +17312,77795,5957 +64653,22077,48686 +52273,83975,35626 +23420,60981,11458 +70900,22394,26095 +3723,30175,70506 +85974,46057,68729 +84861,71454,95121 +37864,70373,61973 +23378,54671,61309 +42850,21566,43550 +53417,32895,79637 +29957,67988,22283 +96201,95040,97614 +28663,77854,27011 +45408,61159,31688 +14235,72247,32972 +33505,582,67761 +3246,60431,76568 +13022,66368,6973 +72878,79502,64879 +88383,95058,28215 +42189,62459,30426 +23763,99544,41265 +96602,14142,56746 +27926,98539,26156 +76140,56811,34309 +66150,87197,71657 +87471,16448,40508 +63512,74164,96936 +40740,89281,27311 +30560,50937,51390 +41277,14669,25107 +76263,71927,23224 +86889,8369,71511 +14846,64214,57448 +98161,92606,80711 +28335,7828,62931 +76516,69951,26681 +8890,62038,36506 +36780,15209,96255 +7248,42352,22670 +69670,48212,31242 +13819,74970,71083 +1880,32556,74781 +90615,94017,60801 +55018,56852,77951 +36754,59029,34895 +16255,22921,76911 +80208,91132,66946 +56471,57667,74421 +23446,4451,99141 +74719,90108,45967 +60351,84420,90888 +8421,2736,67547 +68028,76791,5985 +96799,76026,43769 +91040,53784,9326 +31680,83289,96042 +86405,82503,85610 +45163,89515,9641 +66372,80595,2521 +94542,19798,16330 +1047,81896,60946 +81774,35568,17975 +72868,1722,13494 +41699,54731,29055 +88960,17571,17416 +31335,87580,94947 +51439,68291,43861 +5105,91720,53649 +84248,48986,87133 +44870,13924,89952 +40080,85258,16584 +68792,30057,81321 +9441,91707,7428 +67871,37429,90209 +64232,41519,79162 +68652,22192,16050 +282,24211,96673 +8225,75704,43306 +4290,13971,4328 +84473,44108,98541 +21770,51464,43849 +42128,37754,31836 +76698,48651,64268 +29452,7687,10341 +83255,97245,65473 +96172,23408,86398 +82611,96932,64919 +66024,40055,63608 +79525,43630,57302 +45630,96681,80578 +13752,99531,91644 +61636,77811,51502 +39100,46129,74204 +65523,8672,16579 +85662,75188,83403 +4598,69502,66371 +16663,32937,62082 +60670,59611,75486 +42061,8597,63708 +26638,57050,96034 +8972,49391,75529 +38121,17798,63899 +77682,48931,70059 +59745,23624,51736 +42374,95015,46877 +28864,2552,51444 +84001,99004,19349 +79452,20190,76969 +13076,11197,65168 +91306,9957,78857 +66604,60608,53441 +23773,69910,13001 +20128,57984,77154 +54878,33168,70739 +84807,85980,28933 +27,64268,26062 +25438,93874,22201 +73402,46183,12486 +54280,93072,48401 +4105,8265,20955 +88402,72461,55708 +32093,72262,28652 +48893,24751,1177 +36106,6713,6929 +36617,54012,33678 +83790,10256,16025 +66563,52958,62244 +40447,57522,41897 +16151,6882,54872 +49268,49141,34037 +69715,90122,50228 +45463,93326,97242 +75971,26956,16409 +94406,4885,51881 +41681,52697,94649 +7449,42150,91100 +95844,21563,53753 +73899,2016,77414 +1946,9761,45947 +95259,34465,62190 +10425,1828,91428 +54793,74418,28045 +81603,23691,18581 +18750,26433,6970 +4541,68223,57984 +17618,51104,85145 +937,67995,61822 +50315,65797,82253 +80543,21224,53150 +65029,44945,66060 +78998,94739,50264 +27217,64542,45859 +67377,62546,9611 +1530,1615,38971 +39741,39210,56823 +67417,64836,44983 +72587,10070,67861 +65764,1367,12465 +89298,50262,49841 +49007,19351,19070 +24241,44063,41261 +11271,49383,66774 +21216,13400,85080 +96786,82917,84513 +28173,44223,14677 +37242,21088,11763 +43158,87344,4980 +49228,16042,16546 +97412,37699,92413 +21830,89975,63108 +74180,44261,27903 +46886,73577,9687 +63759,91596,47780 +38976,31958,33232 +62688,50210,54479 +91837,23790,83738 +98030,21979,87331 +36388,74606,51076 +43947,57563,7520 +63948,17945,9237 +62385,66600,68102 +41650,23782,20569 +65185,40690,15808 +6587,49282,39346 +47857,57804,30122 +54708,85155,95197 +5857,45705,48786 +24650,55659,6434 +2033,91662,44552 +50678,71598,87334 +46146,79533,33996 +11391,91581,94071 +2538,4434,37712 +46438,19999,93567 +81089,56882,70032 +61058,39065,41790 +98585,54099,57616 +43273,99478,41285 +65336,58080,88180 +75420,72424,80179 +20062,7169,55989 +84275,16750,75368 +69959,1918,73193 +26779,66191,93915 +50352,89202,84564 +6543,41419,704 +61719,86564,8614 +56268,71810,71075 +76779,61823,15846 +92315,61020,37657 +74749,25030,52694 +6206,78650,13165 +73463,14860,85007 +19706,26156,12202 +37897,32242,69445 +47592,33115,64516 +26674,55932,73055 +28370,76882,61426 +22764,13902,27200 +33466,86634,31484 +2718,34655,3121 +6023,24865,53410 +93323,10190,57772 +32330,15594,13477 +49312,17228,41281 +21877,91050,59462 +48846,11887,72822 +37447,31409,18610 +95783,85748,69990 +94373,19405,11454 +80730,70669,10625 +24172,43154,59979 +21703,56053,20922 +20222,66595,85311 +68481,70322,48921 +9065,2236,41537 +9377,38599,7372 +21895,50927,84329 +51609,27515,95361 +38811,26946,28294 +75106,85688,20791 +92937,60882,11234 +47410,41463,85132 +26584,72789,92658 +69394,89707,32485 +95020,43157,2651 +45731,76679,24315 +46864,77174,69760 +15505,97575,86295 +92440,6574,38063 +44080,75270,87838 +32117,36177,22643 +99785,34285,25000 +13958,27376,44298 +12375,88026,97319 +86146,46005,67719 +37649,977,2723 +76297,95000,43700 +78848,62019,87317 +18838,31722,80718 +60770,54844,69309 +17340,58731,16307 +38583,44904,38383 \ No newline at end of file