From 568f6f135011c4f42224a6e968701f5a283126b4 Mon Sep 17 00:00:00 2001 From: Bob Date: Mon, 8 Dec 2025 21:15:39 +0100 Subject: [PATCH] day08 --- bob/day08/day08-p1.py | 106 +++++ bob/day08/day08-p2.py | 107 +++++ bob/day08/example_input | 20 + bob/day08/input | 1000 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 1233 insertions(+) create mode 100644 bob/day08/day08-p1.py create mode 100644 bob/day08/day08-p2.py create mode 100644 bob/day08/example_input create mode 100644 bob/day08/input diff --git a/bob/day08/day08-p1.py b/bob/day08/day08-p1.py new file mode 100644 index 0000000..f62a3c1 --- /dev/null +++ b/bob/day08/day08-p1.py @@ -0,0 +1,106 @@ +import itertools +import math + +def get_circuit(a,circuits): + if len(circuits) == 0: + return None + + for circ in circuits: + for pos in circ: + if pos == a: + return circ + return None + +def add_circuit(a,b,circuits): + circ_a = get_circuit(a,circuits) + circ_b = get_circuit(b,circuits) + + if circ_a is None and circ_b is None: + circuits.append([a,b]) + return True + + if circ_a is None and not circ_b is None: + circ_b.append(a) + return True + + if not circ_a is None and circ_b is None: + circ_a.append(b) + return True + + if not circ_a is None and not circ_b is None: + if circ_a == circ_b: + # Already part of same circuit + return True + else: + # Merge circuits... + # Copy a to b + for circ in circ_a: + circ_b.append(circ) + + # Empty a + for _ in range(0, len(circ_a)): + circ_a.pop() + return True + +def get_lowest_distance(junctions_distance): + a,b,_ = junctions_distance.pop() + return a,b + +def distance(a,b): + # https://en.wikipedia.org/wiki/Euclidean_distance + return math.sqrt( pow((a[0]-b[0]),2) + pow((a[1]-b[1]),2) + pow((a[2]-b[2]),2) ) + +def read_input(filename): + space = [] + for line in open(filename).read().splitlines(): + x,y,z = line.split(",") + space.append((int(x), int(y), int(z))) + return space + + +filename = "day08/example_input" # 40 +max_connections = 10 + +filename = "day08/input" # 115885 +max_connections = 1000 + +junctions = read_input(filename) + +# build list of (unique) combinations +junctions_comb = itertools.combinations(junctions,2) + +print("Calculate distances") +# Add distance to the list +junctions_distance = [] +for a,b in junctions_comb: + dist = distance(a,b) + junctions_distance.append((a,b,dist)) + +# Sort distance list, reversed so "pop()" will get/remove the shortest distance +def jd_sort(junc_dist): + return junc_dist[2] +junctions_distance.sort(key=jd_sort, reverse=True) + + + +circuits = [] +connections = 0 + +print("Make connections") +while True: + a,b = get_lowest_distance(junctions_distance) + + if add_circuit(a,b,circuits): + connections += 1 + + if connections == max_connections: + break + + if connections % 100 == 0: + print(f"Connections: {connections}") + +sizes = [len(i) for i in circuits] +sizes.sort(reverse=True) + + +print(f"3 largest circuits multiplied: {sizes[0]*sizes[1]*sizes[2]}") diff --git a/bob/day08/day08-p2.py b/bob/day08/day08-p2.py new file mode 100644 index 0000000..ec71b28 --- /dev/null +++ b/bob/day08/day08-p2.py @@ -0,0 +1,107 @@ +import itertools +import math + +def single_circuit(circuits, num_junctions): + for circuit in circuits: + if len(circuit) == num_junctions: + return True + return False + + +def get_circuit(a,circuits): + if len(circuits) == 0: + return None + + for circ in circuits: + for pos in circ: + if pos == a: + return circ + return None + +def add_circuit(a,b,circuits): + circ_a = get_circuit(a,circuits) + circ_b = get_circuit(b,circuits) + + if circ_a is None and circ_b is None: + circuits.append([a,b]) + return True + + if circ_a is None and not circ_b is None: + circ_b.append(a) + return True + + if not circ_a is None and circ_b is None: + circ_a.append(b) + return True + + if not circ_a is None and not circ_b is None: + if circ_a == circ_b: + # Already part of same circuit + return True + else: + # Merge circuits... + # Copy a to b + for circ in circ_a: + circ_b.append(circ) + + # Empty a + for _ in range(0, len(circ_a)): + circ_a.pop() + return True + +def get_lowest_distance(junctions_distance, infinite=99999): + a,b,_ = junctions_distance.pop() + return a,b + + +def distance(a,b): + # https://en.wikipedia.org/wiki/Euclidean_distance + return math.sqrt( pow((a[0]-b[0]),2) + pow((a[1]-b[1]),2) + pow((a[2]-b[2]),2) ) + +def read_input(filename): + space = [] + for line in open(filename).read().splitlines(): + x,y,z = line.split(",") + space.append((int(x), int(y), int(z))) + return space + + +# filename = "day08/example_input" # 25272 +filename = "day08/input" # 274150525 + +junctions = read_input(filename) + +# build list of (unique) combinations +junctions_comb = itertools.combinations(junctions,2) + +print("Calculate distances") +# Add distance to the list +junctions_distance = [] +for a,b in junctions_comb: + dist = distance(a,b) + junctions_distance.append((a,b,dist)) + +# Sort distance list, reversed as then "pop()" will get/remove the shortest distance +def jd_sort(junc_dist): + return junc_dist[2] +junctions_distance.sort(key=jd_sort, reverse=True) + + +circuits = [] +connections = 0 +dist = 0 +print("Make connections") +while True: + a,b = get_lowest_distance(junctions_distance) + + if add_circuit(a,b,circuits): + connections += 1 + + if single_circuit(circuits, len(junctions)): + dist = a[0] * b[0] + break + + if connections % 1000 == 0: + print(f"Connections: {connections}") + +print(f"Distance junction boxes: {dist}") diff --git a/bob/day08/example_input b/bob/day08/example_input new file mode 100644 index 0000000..e98a3b6 --- /dev/null +++ b/bob/day08/example_input @@ -0,0 +1,20 @@ +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/bob/day08/input b/bob/day08/input new file mode 100644 index 0000000..d74fb9a --- /dev/null +++ b/bob/day08/input @@ -0,0 +1,1000 @@ +47571,21070,9804 +26014,44873,23440 +21436,20018,6336 +86942,19462,93901 +49070,89301,48095 +35616,79795,87684 +46059,52360,21723 +815,59491,16082 +36997,51041,15723 +48823,39495,7825 +51753,4208,6052 +54168,42076,29285 +20754,25389,97173 +59500,82003,9597 +50009,95623,78606 +16875,26902,85926 +94936,11855,20459 +29649,39961,5964 +75013,82858,46898 +41418,34129,78316 +53899,91211,30110 +23881,28275,96163 +57427,65737,22498 +61932,26265,53341 +66932,22206,44871 +21918,87742,17383 +6367,78929,46730 +45731,28754,95626 +99274,72570,7847 +30049,55955,65389 +29114,49335,69452 +93501,53260,46406 +90751,50824,44853 +17876,94582,42247 +76370,58963,43822 +7098,80312,49281 +84161,27963,78109 +26305,54455,7015 +20715,36202,93555 +53829,86237,93455 +82380,63810,94552 +89368,99839,21849 +87497,47331,94985 +15162,51381,770 +95313,7542,11728 +53233,25116,16166 +39381,93503,98765 +44807,73664,70213 +64971,93696,88679 +57739,609,67547 +20052,59602,10551 +97480,93610,27749 +64800,39151,87207 +20649,60628,94244 +39906,63714,7798 +63509,47318,9956 +4450,90472,41313 +63768,62774,11958 +10544,27294,3096 +36575,34168,46729 +15982,19416,54354 +79358,80933,60698 +28189,14011,71324 +99923,71592,65177 +95588,3920,27088 +20412,59125,6914 +64359,62132,47563 +80252,13527,57773 +55512,16749,62123 +29926,23937,64662 +39571,82975,19998 +45426,9316,91331 +44477,20201,75955 +2271,90540,17806 +50227,93207,93092 +11411,51340,57663 +97754,96323,37130 +98986,72665,15300 +56185,47869,72908 +41878,1363,14758 +17185,33485,94935 +56299,27990,23411 +56452,5027,31447 +29500,44948,51617 +80321,14706,47434 +11412,5698,63814 +20894,72581,79096 +16983,21117,47752 +70243,75746,49340 +8209,66696,24132 +68345,8500,13353 +66274,29803,36754 +73740,3744,81183 +93764,84714,68608 +95758,92527,3581 +1595,75495,24023 +46264,54482,91932 +88312,9307,89820 +52494,90230,12337 +13233,52655,32914 +4316,69743,11655 +60985,41967,58045 +148,48360,76118 +9168,81733,47376 +7509,59153,81292 +9286,92278,40935 +6689,8277,65867 +77303,26813,98281 +97274,74605,8928 +64111,1255,72466 +47709,95260,99519 +76389,53573,75496 +91718,92565,80380 +96354,38927,53770 +54341,34652,75607 +4883,54110,88424 +7132,40749,94152 +12116,58680,18862 +82365,88948,64824 +17238,81714,99059 +7750,63178,72867 +97873,63681,11835 +29111,86352,22560 +22221,10434,97955 +33953,31092,14817 +25563,63991,7561 +91343,83184,43020 +30333,91579,24170 +43793,38500,78262 +91079,65108,91185 +9241,37569,48652 +32460,746,63944 +27812,99211,48865 +33771,79759,60765 +47927,66642,17212 +21386,6415,23249 +37948,8261,87194 +43984,30104,67605 +21734,65992,73999 +86262,95474,9534 +59214,83053,21772 +90581,53940,87498 +8241,19458,85268 +58944,35703,85983 +59911,38963,75410 +99952,28406,68011 +44037,55766,58629 +4033,63003,64904 +80639,28101,43807 +56561,21523,8735 +54799,81572,967 +72303,47576,77866 +73283,18699,89146 +16438,5180,57306 +85275,58630,78887 +73122,12677,20791 +23579,72966,44771 +77605,53061,89981 +44904,96197,31499 +25606,69589,99058 +90709,92773,25475 +13674,79937,55109 +30367,3176,72024 +73198,59340,47212 +66561,11630,359 +81408,91758,96519 +84170,22261,90978 +61563,94745,30976 +98606,76722,59057 +72801,32395,14427 +78479,39897,7663 +97123,13861,46867 +72658,62349,8080 +14154,66620,28768 +4557,99680,63147 +2146,49024,61993 +14654,3716,91456 +66004,116,66251 +2322,16850,71882 +33229,94451,8875 +29805,23309,81315 +50029,36838,21929 +82209,590,52032 +21747,2975,97024 +49535,18114,20733 +3618,28912,40469 +96636,97224,98582 +57756,40775,84060 +34034,79567,87609 +25778,12133,5076 +83296,8348,96603 +70987,83036,78511 +74585,66133,47503 +45046,4953,14146 +73068,56031,53588 +53556,96933,17970 +34304,44725,61677 +81552,5207,10274 +75676,34240,54779 +26235,58317,78470 +49044,58067,48983 +41488,57392,13388 +94175,28337,69652 +22770,10382,52096 +8129,73930,74894 +27652,5751,2110 +90856,9187,3182 +71313,45401,62757 +34566,84469,64732 +59016,52067,4406 +21917,26138,45029 +97263,71628,37478 +59537,72454,41174 +4539,20633,62147 +64138,74645,12101 +83582,87586,79578 +20401,60949,46910 +70557,448,53317 +85318,94930,54753 +70992,94321,97929 +25168,46035,84153 +60606,1952,11388 +21193,43019,39906 +96635,25530,84545 +374,52915,33797 +4568,83473,12379 +48299,44457,82027 +83266,6879,32563 +40391,95543,82502 +38721,83550,86705 +16498,3509,47973 +46405,83872,84187 +82310,92631,8186 +96936,37313,2996 +81772,60821,57329 +71034,95270,59124 +55347,49238,48950 +38397,67390,4520 +63155,14251,65728 +76221,52730,58846 +72010,46346,1935 +10706,67290,12780 +14173,89327,94873 +81847,1935,70812 +662,50973,84260 +5755,43879,46625 +24597,45916,35947 +79693,44291,14249 +57132,19072,4563 +65615,47356,5321 +51448,68876,39994 +97074,47951,9852 +84316,82211,79901 +98008,94765,89135 +66447,25627,42794 +97780,52819,8822 +21586,98713,27242 +56338,25461,57018 +21307,99640,86841 +57220,4743,51006 +54794,89524,22565 +73269,13665,65911 +91607,73120,69334 +58479,41460,10925 +48014,39814,63837 +34417,90040,85444 +7194,36015,93413 +7868,97501,37561 +91080,17487,79945 +69784,87574,12615 +3132,23539,47343 +53840,21079,56691 +14928,70069,77892 +84516,59600,18173 +94950,16419,10539 +95786,75343,20956 +77478,9485,20339 +61532,12904,76720 +57961,93013,50244 +89776,75175,5051 +65822,70073,28510 +40531,35936,69847 +59523,70583,52831 +40175,32972,23371 +90438,35912,38646 +9190,71603,2301 +89914,64437,39884 +19231,20532,21738 +20291,28387,29046 +61401,12081,48512 +70367,83299,72938 +83775,15129,69950 +65702,40589,28248 +67004,66912,6380 +92528,51355,9539 +78714,75787,68757 +11715,10091,10377 +20186,48397,99790 +92315,41383,55587 +92772,78647,24218 +27061,61947,52007 +56991,14015,55863 +61421,37878,69228 +92103,39528,29743 +72506,97359,35180 +53018,24457,19496 +3710,47703,24976 +22916,27182,6379 +42884,85646,26272 +82100,98605,30769 +1821,91791,94846 +83792,55739,65047 +46214,65415,81282 +66988,40521,21596 +45494,52681,57995 +2212,70960,79823 +33321,19720,39301 +19669,55897,20490 +9730,6780,10006 +55897,67619,63154 +85947,46340,80569 +17833,80348,39175 +53730,29488,16550 +97827,97934,56043 +79680,52251,79901 +15440,84026,45232 +34900,47716,88735 +31175,30778,37122 +653,6797,65269 +39498,56985,61145 +13639,4464,54937 +36506,73704,92509 +87986,54749,53371 +86831,89128,24572 +30369,50407,58265 +44688,73717,6276 +34669,23598,35669 +38200,44889,66909 +5804,48890,22794 +33804,15381,41749 +31083,32018,9933 +41887,64511,29207 +86779,64028,44144 +82940,57300,4258 +11837,83350,22362 +53566,55374,15050 +94542,42256,70529 +57924,9304,52928 +37874,91291,5924 +27458,33422,50557 +40032,20648,34773 +19329,95504,64776 +43060,59066,72108 +38735,37842,70331 +34756,30542,72483 +8645,64076,29678 +14422,9744,59856 +36690,33825,5724 +28010,71813,49198 +79220,57332,56033 +85797,27675,39216 +20001,86620,15888 +46676,25791,13225 +31040,8856,9734 +69598,20191,54257 +31748,94398,62648 +56233,47124,70615 +86810,74097,63829 +55402,87748,14049 +64651,2504,94470 +27971,25371,34425 +7225,62165,53127 +77869,9942,69819 +72986,43646,21958 +13212,64016,58505 +99141,27615,61691 +21479,16593,66867 +13086,99145,53945 +39562,70835,13715 +77232,8696,6263 +43493,37183,20948 +90373,8567,28002 +54144,51686,74721 +20266,92932,54157 +77664,69955,28639 +18112,57499,37970 +15268,17169,42698 +32468,30659,49133 +34070,13151,91140 +87010,95748,2013 +46275,45143,53050 +10494,54292,36448 +50234,76183,70819 +80526,16331,62884 +6032,43454,88976 +1797,46200,32248 +26840,76571,42950 +27949,6053,95123 +40843,57826,7905 +62034,4876,80293 +9905,9552,83286 +75639,43573,56302 +77035,5633,66609 +11388,10209,68548 +58492,99441,377 +40265,14242,48084 +4968,53030,15790 +3046,79682,31531 +71977,44774,83696 +30341,61916,1749 +30350,11026,837 +44840,32588,63636 +88505,10183,71612 +32489,46938,18115 +12210,5579,13040 +17211,56521,90358 +12646,96369,22505 +34639,2499,36923 +59882,65605,45102 +77122,1567,96902 +32974,16234,91201 +52678,75753,35067 +25434,92606,39762 +93863,32581,75702 +55269,32940,90736 +31196,79296,2411 +32139,5425,88534 +42087,6540,70085 +47680,12084,40442 +82708,7433,75986 +70100,43677,91632 +75563,23981,42045 +62069,50198,16274 +91806,43797,19221 +94941,43234,34002 +93098,75133,93017 +48110,24269,17706 +90038,11689,72942 +70544,38775,33456 +2341,41646,83120 +80223,44823,83163 +23490,69775,90768 +27119,88592,42351 +49695,70167,79602 +19734,54281,76912 +3279,5818,16862 +81007,57021,81242 +81876,58981,63066 +43321,31203,33556 +31841,1330,10307 +7949,71731,55618 +26908,18268,30532 +30285,88907,22633 +24152,45805,60561 +79302,72702,76457 +24447,34767,60079 +43353,98225,81031 +68030,16759,9191 +10141,12438,160 +23463,5953,51134 +15644,40590,57515 +7584,17705,36278 +45766,1900,6245 +86762,62967,34062 +54341,66546,41201 +78187,91320,38408 +37740,21065,4798 +69745,98152,82847 +58165,40210,7664 +57808,97649,77099 +59203,67064,43833 +46238,42254,26635 +42951,88292,67386 +36255,71840,99352 +86904,78475,63880 +54625,41741,21814 +51844,76869,66151 +25449,1275,32406 +53191,93381,13297 +5047,32201,16966 +78811,90884,23148 +7102,60280,11362 +74647,66893,26489 +59242,8613,34456 +28920,62015,38343 +27722,65056,73880 +84968,18892,48779 +33795,33661,27615 +95964,60359,73002 +47608,24948,90615 +83227,61252,77096 +19549,49439,77542 +38483,9359,99684 +78665,15778,25976 +13515,34388,9467 +27094,30181,47555 +77474,87811,56069 +11371,79142,62321 +35008,74101,91095 +62614,92190,30576 +45410,96553,90163 +54834,29978,70659 +73603,93724,29451 +89408,16626,97888 +61381,98593,92817 +41656,60287,40274 +42710,95785,86735 +40148,27444,62101 +38839,2726,156 +53884,39879,77757 +50182,33953,83335 +4024,39407,78713 +71201,69212,47612 +72814,63909,21368 +25091,8651,21835 +66834,49263,47463 +5794,19003,38757 +25736,83973,63167 +67326,69732,77723 +55857,72729,21881 +50893,26818,86959 +21374,85006,32064 +46247,5364,83390 +64814,27275,70599 +55152,54557,13088 +24181,58143,23758 +13931,48317,38065 +66846,58449,51695 +17876,21013,65658 +99456,42478,6183 +2146,27003,13244 +79344,99111,98338 +95675,22459,34986 +67511,11973,23633 +99088,18678,44464 +17574,15741,74468 +52103,86699,84509 +78626,11978,41367 +47184,33523,33023 +62769,24411,39138 +87083,10852,31442 +71856,70552,41731 +22827,20002,50990 +3114,77254,71048 +90444,55101,96536 +12030,39124,9112 +94730,50534,98462 +65481,15521,6185 +95416,25512,66803 +30379,44564,35308 +62359,30836,858 +4783,30816,54071 +93777,17819,93849 +86860,48488,79960 +38540,2096,26954 +23403,55836,96988 +92987,29804,88423 +55332,20896,27899 +10502,40551,24563 +52516,39967,73612 +99221,5902,84311 +27715,4077,71754 +26862,39283,2862 +91760,34382,78320 +49179,7364,82913 +78199,2221,93708 +61153,9597,79648 +5073,82720,11302 +61822,12463,66129 +4315,14262,34326 +77730,8771,72616 +44595,64796,26351 +61178,31519,77512 +15747,87199,83147 +16945,74163,59198 +87054,85958,93672 +28777,63191,29253 +14354,8173,49003 +52594,74550,96034 +38416,18312,17255 +73466,43537,40330 +56769,52928,16350 +96188,24420,61532 +92933,42686,80599 +74947,24413,55186 +13898,41541,45573 +5903,9073,21540 +31417,19227,24337 +5684,18176,63010 +40224,43390,75761 +98842,81166,44187 +60881,32949,51308 +53788,17800,23102 +634,7754,1148 +10482,71646,44004 +7876,40227,62958 +34829,29713,27785 +68001,35821,96923 +12827,8515,47275 +54025,36049,42296 +50915,34964,4004 +23993,52708,56057 +14674,10455,38981 +31864,82531,59991 +47438,24692,70707 +92477,3072,40434 +43571,76861,58998 +80011,43036,49467 +78019,90390,53249 +53615,57975,45625 +1702,24160,35037 +35805,90333,23305 +37707,79539,11741 +2905,31052,78344 +76311,17530,7380 +44106,13061,19110 +94819,93976,56394 +12610,69169,81221 +53121,60839,43572 +21724,18243,70406 +53261,60232,97572 +28546,53689,69683 +12694,57936,65968 +82882,35505,12859 +66837,55685,71303 +11623,65623,62165 +90587,26879,99017 +27843,99230,84416 +18509,40083,47141 +32637,34159,3665 +58801,76994,2826 +73093,1048,47133 +26146,25503,49013 +7857,22552,93407 +49429,99842,3603 +54820,29343,21395 +64989,49335,40131 +40602,70291,18076 +32379,67852,85939 +20612,72997,59130 +14587,34614,74057 +72896,28351,44524 +85587,53315,64171 +36796,65835,69821 +83564,79081,95423 +56047,43325,37106 +74816,99621,54441 +70201,80468,22097 +58402,85776,84389 +4333,87626,83957 +95489,48004,48147 +37140,48179,76671 +12264,22325,77463 +70235,26337,43215 +46901,79727,68156 +23161,20519,23792 +59846,24712,14913 +88611,29379,9015 +39654,50052,26737 +56287,59461,66472 +88871,52617,18550 +79113,24225,16655 +10981,25969,55227 +8510,67023,66310 +32241,81237,37402 +13931,70565,9485 +79335,45054,82935 +49671,91517,34724 +92078,48871,72204 +56332,34226,55585 +24562,71347,66647 +82680,47080,28954 +96352,1933,91494 +72322,67853,89273 +65082,14009,14444 +1530,93847,47174 +57820,18394,44986 +22059,67185,79553 +54557,53617,82442 +46335,94730,72199 +1962,12383,95849 +65542,7955,29447 +65144,38401,90221 +35508,96042,82430 +59163,14334,70945 +70460,53300,52123 +34023,78099,25284 +19821,58522,74364 +78588,13592,91207 +89449,57983,53125 +12631,60064,18667 +23148,69953,14387 +98065,60673,84824 +3390,41925,34979 +4661,22151,32161 +42596,95326,23249 +82168,82291,87225 +78988,98863,79186 +6992,45268,16858 +69975,2042,57466 +34943,27480,95116 +8672,88889,10200 +67403,28635,76571 +46559,40091,74483 +32881,7955,1367 +51198,10001,96743 +64130,56646,87474 +80325,76483,89384 +57046,60012,101 +15077,16678,7927 +3728,94382,39608 +15964,69261,26463 +83716,84460,70427 +37320,30284,25700 +46415,18770,63022 +53399,28785,13774 +74314,24151,28583 +57140,15836,8623 +71056,64222,65027 +81218,79768,87696 +22604,98045,70064 +58915,75139,69740 +56457,97339,81568 +52208,10114,12451 +74661,63103,4369 +66959,4518,62250 +49440,99642,8009 +1807,65914,78391 +27868,87246,62097 +28780,60481,87911 +27347,46484,10107 +79586,4525,90940 +17376,89075,64772 +86798,5050,78881 +40056,44781,7813 +59740,19006,96758 +84464,39836,33204 +15036,29703,16044 +40650,23464,33328 +27586,94834,79957 +72347,33172,98871 +14928,56291,35185 +19170,98017,88766 +69095,39961,3157 +14921,52255,4091 +77408,21152,57035 +15144,47264,61817 +41243,87263,23238 +49725,50503,70957 +72742,49967,58307 +62427,6785,17789 +49372,10110,79026 +73493,89522,62465 +88764,83921,83214 +85906,51672,39417 +59951,8945,94301 +66027,79004,89099 +7721,79152,13019 +31354,81139,71349 +94292,22483,23272 +83134,50745,53565 +64572,51568,54087 +35576,40786,82339 +71536,29869,62731 +82761,89931,9438 +30326,6389,41591 +88438,4028,46263 +43045,39921,83709 +19525,88390,6197 +94923,78355,59908 +66648,53480,72957 +10316,95770,80697 +64258,78272,34499 +9602,14890,55144 +32620,44416,74996 +74381,54598,75987 +68025,31961,88390 +80103,84533,18000 +52588,26228,18397 +85996,65143,44905 +58927,60922,53393 +63291,59103,83939 +44399,42038,79279 +66706,53739,81533 +97850,28487,74736 +11409,45929,74659 +76366,10982,68153 +45192,22217,8001 +12567,79477,83157 +99016,29496,15868 +99441,48371,39632 +13125,33481,67353 +14041,98765,696 +57667,56475,65880 +73596,42904,3828 +40033,2119,49966 +47248,88788,35167 +12448,95861,56639 +52634,66539,44159 +78326,13152,13323 +84603,97333,88368 +25207,75486,41433 +48253,93053,34986 +43208,54954,83110 +76374,5075,87221 +91156,42808,47615 +19242,85722,11737 +49409,18079,11095 +2164,15802,99410 +51637,23686,84491 +8799,33160,78581 +45410,37478,85256 +48724,80570,70207 +5337,32514,2350 +25825,34176,15584 +23758,37015,71970 +67949,45676,17850 +69889,22576,9602 +49666,25941,51764 +82425,36914,85367 +71935,5950,24079 +99034,60825,28744 +47463,71130,7873 +65916,77191,67546 +52639,64934,27059 +25286,43802,54243 +21765,82892,46133 +83714,55468,26432 +8234,25559,71966 +69309,17480,92126 +86058,99047,87034 +70891,95150,42356 +9190,82148,93273 +88920,38914,57393 +62428,31091,34420 +34320,75262,48894 +71159,98023,37547 +16134,23614,55280 +69673,12353,1603 +49368,97222,43249 +84405,95532,66840 +37839,3437,48182 +22393,71847,80523 +93911,50316,60776 +43028,3938,60629 +27619,3021,9514 +77399,27707,8919 +57263,83406,68290 +22053,30972,96730 +53940,36034,57408 +41239,99148,63259 +57045,78769,10005 +58374,63114,26580 +50821,77483,49296 +82959,42165,29481 +96273,24985,2153 +49241,7520,19081 +50757,94282,77801 +38752,75862,20439 +26794,19821,90257 +60011,47770,15012 +99084,34347,79964 +69079,11566,60069 +75589,80080,46358 +2731,39043,87971 +81258,93577,27120 +98782,3083,31148 +21067,10434,97759 +17633,90336,18283 +42288,35286,35492 +97043,85410,6868 +15744,47437,31523 +39150,72388,66272 +29176,54342,60288 +17332,51184,31921 +98546,6055,85092 +25437,71642,66423 +10807,74499,22047 +65389,64539,92105 +13522,94556,95640 +88993,44952,15621 +44035,68710,12057 +34173,62229,34852 +48462,14122,96488 +42631,98310,94112 +28817,73863,45216 +99285,74724,42942 +32630,41705,74013 +52914,89386,95045 +3556,18655,22825 +2197,65519,88154 +56784,5609,52806 +4401,90031,71062 +89583,17186,94403 +36613,70447,35887 +93664,54419,41441 +96846,91670,87650 +52315,40033,99990 +75452,67163,63407 +44113,22893,12942 +65470,67631,10701 +18129,39210,64248 +41498,571,37885 +27692,49007,90764 +65234,44201,37549 +98101,76266,62596 +89892,60472,76556 +44543,72496,99023 +37655,77646,27591 +61180,40551,94668 +45105,30201,36649 +1620,31850,73921 +58609,32384,11624 +22892,66188,2899 +62972,33611,70756 +98837,98135,5464 +66354,96306,20181 +90856,2587,42432 +43583,72337,78299 +8702,45615,61530 +65039,22806,64843 +20120,41245,2180 +30525,30948,54581 +98879,57234,78496 +41667,25886,83297 +55523,71875,31645 +92425,62653,32116 +98157,24050,87488 +15418,7193,9628 +24897,83358,13207 +77311,85920,40203 +93757,20098,21627 +23158,29915,65544 +96552,55054,86728 +63301,54813,44068 +9332,69606,9495 +74920,57406,77815 +39925,15384,17409 +76192,66369,4419 +7579,48260,96351 +59656,30550,75934 +67737,67440,2241 +49823,35541,55277 +49428,19266,20196 +39982,30538,15958 +97713,42981,17162 +44913,5665,26625 +68888,94239,48645 +20780,45996,92313 +95933,17224,21793 +63415,21295,8067 +55039,38657,95442 +75331,70835,14103 +54143,10508,68882 +43973,68618,68679 +70531,12478,99652 +35890,82580,8365 +82110,41720,78025 +47005,86989,64248 +82238,51772,65545 +63597,41735,96550 +27146,93957,15649 +49435,67306,14087 +85150,43746,62836 +69372,82749,49615 +60686,63853,9791 +25514,76765,56150 +40131,55748,98207 +74245,17028,5951 +30561,94489,18399 +70284,31612,20113 +40691,63157,12305 +98572,87740,48052 +4913,93685,72983 +4390,29821,52250 +27517,82896,47853 +95298,50022,36325 +15917,50554,71325 +2439,13008,41417 +63228,43487,2803 +27655,25186,81653 +1750,16142,28036 +795,65209,42189 +43047,74977,86760 +9260,32662,4268 +89945,53054,67979 +66023,27710,75801 +34051,71757,96026 +74547,84567,40114 +55156,40862,19705 +88279,57251,52701 +97760,82882,52581 +71440,82452,62216 +12542,33903,6417 +68098,28185,12970 +19268,67975,24536 +83973,44435,89151 +96679,29711,69197 +17807,80459,30036 +82541,92402,2312