diff --git a/aoc25.cabal b/aoc25.cabal index 2f071f2..9114f1e 100644 --- a/aoc25.cabal +++ b/aoc25.cabal @@ -67,7 +67,7 @@ executable aoc25 -- other-extensions: -- Other library packages from which modules are imported. - build-depends: base ^>=4.18.2.1, + build-depends: base ^>=4.20.2, containers >= 0.6.7 -- Directories containing source files. @@ -82,3 +82,12 @@ executable day7 build-depends: base ^>=4.20.2, containers >= 0.6.7 hs-source-dirs: app + default-language: GHC2021 + +executable day8 + import: warnings + main-is: Day8.hs + build-depends: base ^>=4.20.2, + containers >= 0.6.7 + hs-source-dirs: app + default-language: GHC2021 diff --git a/app/Day8.hi b/app/Day8.hi new file mode 100644 index 0000000..67c2bf7 Binary files /dev/null and b/app/Day8.hi differ diff --git a/app/Day8.hs b/app/Day8.hs new file mode 100644 index 0000000..81c51e1 --- /dev/null +++ b/app/Day8.hs @@ -0,0 +1,91 @@ +module Main where + +import Data.Char (readLitChar, showLitChar) +import Data.Function (on) +import Data.Ix (inRange) +import Data.List (foldl', nub, sort, sortBy) +import Data.Map (Map) +import qualified Data.Map as M +import Data.Set (Set) +import qualified Data.Set as S +import Debug.Trace +import System.Environment (getArgs) + +main :: IO () +main = do + input <- readFile . head =<< getArgs + putStrLn $ unwords ["Part 1:", show $ part1 1000 input] + putStrLn $ unwords ["Part 2:", show $ part2 input] + +newtype Pos = Pos {unPos :: (Int, Int, Int)} + deriving (Eq, Ord) + +instance Show Pos where + showsPrec _ (Pos (x, y, z)) = showParen True $ shows x . showLitChar ',' . shows y . showLitChar ',' . shows z + +instance Read Pos where + readsPrec _ s = do + (x, ',' : rest) <- reads s + (y, ',' : rest') <- reads rest + (z, rest'') <- reads rest' + pure (Pos (x, y, z), rest'') + +dist :: Pos -> Pos -> Double +dist (Pos (x1, y1, z1)) (Pos (x2, y2, z2)) = sum . map ((^ 2) . fromIntegral) $ [x2 - x1, y2 - y1, z2 - z1] + +-- | Original idea: Combine all positions to a cartesian product and +-- calculate the distances between them. Pick the n shortest distances +-- and connect them. +-- +-- Problem: The problem space explodes and grinds to a halt. +part1 :: Int -> String -> Int +part1 n = go [] 0 . nub . sortBy (compare `on` fst) . traceShowId . (\ps -> combine ps ps) . map (read @Pos) . lines + where + combine :: [Pos] -> [Pos] -> [(Double, (Pos, Pos))] + combine [] _ = [] + combine (a : as) bs = trace ("combine: " ++ show (length as) ++ " positions left...") $ map (\a' -> (dist a a', (a, a'))) as ++ combine as bs + + go :: [(Set Pos, Int)] -> Int -> [(Double, (Pos, Pos))] -> Int + go circuits _ [] = product . take 3 . sortBy invCompare $ map (S.size . fst) circuits + go circuits connections ((d, (a, b)) : rest) + | connections <= n = trace ("part1: " ++ show (n - connections) ++ " junctions left...") $ go (connect circuits a b (round d)) (connections + 1) rest + | otherwise = product . take 3 . sortBy invCompare $ map (S.size . fst) circuits + + connect :: [(Set Pos, Int)] -> Pos -> Pos -> Int -> [(Set Pos, Int)] + connect [] a b d = [(S.fromList [a, b], d)] + connect ((c, l) : circuits) a b d + | S.member a c && S.member b c = (c, l) : circuits + | S.member a c = (S.insert b c, l + d) : circuits + | S.member b c = (S.insert a c, l + d) : circuits + | otherwise = (c, l) : connect circuits a b d + + invCompare :: (Ord a) => a -> a -> Ordering + invCompare a b = b `compare` a + +part2 :: String -> Int +part2 = error "Not implemented" + +testInput :: String +testInput = + unlines + [ "162,817,812", + "57,618,57", + "906,360,560", + "592,479,940", + "352,342,300", + "466,668,158", + "542,29,236", + "431,825,988", + "739,650,466", + "52,470,668", + "216,146,977", + "819,987,18", + "117,168,530", + "805,96,715", + "346,949,466", + "970,615,88", + "941,993,340", + "862,61,35", + "984,92,344", + "425,690,689" + ] diff --git a/app/Day8.o b/app/Day8.o new file mode 100644 index 0000000..e5cdd19 Binary files /dev/null and b/app/Day8.o differ diff --git a/input/day8.txt b/input/day8.txt new file mode 100644 index 0000000..2e587cf --- /dev/null +++ b/input/day8.txt @@ -0,0 +1,1000 @@ +83023,97914,59845 +95221,6604,47587 +15200,13848,533 +91106,47235,95124 +91396,58746,56994 +72070,33359,10785 +13733,43410,23707 +84853,78378,68689 +32718,46986,56596 +96972,42634,87849 +75321,85448,3806 +85644,27374,92127 +42658,85123,55506 +95419,51177,82050 +93183,89429,64168 +20111,58516,78238 +84347,94979,18981 +85228,50028,61792 +37408,58558,92215 +78135,48786,84378 +91444,6758,47814 +72353,96943,99110 +29125,99746,96294 +82591,76381,50973 +40594,57719,48923 +68457,13532,54551 +41623,1214,41146 +5329,66685,52253 +38441,18886,17137 +51198,78425,24757 +57954,19943,5193 +25571,59698,26460 +35041,16302,43934 +93554,45583,10885 +72830,18399,22577 +49658,55564,76672 +55761,35924,277 +8145,69129,83753 +46464,73362,66428 +21044,23155,12880 +30656,26927,92819 +49127,56156,38158 +29611,28784,15694 +8446,8675,81587 +82421,72930,36434 +55032,80661,58980 +60996,97834,30356 +97137,68358,96661 +61250,52463,90497 +97887,95388,97794 +42671,60596,54375 +44662,31390,19230 +22670,94138,64282 +78786,54649,54831 +76084,6111,23513 +36141,9518,15148 +79576,75966,49301 +9096,77126,18955 +65720,38873,88418 +66473,40148,55289 +4466,66547,98094 +75685,11147,71479 +90411,97753,70313 +34746,35259,80756 +55909,45524,52667 +73795,29539,58999 +643,12216,56158 +71,12740,76121 +83991,25426,68085 +22625,51838,79017 +17653,68339,57575 +75011,86938,27225 +73011,73334,62395 +56785,28814,60336 +4459,52452,8794 +21966,66681,64410 +82554,61793,11432 +15928,99706,10305 +16319,39233,55476 +35971,50755,40035 +87292,69839,52900 +69828,53645,12739 +58064,55186,91326 +2959,70223,73383 +14635,79537,48547 +6016,61955,5471 +16200,68036,71562 +91483,24715,33986 +71805,36020,4935 +40550,51905,24094 +56157,73283,71388 +86389,15276,72777 +10049,41822,74235 +63361,30062,39584 +89330,95990,49284 +90041,32152,51147 +24345,63613,47251 +791,36312,30720 +4010,28661,15585 +78074,3095,42165 +49312,32745,35219 +27671,79745,47901 +599,44177,29250 +96722,11018,72047 +13536,4055,87466 +26862,23317,41027 +79892,70552,43134 +64497,12037,49066 +19287,990,54327 +18111,4450,30397 +57219,85320,70045 +96321,12566,61949 +47149,62361,23123 +32232,98647,3246 +41996,80504,38622 +99339,32036,70498 +56042,27237,97252 +17642,8588,68927 +57229,92291,75905 +9911,94307,12471 +80246,51936,70519 +40612,34072,19307 +25553,65907,79644 +6375,62624,97129 +73620,66653,60323 +89172,1394,26421 +15015,98109,935 +64684,90267,86515 +35892,10464,92344 +54200,92912,92669 +89679,34702,30898 +39001,80455,99198 +80994,61551,87120 +35229,68596,17914 +16568,95318,93777 +78916,86597,31661 +88234,25589,45446 +78081,46748,98007 +34046,4193,73932 +13371,88196,32622 +64990,97591,98053 +76215,57477,47998 +28767,55034,12766 +80197,22480,93615 +56689,51960,7344 +67303,82415,95110 +13066,66494,81388 +93114,59516,22466 +64331,89460,40123 +95123,91027,98452 +55429,57786,79557 +65856,75041,37248 +80746,18552,74090 +28112,7107,78239 +29624,12178,5891 +49043,94592,78960 +79172,28955,34157 +78632,28974,23322 +98203,99482,49152 +39547,72632,67955 +87616,26784,53122 +29139,59779,55356 +91699,2023,37144 +47017,97148,78726 +51629,9727,13675 +76078,17364,66657 +42600,66359,55888 +17480,13345,40751 +29450,26042,2510 +62038,9516,89292 +63316,74573,85897 +31328,77479,80680 +15781,58688,13309 +98650,14219,60385 +48519,62750,48659 +91608,45047,48465 +53333,23580,92775 +34111,65669,4854 +36335,84293,80527 +69469,76269,42260 +50494,54162,75357 +91395,46417,86448 +80596,24814,54060 +65295,89470,93825 +75529,40579,88982 +77921,40764,72220 +91448,81643,10902 +7079,91202,57223 +75152,95331,581 +30279,42541,98395 +66535,62047,3556 +39610,66038,72948 +61621,65308,69300 +24716,95103,17739 +5548,72258,24988 +49139,72448,51160 +6989,6405,73705 +25533,97824,93002 +21277,36478,29976 +25357,91132,29886 +66274,77847,11542 +9636,51894,88277 +98234,27696,76351 +35158,34074,45211 +49212,12123,45416 +50898,60661,2299 +21457,16882,79783 +87281,95415,83384 +60234,28773,91412 +57314,3452,4799 +92808,64794,35232 +12101,6250,32179 +1470,8832,50734 +66135,85294,40526 +58054,32178,523 +92646,15554,77904 +68019,46451,45261 +36344,32645,84650 +96432,64756,12320 +29257,27831,2244 +78440,77331,88696 +57296,72372,89097 +35464,94343,47746 +36437,77375,71167 +57391,24280,56110 +70456,49233,90307 +80459,66390,2646 +84006,50489,7999 +88454,40040,80174 +85766,17954,35536 +22431,66761,12431 +49956,94984,40177 +61287,250,24537 +52926,88129,74877 +65033,40725,37191 +36600,93997,70277 +62037,55742,59394 +12937,12395,99641 +94377,18859,98526 +68395,64761,66602 +74285,86567,85731 +28790,35822,41656 +82117,36347,31838 +85627,57640,97476 +30117,70309,40411 +52663,73164,81824 +37596,32209,80752 +36202,34452,50861 +49001,36939,30593 +86891,42347,16406 +7984,76299,47269 +53728,54892,21628 +33405,1202,32285 +98259,60245,54549 +13624,6943,45145 +66665,75675,1930 +22969,53199,82218 +40618,39163,46679 +19963,88260,19149 +75415,97620,44413 +98031,27474,56095 +74789,9161,88259 +6820,60419,59057 +44091,83231,57076 +33628,31552,69448 +72333,18138,92689 +42918,59983,85663 +5511,12003,35640 +38053,85167,43219 +80815,24986,57938 +99739,12507,33474 +63325,66435,2204 +27960,31592,26344 +72135,33627,58632 +8405,31610,29001 +77760,21194,35387 +42765,30621,67434 +6492,10882,15610 +39378,13677,28454 +42063,86532,89365 +44099,18543,30576 +16461,68201,32259 +53882,65452,58807 +38572,79476,79077 +76034,31164,83419 +47027,56721,37638 +72652,93268,12399 +16509,29848,83287 +34954,80832,74615 +6400,53090,53708 +40616,72241,98934 +60630,89224,92210 +55937,74036,11131 +72064,87336,63567 +41744,85887,17561 +40423,88861,13318 +18389,61139,41496 +19271,56771,22178 +67043,20591,93983 +5300,75446,88271 +96023,50077,19302 +62369,65678,35560 +38961,33807,37861 +51414,52797,61296 +74973,59475,31605 +20079,49359,71043 +99409,13531,29202 +51242,33019,49539 +74343,68830,21949 +85504,63879,24124 +26772,62589,90511 +46597,85574,79140 +72586,71630,58524 +31891,16574,98317 +33359,82499,56197 +39610,98941,76086 +53148,96207,9295 +51777,54763,86878 +31465,85806,10369 +22285,92123,2760 +77336,15489,440 +76033,35059,30115 +38949,25045,37767 +3454,35982,53196 +769,74648,88913 +70761,37747,52488 +18625,12825,65126 +79423,44079,10993 +12341,71251,58927 +64150,30665,19861 +27194,97743,67771 +50630,45103,11740 +67678,89004,14157 +17068,96419,51722 +55167,11054,70600 +77745,52771,69811 +49784,19504,39169 +54764,23077,45457 +8768,70474,86581 +55547,51829,39755 +41086,78904,25106 +11786,90214,31709 +56162,10884,48347 +37408,41181,2859 +67524,3358,24701 +76919,13759,60470 +94876,52182,99012 +85491,36455,46528 +46686,70396,22251 +33177,9677,88029 +4982,37705,2700 +36949,77207,39705 +69151,67567,75771 +72779,99680,83629 +16604,11663,9985 +42059,99589,82918 +82252,5948,35054 +86653,73740,32181 +22532,10998,1055 +40858,88066,12774 +55985,38536,33223 +19775,92665,73522 +12163,39631,23317 +37380,72940,83500 +55790,92654,36287 +90010,18224,79238 +45397,65402,19883 +8939,80085,2945 +50909,4547,59505 +60938,93419,32337 +51499,30491,1102 +48354,630,17252 +60819,63591,88688 +65087,17444,92194 +53703,23007,69361 +92826,39386,72187 +7233,35348,95004 +99521,10436,13858 +34610,3688,55066 +39,28492,14137 +53076,56691,93001 +71698,95384,55496 +67308,79765,31959 +12649,87125,69336 +90967,44366,51366 +797,26924,76647 +13685,35458,37078 +21594,47933,74812 +96560,59424,35863 +73650,19290,70714 +3665,62059,44503 +28777,7947,52272 +1937,45360,3770 +90132,3831,23437 +49835,31998,13679 +94876,46836,70065 +22333,45735,12259 +90060,26851,72047 +62263,61806,19368 +79966,62230,36244 +98076,88252,81360 +42022,63691,2212 +22708,44719,49036 +76781,22876,95221 +90823,44321,20420 +57930,18330,48549 +69029,70389,38443 +49905,31474,53964 +8079,76138,89114 +19648,28719,13355 +65637,7275,82173 +21865,14287,62877 +67677,24288,97067 +14072,47021,33478 +79367,2829,63365 +49290,31778,98368 +60200,67151,25350 +48916,86997,70408 +305,62394,67590 +61550,99717,94728 +14223,65580,77769 +95981,65362,79093 +784,34215,87276 +60024,62949,13541 +19630,50887,86968 +94574,33016,99610 +92983,44345,53607 +10392,12260,10076 +56713,97298,30987 +62123,29824,77496 +55055,60341,6939 +81974,40112,3326 +13207,59499,79183 +49080,73021,35357 +49487,89942,99789 +68381,3070,4810 +33276,37114,24996 +42359,35375,14799 +55909,43807,19569 +50944,80993,40525 +28603,28387,68085 +47346,1776,75069 +7826,67550,83739 +71246,77232,70209 +24305,49469,44413 +48883,39865,56895 +30991,15543,46085 +59126,95195,82322 +5254,60504,32865 +82300,45298,97681 +76341,39398,18352 +7895,8541,15855 +50600,59097,77445 +7008,50117,60567 +66605,69779,51719 +6268,41783,29718 +86355,71922,89816 +17381,24033,25037 +750,7769,93295 +75903,20899,35251 +74087,9610,46226 +3553,74772,83404 +310,17925,76045 +41127,88410,10248 +75212,4127,72488 +72666,22613,14994 +26017,40268,69040 +81915,1821,86481 +58267,44514,50803 +98324,4181,30213 +29868,53634,97472 +18520,18986,14161 +34972,80854,61390 +1279,56024,18856 +48423,23379,88173 +14276,88239,53235 +39830,9979,42285 +1306,54593,22075 +47453,27530,42113 +97353,97502,74450 +88493,63921,62664 +71993,97442,13974 +29389,56875,27043 +19968,36426,4030 +28944,35020,32630 +84682,12927,7193 +45135,35628,3674 +39536,3206,50806 +14629,23524,37924 +32725,80382,34969 +65844,74444,90961 +7124,56246,79242 +93744,35517,87256 +74717,39097,49879 +71820,90427,69622 +38464,6640,56511 +98639,83915,87188 +47579,7056,74001 +81879,57965,58220 +67878,55346,6779 +94401,13529,32351 +53715,25638,35751 +52749,67987,49393 +9035,57404,55722 +77753,35145,83425 +77624,85914,1844 +23359,4433,2132 +74266,1046,77742 +13863,82902,41252 +96980,78861,17205 +10471,7940,72727 +8729,2577,56316 +28042,15691,50669 +12359,84377,77247 +923,5355,66076 +42150,66811,3442 +86034,45964,43668 +73653,72236,93668 +50964,86533,70514 +31280,49803,30598 +65880,69374,67993 +55024,17581,62205 +37445,8747,34251 +84793,86132,24366 +47584,74349,27777 +53692,30971,75900 +116,85170,66583 +20775,30914,12704 +86129,62848,68868 +20489,732,45144 +33561,53430,30313 +88796,89442,50468 +36970,9589,78402 +86024,36946,22780 +94235,38760,96905 +94784,10742,47367 +19378,71279,92982 +69238,94387,87592 +40431,49477,80139 +33507,96070,14452 +45030,95222,62554 +43641,69391,32528 +40202,21418,12 +68410,59024,469 +76416,37569,6163 +10654,76283,67820 +10289,6985,72725 +70396,90328,55732 +83995,77241,18432 +519,91399,14274 +54941,84967,82739 +479,31926,34751 +64679,33045,38396 +89792,60017,60481 +68240,92213,36234 +68654,56325,63007 +85093,51665,50677 +71373,13814,10896 +52484,16414,4791 +4706,30626,98018 +30473,49287,64819 +69175,64297,71985 +49295,97893,38079 +23709,56524,55810 +55664,31456,4054 +20325,65548,87826 +24536,75865,19437 +36818,23641,21067 +36036,87271,38608 +96046,50754,12757 +23823,96664,52277 +33195,82975,20038 +90218,5362,10457 +12349,27314,21046 +69560,61212,12013 +49947,20465,80780 +59058,4262,66825 +89102,56955,11140 +42897,29976,21444 +83088,41526,71767 +96596,83397,42020 +45255,72374,9830 +42041,3081,55933 +14079,12305,82329 +59208,43570,61360 +86497,66962,25698 +31200,26420,36271 +9783,5473,44982 +73062,69203,39761 +15801,95640,33236 +58564,40561,55039 +35895,73455,57218 +52426,16185,80314 +16370,3694,92048 +85923,35342,18834 +28124,92554,19053 +20909,77343,56960 +58755,47466,58196 +12624,20048,91488 +25862,52671,90928 +23675,56871,69012 +30552,31354,26773 +10543,86215,39164 +59606,91198,96832 +84249,40666,55059 +88113,84667,41938 +92,70112,8676 +27127,10552,49861 +58165,2830,38055 +68362,69581,19269 +67114,5900,96964 +11077,68241,86127 +25178,1759,72706 +56819,6870,78183 +41787,62896,78285 +10300,69982,30107 +79767,40378,78417 +90547,43700,72573 +69914,44344,62127 +42277,31074,26054 +68380,53341,55931 +35465,61224,15213 +8445,76885,29586 +49675,42099,275 +53373,34345,10584 +43456,27626,6245 +66748,74609,88963 +20409,92293,35475 +84496,85113,89034 +91385,72852,24344 +6565,27207,57455 +29695,70021,57208 +35418,95981,96037 +80419,77431,8296 +62213,45328,99571 +91652,94365,43181 +26202,9122,1843 +27399,92062,19752 +71262,27706,73378 +85656,96756,56871 +43611,58194,5170 +81070,4505,19014 +29433,72758,71719 +3183,95681,88918 +84953,72144,49387 +14147,42457,24808 +34192,94133,20792 +59730,12216,22993 +63069,11749,35742 +70014,97446,47123 +33478,65592,65972 +84706,97616,60604 +99727,21883,64846 +21570,6495,46185 +90959,89608,42649 +52253,67192,73309 +11663,12847,10542 +43726,71517,58358 +50714,78469,85425 +45928,4777,56235 +21849,73929,75733 +23525,96867,55026 +83179,52340,64955 +69074,59446,37287 +52295,1091,51688 +69013,3411,37872 +13718,89873,79525 +65556,57604,29006 +22114,28538,46899 +14868,33266,84280 +35413,31197,45294 +8420,98681,70190 +64152,67324,32288 +17587,97553,11282 +41188,96687,80868 +38611,57869,91043 +17931,10132,71749 +42526,74662,33079 +46704,87265,29961 +95265,43250,96175 +68679,83223,43727 +49468,27841,14258 +26467,11091,696 +11761,23270,14947 +99083,48312,75450 +11197,47188,22638 +30289,98920,67370 +57660,71825,37809 +49063,48724,88866 +52979,5880,27663 +56772,35876,4999 +71284,57489,82951 +40954,86770,20483 +80226,56980,73647 +23242,34177,38738 +47726,8078,10989 +4491,29522,17746 +90920,43291,44150 +18202,81423,48700 +54992,6524,91072 +13700,96098,15981 +21097,86099,72479 +50465,27287,89815 +40240,55523,82688 +42216,44816,63135 +91365,1533,2939 +8822,71661,60338 +38056,90928,19953 +24861,77879,27689 +54611,37650,62783 +24366,16517,79583 +93763,23287,4313 +31717,25392,8365 +57096,57909,22157 +33822,67330,43978 +93188,56864,35442 +71270,80764,65162 +33489,23689,40157 +92933,66962,3313 +33193,31394,45617 +25737,93829,29326 +50255,61125,72692 +92763,12647,98773 +47963,76427,80050 +23874,4417,86983 +79515,76346,40555 +14633,16017,98269 +8423,76528,63252 +92986,22255,96418 +38162,3685,73923 +89345,86226,49686 +26211,44246,13314 +24738,8729,97977 +38647,39763,612 +1480,15808,43950 +6576,98544,386 +62543,1858,49992 +98900,8653,35265 +67381,17400,36094 +43384,57792,3705 +3473,46059,91640 +94041,87219,65188 +90940,79257,78643 +17518,46673,65476 +18003,27583,10270 +12812,83401,24815 +95295,6269,27966 +35692,54516,50585 +68665,30708,15884 +48113,26780,65613 +91761,71525,61340 +94085,66592,92042 +43556,72163,82821 +99898,8267,53787 +32594,5080,65414 +34015,24785,19464 +384,3754,16260 +61590,19329,71986 +47118,73492,35999 +90898,86149,10163 +28869,4742,79171 +85440,32884,30175 +49141,1341,38156 +61237,42779,83331 +461,99383,69452 +12912,85405,13499 +69718,26333,62107 +87910,64238,8818 +83886,71564,20071 +95398,75920,78382 +77077,20139,34287 +38760,69414,76351 +1189,73134,67807 +42218,49173,59961 +40309,33397,97379 +38407,60061,652 +17619,8066,76667 +43839,22626,28376 +56266,50705,76047 +44664,98390,40615 +19502,68375,63974 +28016,88299,37285 +22106,77103,79564 +90558,41932,51174 +342,41977,41136 +20975,49410,99662 +57028,58281,90545 +8013,96692,1013 +69355,17825,13478 +16149,40220,68895 +23482,91557,67958 +40362,77700,35124 +53860,27923,63237 +63423,93212,88806 +59314,29853,70940 +94718,81683,76690 +19938,99061,18448 +46805,58667,1418 +75142,15789,80495 +34650,34425,98553 +46045,97766,35374 +34100,32056,41359 +27216,10575,94958 +67399,13367,43554 +54226,63477,40400 +43050,53029,40588 +46937,68763,18207 +61894,30849,12405 +43394,54298,4846 +15261,59517,73560 +73650,58444,32318 +24476,71720,33717 +54176,11858,72749 +72354,39196,46231 +2755,37728,19101 +44974,21934,60070 +588,38731,59040 +46984,30640,12068 +90953,54658,18365 +13398,22421,68352 +43922,62940,82364 +58652,6162,58990 +67336,46229,99 +35908,16137,92676 +97989,5178,36374 +10536,28560,20707 +51080,50256,98263 +47429,26128,25784 +86891,88507,44846 +40412,97882,32557 +9508,87556,38851 +11586,94029,9034 +26712,87221,20065 +18030,18575,10215 +88570,2033,1938 +37139,45967,46131 +91685,27166,11164 +36189,59954,90318 +55026,62279,27540 +23236,91742,12360 +92326,79315,73223 +73956,93367,5316 +43590,93171,57580 +42477,71996,63123 +9167,50421,89831 +10104,46552,33796 +82827,80545,26198 +72099,25983,91053 +85480,78510,39511 +52092,38532,97203 +38446,51889,22749 +70237,93807,18114 +698,96080,86079 +2406,6362,70053 +24517,37469,97768 +51920,10925,42821 +54575,83553,21911 +37089,61560,67654 +81127,97946,99753 +64645,99468,97280 +25975,26691,43928 +6723,47693,52455 +74894,34920,69095 +16734,63455,59403 +97702,93013,369 +91656,92751,53741 +33698,88280,60927 +23772,12309,76385 +4306,74602,54902 +36732,81329,83428 +74587,19917,33640 +66099,1609,76591 +14536,54293,74665 +9952,91694,8954 +55596,59893,26710 +28284,54401,41327 +42561,53293,83387 +1224,10290,79291 +17216,14578,95918 +78671,58020,99476 +46797,4708,12163 +6341,61189,90721 +84129,67016,65945 +50378,32965,77761 +18654,49529,10662 +16169,1995,7502 +45519,60511,36802 +18540,16556,91029 +35053,25375,71497 +79904,15112,53789 +38936,50959,36924 +99268,94144,84912 +13260,26387,36516 +11689,75049,74318 +16467,89353,97320 +20699,80399,31881 +98726,16625,34506 +52088,3135,92728 +19338,7159,33989 +95729,73145,91870 +7897,65794,26492 +80171,78015,11669 +69577,98939,66899 +23732,1178,89754 +69677,81161,33384 +3082,87075,25224 +28094,51455,5763 +75174,83361,8725 +95204,87493,80197 +55563,49319,11499 +98165,58733,69989 +90838,17266,75030 +84507,49949,27363 +77531,65822,93960 +48907,69311,2697 +29328,41291,30973 +55208,78011,221 +16330,52257,40488 +62278,83825,3601 +50259,84040,18515 +35424,25623,12071 +44844,30386,41877 +27539,58292,89569 +30330,30718,64076 +2777,28613,22964 +23370,47384,12058 +87948,72330,82881 +30695,26215,46745 +79299,29233,81853 +70530,20352,56747 +31687,16664,59102 +80719,30694,46834 +17848,96625,67936 +55049,65405,70562 +48025,82265,1531 +74107,97562,53217 +97133,42988,7579 +36975,69171,7729 +17222,92877,15138 +22218,78893,24249 +75853,5497,19355 +4670,45074,26026 +25413,98030,5230 +29465,5539,41896 +15948,34192,74123 +40780,40161,96096 +72031,8930,29492 +10003,1999,71593 +46843,40695,94037 +95735,79070,37964 +54383,74315,68696 +50026,88636,89234 +41870,62743,95648 +93485,97246,81113 +7548,28590,16645 +48746,11712,30737 +78964,52290,7003 +84249,434,55735 +87480,72277,41319 +74331,26535,82939 +69064,4085,57150 +50409,53211,33770 +10229,16014,40262 +19597,63355,28884 +16340,37444,88939 +97245,44337,12525 +15764,80801,22267 +61645,61054,25086 +55811,50150,41949 +28436,54597,29745 +20930,6157,92448 +58602,94693,71574 +77900,97538,27991 +11228,12330,915 +14365,76536,37910 +69589,70976,5512 +16164,94261,47181 +61699,21471,61621 +35168,61878,80038 +50964,50198,86687 +92309,38900,32638 +18392,10814,30065 +86189,71761,38507 +22086,67572,63910 +52186,16375,57290 +6385,95201,90635 +62621,82831,32540 +65518,13705,29365 +78600,82507,54244 +69730,59420,56714 +93284,51599,56924 +87551,86640,502 +13636,74907,79321 +19532,79563,63829 +2412,9364,76916 +31683,53831,50068 +90894,98059,93115 +15187,78749,27319 +24431,20407,246 +46299,71487,44965