input = """116 1259 1045 679 1334 157 277 1217 218 641 1089 136 247 1195 239 834
269 1751 732 3016 260 6440 5773 4677 306 230 6928 7182 231 2942 2738 3617
644 128 89 361 530 97 35 604 535 297 599 121 567 106 114 480
105 408 120 363 430 102 137 283 123 258 19 101 181 477 463 279
873 116 840 105 285 238 540 22 117 125 699 953 920 106 113 259
3695 161 186 2188 3611 2802 157 2154 3394 145 2725 1327 3741 2493 3607 4041
140 1401 110 119 112 1586 125 937 1469 1015 879 1798 122 1151 100 926
2401 191 219 607 267 2362 932 2283 889 2567 2171 2409 1078 2247 2441 245
928 1142 957 1155 922 1039 452 285 467 305 506 221 281 59 667 232
3882 1698 170 5796 2557 173 1228 4630 174 3508 5629 4395 180 5100 2814 2247
396 311 223 227 340 313 355 469 229 162 107 76 363 132 453 161
627 1331 1143 1572 966 388 198 2068 201 239 176 1805 1506 1890 1980 1887
3390 5336 1730 4072 5342 216 3823 85 5408 5774 247 5308 232 256 5214 787
176 1694 1787 1586 3798 4243 157 4224 3603 2121 3733 851 2493 4136 148 153
2432 4030 3397 4032 3952 2727 157 3284 3450 3229 4169 3471 4255 155 127 186
919 615 335 816 138 97 881 790 855 89 451 789 423 108 95 116"""
s = 0
for line in input.split('\n'):
row_numbers = sorted([int(val) for val in line.split()])
for ind, divisor in enumerate(row_numbers):
for divised in row_numbers[ind+1:]:
if divised % divisor == 0:
print(divisor, divised)
s += divised // divisor
break
s
239 1195 230 6440 106 530 102 408 105 840 157 3611 122 1586 219 2409 232 928 170 5100 132 396 198 1980 232 5336 176 4224 155 4030 95 855
226
row_numbers
[89, 95, 97, 108, 116, 138, 335, 423, 451, 615, 789, 790, 816, 855, 881, 919]
1195 % 239
0
New approach and insight: start at the corners every time.
input = 325489
def generate_spiral(R):
"""Generates the spiral up to radius R.
Returns a list of complex numbers (x, y coordinates)."""
spiral = [(0+0j)]
for r in range(R+1):
corner = r - 1j * r
side_len = 2 * r
current_pos = corner
for side, direction in zip(range(4), [1j, -1, -1j, 1]):
for step in range(side_len):
current_pos += direction
spiral.append(current_pos)
return spiral
Let's plot this.
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
fig, axes = plt.subplots(figsize=(15, 5), ncols=3)
for ax, r in zip(axes.ravel(), [2, 3, 4]):
spiral = generate_spiral(r)
ax.plot(np.real(spiral), np.imag(spiral), '-o')
Ok, let's now generate the spiral and check when it's bigger than the input.
spiral = generate_spiral(400)
spiral[1]
(1+0j)
spiral[input-1]
(-267-285j)
abs(spiral[input-1].real) + abs(spiral[input-1].imag)
552.0
New approach: build the sequence incrementally and add the numbers above and below by looking them up.
spiral = generate_spiral(400)
values = {(0 + 0j) : 1}
for next_coord in spiral[1:]:
neighbours = 0
for delta in [1+0j, 1+1j, 1-1j, 0+1j, 0-1j, -1+0j, -1-1j, -1+1j]:
if next_coord + delta in values:
neighbours += values[next_coord + delta]
values[next_coord] = neighbours
values
{0j: 1, (1+0j): 1, (1+1j): 2, 1j: 4, (-1+1j): 5, (-1+0j): 10, (-1-1j): 11, -1j: 23, (1-1j): 25, (2-1j): 26, (2+0j): 54, (2+1j): 57, (2+2j): 59, (1+2j): 122, 2j: 133, (-1+2j): 142, (-2+2j): 147, (-2+1j): 304, (-2+0j): 330, (-2-1j): 351, (-2-2j): 362, (-1-2j): 747, -2j: 806, (1-2j): 880, (2-2j): 931, (3-2j): 957, (3-1j): 1968, (3+0j): 2105, (3+1j): 2275, (3+2j): 2391, (3+3j): 2450, (2+3j): 5022, (1+3j): 5336, 3j: 5733, (-1+3j): 6155, (-2+3j): 6444, (-3+3j): 6591, (-3+2j): 13486, (-3+1j): 14267, (-3+0j): 15252, (-3-1j): 16295, (-3-2j): 17008, (-3-3j): 17370, (-2-3j): 35487, (-1-3j): 37402, -3j: 39835, (1-3j): 42452, (2-3j): 45220, (3-3j): 47108, (4-3j): 48065, (4-2j): 98098, (4-1j): 103128, (4+0j): 109476, (4+1j): 116247, (4+2j): 123363, (4+3j): 128204, (4+4j): 130654, (3+4j): 266330, (2+4j): 279138, (1+4j): 295229, 4j: 312453, (-1+4j): 330785, (-2+4j): 349975, (-3+4j): 363010, (-4+4j): 369601, (-4+3j): 752688, (-4+2j): 787032, (-4+1j): 830037, (-4+0j): 875851, (-4-1j): 924406, (-4-2j): 975079, (-4-3j): 1009457, (-4-4j): 1026827, (-3-4j): 2089141, (-2-4j): 2179400, (-1-4j): 2292124, -4j: 2411813, (1-4j): 2539320, (2-4j): 2674100, (3-4j): 2814493, (4-4j): 2909666, (5-4j): 2957731, (5-3j): 6013560, (5-2j): 6262851, (5-1j): 6573553, (5+0j): 6902404, (5+1j): 7251490, (5+2j): 7619304, (5+3j): 8001525, (5+4j): 8260383, (5+5j): 8391037, (4+5j): 17048404, (3+5j): 17724526, (2+5j): 18565223, (1+5j): 19452043, 5j: 20390510, (-1+5j): 21383723, (-2+5j): 22427493, (-3+5j): 23510079, (-4+5j): 24242690, (-5+5j): 24612291, (-5+4j): 49977270, (-5+3j): 51886591, (-5+2j): 54256348, (-5+1j): 56749268, (-5+0j): 59379562, (-5-1j): 62154898, (-5-2j): 65063840, (-5-3j): 68075203, (-5-4j): 70111487, (-5-5j): 71138314, (-4-5j): 144365769, (-3-5j): 149661137, (-2-5j): 156221802, (-1-5j): 163105139, -5j: 170348396, (1-5j): 177973629, (2-5j): 186001542, (3-5j): 194399801, (4-5j): 203081691, (5-5j): 208949088, (6-5j): 211906819, (6-4j): 429827198, (6-3j): 445061340, (6-2j): 463911304, (6-1j): 483650112, (6+0j): 504377559, (6+1j): 526150757, (6+2j): 549023076, (6+3j): 572904288, (6+4j): 597557233, (6+5j): 614208653, (6+6j): 622599690, (5+6j): 1262247784, (4+6j): 1305411751, (3+6j): 1358749904, (2+6j): 1414491696, (1+6j): 1472899472, 6j: 1534125748, (-1+6j): 1598327474, (-2+6j): 1665648769, (-3+6j): 1735829031, (-4+6j): 1808194091, (-5+6j): 1857049072, (-6+6j): 1881661363, (-6+5j): 3813299996, (-6+4j): 3939776148, (-6+3j): 4095896357, (-6+2j): 4258788564, (-6+1j): 4429173742, (-6+0j): 4607457470, (-6-1j): 4794055770, (-6-2j): 4989349711, (-6-3j): 5192600241, (-6-4j): 5401925245, (-6-5j): 5543175046, (-6-6j): 5614313360, (-5-6j): 11372992489, (-4-6j): 11738157709, (-3-6j): 12188406417, (-2-6j): 12657394495, (-1-6j): 13147069832, -6j: 13658496996, (1-6j): 14192820563, (2-6j): 14751195535, (3-6j): 15334678569, (4-6j): 15941109149, (5-6j): 16565046747, (6-6j): 16985902654, (7-6j): 17197809473, (7-5j): 34825446144, (7-4j): 35912241501, (7-3j): 37251041343, (7-2j): 38643664099, (7-1j): 40095603074, (7+0j): 41609781502, (7+1j): 43189332894, (7+2j): 44837411015, (7+3j): 46556895612, (7+4j): 48341565786, (7+5j): 50175931362, (7+6j): 51412739705, (7+7j): 52035339395, (6+7j): 105332926574, (5+7j): 108523185799, (4+7j): 112449595238, (3+7j): 116528248589, (2+7j): 120774389661, (1+7j): 125195906577, 7j: 129801259271, (-1+7j): 134599361262, (-2+7j): 139599166536, (-3+7j): 144808838427, (-4+7j): 150209910621, (-5+7j): 155756815147, (-6+7j): 159495525582, (-7+7j): 161377186945, (-7+6j): 326567673886, (-7+5j): 336202411393, (-7+4j): 348051383894, (-7+3j): 360345844963, (-7+2j): 373129703626, (-7+1j): 386425123402, (-7+0j): 400255810384, (-7-1j): 414646673335, (-7-2j): 429622679057, (-7-3j): 445206554254, (-7-4j): 461344254786, (-7-5j): 477903668437, (-7-6j): 489061156843, (-7-7j): 494675470203, (-6-7j): 1000723932895, (-5-7j): 1029449396453, (-4-7j): 1064748953068, (-3-7j): 1101332911689, (-2-7j): 1139325782433, (-1-7j): 1178788743756, -7j: 1219787131147, (1-7j): 1262389644241, (2-7j): 1306668338908, (3-7j): 1352695322161, (4-7j): 1400536156626, (5-7j): 1450028215176, (6-7j): 1500776974050, (7-7j): 1534960686177, (8-7j): 1552158495650, (8-6j): 3139142437444, (8-5j): 3227077934562, (8-4j): 3335066663550, (8-3j): 3446873610493, (8-2j): 3562863919009, (8-1j): 3683212967684, (8+0j): 3808107685154, (8+1j): 3937744210565, (8+2j): 4072327850086, (8+3j): 4212063722499, (8+4j): 4357138115259, (8+5j): 4507068352112, (8+6j): 4660692362574, (8+7j): 4764140441674, (8+8j): 4816175781069, (7+8j): 9737684488712, (6+8j): 10003575940480, (5+8j): 10329881648091, (4+8j): 10667382677717, (3+8j): 11017134911205, (2+8j): 11379633456032, (1+8j): 11755405011541, 8j: 12145001538651, (-1+8j): 12549001325720, (-2+8j): 12968008691945, (-3+8j): 13402626607529, (-4+8j): 13853402171724, (-5+8j): 14318864423074, (-6+8j): 14795493950748, (-7+8j): 15116366663275, (-8+8j): 15277743850220, (-8+7j): 30882055374326, (-8+6j): 31706202646550, (-8+5j): 32717024115723, (-8+4j): 33761623755973, (-8+3j): 34843150688456, (-8+2j): 35963051360447, (-8+1j): 37122861997859, (-8+0j): 38324189604980, (-8-1j): 39568714767756, (-8-2j): 40858190674402, (-8-3j): 42194364162499, (-8-4j): 43578818639976, (-8-5j): 45007127720042, (-8-6j): 46468768015525, (-8-7j): 47452504642571, (-8-8j): 47947180112774, (-7-8j): 96895084158443, (-6-8j): 99419932957994, (-5-8j): 102514855240410, (-4-8j): 105710386501620, (-3-8j): 109015794148810, (-2-8j): 112435241586688, (-1-8j): 115973143244024, -8j: 119634108763168, (1-8j): 123422953877464, (2-8j): 127344707182774, (3-8j): 131404607000469, (4-8j): 135607866694432, (5-8j): 139959208040284, (6-8j): 144444973915687, (7-8j): 149032870071564, (8-8j): 152119989253391, (9-8j): 153672147749041, (9-7j): 310483437935526, (9-6j): 318401816803182, (9-5j): 328103103838738, (9-4j): 338112122047343, (9-3j): 348456926240395, (9-2j): 359149876737581, (9-1j): 370204061309428, (9+0j): 381633126172831, (9+1j): 393451305918636, (9+2j): 405673441701786, (9+3j): 418314971389630, (9+4j): 431391241579500, (9+5j): 444916140409445, (9+6j): 458848041565805, (9+7j): 473089050151122, (9+8j): 482669366373865, (9+9j): 487485542154934, (8+9j): 984708768798580, (7+9j): 1009266205008841, (6+9j): 1039337347086124, (5+9j): 1070338187352412, (4+9j): 1102352586589425, (3+9j): 1135416737634379, (2+9j): 1169568911013157, (1+9j): 1204848951019381, 9j: 1241298358895293, (-1+9j): 1278960370451609, (-2+9j): 1317880007076803, (-3+9j): 1358104044548001, (-4+9j): 1399678937750328, (-5+9j): 1442646698295874, (-6+9j): 1486877423332971, (-7+9j): 1532067027797214, (-8+9j): 1562461138310709, (-9+9j): 1577738882160929, (-9+8j): 3186359819696184, (-9+7j): 3264225821567280, (-9+6j): 3359531103703879, (-9+5j): 3457715954222125, (-9+4j): 3559037752782277, (-9+3j): 3663605578587153, (-9+2j): 3771534642633915, (-9+1j): 3882944745597201, (-9+0j): 3997960511967796, (-9-1j): 4116711607014934, (-9-2j): 4239332876619591, (-9-3j): 4365964250096468, (-9-4j): 4496744560618985, (-9-5j): 4631799274994528, (-9-6j): 4770727675372666, (-9-7j): 4912596128143536, (-9-8j): 5007995812898881, (-9-9j): 5055942993011655, (-8-9j): 10208781070181753, (-7-9j): 10453043267410964, (-6-9j): 10751873139767811, (-5-9j): 11059518314467835, (-4-9j): 11376759350358675, (-3-9j): 11703920772595793, (-2-9j): 12041344951575315, (-1-9j): 12389387445169195, -9j: 12748417651053851, (1-9j): 13118819420877257, (2-9j): 13500991688937964, (3-9j): 13895348869815639, (4-9j): 14302320551550824, (5-9j): 14722332600201227, (6-9j): 15155769652228762, (7-9j): 15601367485469404, (8-9j): 16056192492543400, (9-9j): 16361984629545832, (10-9j): 16515656777294873, (10-8j): 33341796992525272, (10-7j): 34124354395013021, (10-6j): 35081342753590467, (10-5j): 36065959796279730, (10-4j): 37080631948406206, (10-3j): 38126350873431525, (10-2j): 39204161737718929, (10-1j): 40315148801938769, (10+0j): 41460437295339664, (10+1j): 42641195169132917, (10+2j): 43858634888142969, (10+3j): 45114014542813885, (10+4j): 46408636896192460, (10+5j): 47743792319747210, (10+6j): 49120645551873582, (10+7j): 50535252009964374, (10+8j): 51978495968644295, (10+9j): 52948650877173094, (10+10j): 53436136419328028, (9+10j): 107856981607454636, (8+10j): 110338442123416991, (7+10j): 113371754444310536, (6+10j): 116490696183757913, (5+10j): 119702724304785874, (4+10j): 123010831816362090, (3+10j): 126418170051599051, (2+10j): 129928004651265968, (1+10j): 133543720872193799, 10j: 137268828552560082, (-1+10j): 141106967288983787, (-2+10j): 145061911711060200, (-3+10j): 149137574700435332, (-4+10j): 153338004381029535, (-5+10j): 157667207440408708, (-6+10j): 162128798589834767, (-7+10j): 166710204179275661, (-8+10j): 171382471227544513, (-9+10j): 174522671248016151, (-10+10j): 176100410130177080, (-10+9j): 355387180080050344, (-10+8j): 363415504603474737, (-10+7j): 373225621348442080, (-10+6j): 383307094227935364, (-10+5j): 393683379038643645, (-10+4j): 404363738324235200, (-10+3j): 415357916298238545, (-10+2j): 426676001265056814, (-10+1j): 438328441165255726, (-10+0j): 450326058029835657, (-10-1j): 462680063025437978, (-10-2j): 475402071759168971, (-10-3j): 488504113446504015, (-10-4j): 501998621532213996, (-10-5j): 515897893043200175, (-10-6j): 530213016121710905, (-10-7j): 544904335738125988, (-10-8j): 559880870672180060, (-10-9j): 569944809478090596, (-10-10j): 575000752471102251, (-9-10j): 1160210286012386255, (-8-10j): 1185928053342990627, (-7-10j): 1217341750820351155, (-6-10j): 1249606185541997765, (-5-10j): 1282794336346592086, (-4-10j): 1316934534784014389, (-3-10j): 1352056559858544172, (-2-10j): 1388191213027884475, (-1-10j): 1425370363075682836, -10j: 1463626987592783139, (1-10j): 1502995216353652211, (2-10j): 1543510376333283071, (3-10j): 1585209037443587498, (4-10j): 1628129039465155188, (5-10j): 1672309462269136001, (6-10j): 1717788932007035394, (7-10j): 1764602261637276960, (8-10j): 1812621806244835596, (9-10j): 1861555640144219701, (10-10j): 1894433281551060406, (11-10j): 1910948938328355279, (11-9j): 3855239673649235830, (11-8j): 3939221481814068996, (11-7j): 4041768975955197756, (11-6j): 4147040632900080974, (11-5j): 4255268567398357377, (11-4j): 4366541510016474838, (11-3j): 4480952654576031498, (11-2j): 4598598315989120721, (11-1j): 4719578063824118083, (11+0j): 4843994845090529433, (11+1j): 4971955112443144983, (11+2j): 5103568957043234754, (11+3j): 5238950243370384068, (11+4j): 5378216687129137623, (11+5j): 5521489761896950875, (11+6j): 5668889451778536041, (11+7j): 5820523845309018292, (11+8j): 5975986244164800055, (11+9j): 6134349527429945472, (11+10j): 6240734314726446594, (11+11j): 6294170451145774622, (10+11j): 12696197883899003880, (9+11j): 12967829444049203535, (8+11j): 13299396622224385698, (7+11j): 13639597514975871138, (6+11j): 13989162689908725461, (5+11j): 14348366942213631338, (4+11j): 14717498668386378353, (3+11j): 15096855674905605462, (2+11j): 15486745570480664280, (1+11j): 15887486124556684129, 11j: 16299405641270421797, (-1+11j): 16722843348823025866, (-2+11j): 17158149802523505185, (-3+11j): 17605687293316030252, (-4+11j): 18065830079837903827, (-5+11j): 18538964090249176837, (-6+11j): 19025470300458695973, (-7+11j): 19525691774455350914, (-8+11j): 20038307121110187239, (-9+11j): 20560312673715924983, (-10+11j): 20910935755094118214, (-11+11j): 21087036165224295294, (-11+10j): 42529459510528640932, (-11+9j): 43424362605342343093, (-11+8j): 44516390911374310254, (-11+7j): 45636339131554162435, (-11+6j): 46786555226169183524, (-11+5j): 47967909437759997733, (-11+4j): 49181314471421115123, (-11+3j): 50427712127308645682, (-11+2j): 51708074486037196767, (-11+1j): 53023404986497344964, (-11+0j): 54374739548717874325, (-11-1j): 55763147741532316931, (-11-2j): 57189733989763427895, (-11-3j): 58655638796501314877, (-11-4j): 60162039424523233063, (-11-5j): 61710148955220358139, (-11-6j): 63301164200123395207, (-11-7j): 64936162422655412160, (-11-8j): 66610892438543808804, (-11-9j): 68315718871165181711, (-11-10j): 69460664433114374558, (-11-11j): 70035665185585476809, (-10-11j): 141231540657183339873, (-9-11j): 144152679749009819006, (-8-11j): 147716159839185547043, (-7-11j): 151369035828890886590, (-6-11j): 155118778101599827596, (-5-11j): 158968113158272431836, (-4-11j): 162919898589261582483, (-3-11j): 166977080896932025519, (-2-11j): 171142699032894137002, (-1-11j): 175419887596590487452, -11j: 179811880163612605638, (1-11j): 184322012743892324059, (2-11j): 188953727374022846839, (3-11j): 193710575827264872596, (4-11j): 198596223366442751283, (5-11j): 203614450800184077866, (6-11j): 208769151456097526221, (7-11j): 214064164455986674171, (8-11j): 219502944164013006428, (9-11j): 225071554891953122131, (10-11j): 230738492751976757517, (11-11j): 234543874971856173202, (12-11j): 236454823910184528481, (12-10j): 476764887494018292792, (12-9j): 486470297587809952897, (12-8j): 498306527719228455479, (12-7j): 510434558809897803205, (12-6j): 522878636986151439312, (12-5j): 535647487696466352501, (12-4j): 548750250428457216214, (12-3j): 562196342909038843271, (12-2j): 575995471943428113573, (12-1j): 590157643168331881810, (12+0j): 604693171189689674309, (12+1j): 619612690104266583479, (12+2j): 634927164417123347284, (12+3j): 650647900304666103729, (12+4j): 666786556997062576295, (12+5j): 683355152897867200834, (12+6j): 700366055956851706042, (12+7j): 717831455498104060430, (12+8j): 735762315115007824249, (12+9j): 754113385201329016370, (12+10j): 772782639494631183058, (12+11j): 785317544260503404274, (12+12j): 791611714711649178896, (11+12j): 1595919627307197361672, (10+12j): 1627877825086291343709, (9+12j): 1666841249036463936822, (8+12j): 1706748072617713397193, (7+12j): 1747676229444822379490, (6+12j): 1789653356591920607427, (5+12j): 1832708384892429342579, (4+12j): 1876871106177934957732, (3+12j): 1922172206091707605827, (2+12j): 1968643293461650559698, (1+12j): 2016316930797958329904, 12j: 2065226665912608461696, (-1+12j): 2115407064705225414544, (-2+12j): 2166893745149887975847, (-3+12j): 2219723412325565415111, (-4+12j): 2273933893788968526027, (-5+12j): 2329564158259514302664, (-6+12j): 2386654284424677526388, (-7+12j): 2445243753620701760514, (-8+12j): 2505368065189983223650, (-9+12j): 2566877620739903454086, (-10+12j): 2629435905333937792577, (-11+12j): 2671433877254256206085, (-12+12j): 2692520913419480501379, (-12+11j): 5427571286349489643690, (-12+10j): 5534612144630584923009, (-12+9j): 5665082357657830217288, (-12+8j): 5798659450306101033070, (-12+7j): 5935598735575198689283, (-12+6j): 6075989539370682032975, (-12+5j): 6219925318506032329355, (-12+4j): 6367502254542522087893, (-12+3j): 6518819355627289045465, (-12+2j): 6673978547227132232878, (-12+1j): 6833084766248384648934, (-12+0j): 6996246058525132185154, (-12-1j): 7163573679805145804305, (-12-2j): 7335182200332942864008, (-12-3j): 7511189612543730839843, (-12-4j): 7691717439719975745922, (-12-5j): 7876890792299842732331, (-12-6j): 8066838267877841897837, (-12-7j): 8261686486939164514008, (-12-8j): 8461549260671528916683, (-12-9j): 8665936536414352281756, (-12-10j): 8873748584904217314834, (-12-11j): 9013244914522917166201, (-12-12j): 9083280579708502643010, (-11-12j): 18307792700074188625893, (-10-12j): 18663212585665967261581, (-9-12j): 19096312965911345967503, (-8-12j): 19539550841328432220142, (-7-12j): 19993754815098108481371, (-6-12j): 20459210742186871627393, (-5-12j): 20936217532036005469308, (-4-12j): 21425082624680471509146, (-3-12j): 21926122303199559254150, (-2-12j): 22439661970725975904123, (-1-12j): 22966036437519073134215, -12j: 23505590218023168551364, (1-12j): 24058677838304696327900, (2-12j): 24625664154249876371394, (3-12j): 25206924680817606842112, (4-12j): 25802845930811498543857, (5-12j): 26413825756434222899227, (6-12j): 27040273523146491177485, (7-12j): 27682609783222588384305, (8-12j): 28341248446734541187035, (9-12j): 29016561438542484073111, (10-12j): 29706915361158270125961, (11-12j): 30408652552792287585161, (12-12j): 30879651251674328286844, (13-12j): 31116106075584512815325, (13-11j): 62708977038663043923442, (13-10j): 63908667047655056697612, (13-9j): 65370208760456113398780, (13-8j): 66865420144573049610361, (13-7j): 68397039868088327308357, (13-6j): 69966000551580842903375, (13-5j): 71573276926691917911402, (13-4j): 73219871007725880323388, (13-3j): 74906813073006804496446, (13-2j): 76635162531027603335100, (13-1j): 78406008817329053004792, (13+0j): 80220472321791341144390, (13+1j): 82079705347502420749462, (13+2j): 83984893102328476783954, (13+3j): 85937254724047328811262, (13+4j): 87938044334246924692120, (13+5j): 89988552100098706175291, (13+6j): 92090104764451529142597, (13+7j): 94244064591021492733318, (13+8j): 96451771746835933634367, (13+9j): 98714430086646901658044, (13+10j): 101026643655603365261746, (13+11j): 103376355554070149027974, (13+12j): 104953284813042301611144, (13+13j): 105744896527753950790040, (12+13j): 213085712682815098941752, (11+13j): 217101121849920236826029, (10+13j): 221991760551350189468232, (9+13j): 226993227698090658145956, (8+13j): 232114493249189657859461, (7+13j): 237358570907844114243571, (6+13j): 242728608878773286573067, (5+13j): 248227841726435571480805, (4+13j): 253859593423597643386943, (3+13j): 259627280029328936510200, (2+13j): 265534412459680253005629, (1+13j): 271584599349852470356927, 13j: 277781550011268262563071, (-1+13j): 284129077487035984415158, (-2+13j): 290631101709216663220660, (-3+13j): 297291652760481085137645, (-4+13j): 304114874224855133381447, (-5+13j): 311105026561328293736526, (-6+13j): 318266488757633187326092, (-7+13j): 325603754860868549836644, (-8+13j): 333121244300419138274894, (-9+13j): 340822925891682962745207, (-10+13j): 348690673295011060197955, (-11+13j): 356684063991018734697996, (-12+13j): 362048018781692471405460, (-13+13j): 364740539695111951906839, (-13+12j): 734908650676573393457368, (-13+11j): 748563355020972948525446, (-13+10j): 765190620809610853309433, (-13+9j): 782188974762205369482800, (-13+8j): 799588315305744499422441, (-13+7j): 817398563030996481177769, (-13+6j): 835630076624448394229382, (-13+5j): 854293493736867630679605, (-13+4j): 873399740665543474142318, (-13+3j): 892960040822940417508554, (-13+2j): 912985923492043223435831, (-13+1j): 933489232864043872502797, (-13+0j): 954482137368622535141190, (-13-1j): 975977139307285755994657, (-13-2j): 997987084799967575502813, (-13-3j): 1020525174052564224952586, (-13-4j): 1043604971897127774270682, (-13-5j): 1067240418397025434646772, (-13-6j): 1091445833944142283790948, (-13-7j): 1116235907959630819119476, (-13-8j): 1141625080243655864831923, (-13-9j): 1167626314625645963345196, (-13-10j): 1194179244661487450107987, (-13-11j): 1221149518740623087232032, (-13-12j): 1239246044234854507041243, (-13-13j): 1248329324814563009684253, (-12-13j): 2514966442329200207994399, (-11-13j): 2561020728194648866524883, (-10-13j): 2617088046446300368379860, (-9-13j): 2674387122839206113829086, (-8-13j): 2733016741461544000498102, (-7-13j): 2793009257860157412827008, (-6-13j): 2854398440949478398405080, (-5-13j): 2917218951848381747010927, (-4-13j): 2981506374308297783243531, (-3-13j): 3047297241206903789910950, (-2-13j): 3114629061918348398203438, (-1-13j): 3183540350544616615793140, -13j: 3254070655038463553806619, (1-13j): 3326260587249041295057277, (2-13j): 3400151853922413474598683, (3-13j): 3475787288688292456356046, (4-13j): 3553210885056355784641242, (5-13j): 3632467830266747997261811, (6-13j): 3713604539329551299722828, (7-13j): 3796668671082654920471653, (8-13j): 3881709090751154534116104, (9-13j): 3968773815997589829502211, (10-13j): 4057905945350082871286444, (11-13j): 4148901164515707757284410, (12-13j): 4241305574395758885971740, (13-13j): 4303301331723017727073909, (14-13j): 4334417437798602239889234, (14-12j): 8731543852635867523701910, (14-11j): 8889277602797770137138289, (14-10j): 9081265455644544351158123, (14-9j): 9277409751597228570864876, (14-8j): 9478042420370346061182374, (14-7j): 9683270880934588281004467, (14-6j): 9893207198280949369127601, (14-5j): 10107966346766948010265766, (14-4j): 10327666307774372612997002, (14-3j): 10552428154386132901151936, (14-2j): 10782376138807496361988274, (14-1j): 11017637782477644359472556, (14+0j): 11258343968964267174371200, (14+1j): 11504629039735889413049006, (14+2j): 11756630892909767639393684, (14+3j): 12014491085070390369681020, (14+4j): 12278354936228783329359693, (14+5j): 12548371637427580489369701, (14+6j): 12824694358883152217420907, (14+7j): 13107480299985461172931189, (14+8j): 13396890566409965500956918, (14+9j): 13693083411899051701511075, (14+10j): 13996200841195372117458839, (14+11j): 14305557125218087933359703, (14+12j): 14619631662112954334788861, (14+13j): 14830329843453750587190045, (14+14j): 14936074739981504537980085, (13+14j): 30085235192645824174901922, (12+14j): 30621166923706313461459743, (11+14j): 31273345518790398986695756, (10+14j): 31939431628889760071135973, (9+14j): 32620531110388390576609622, (8+14j): 33316997402243515006858610, (7+14j): 34029199075279322065534709, (6+14j): 34757514096792375037832152, (5+14j): 35502330140821181539272967, (4+14j): 36264044856000543690650915, (3+14j): 37043066141913150523553687, (2+14j): 37839812433752012183426443, (1+14j): 38654712995572813169352070, 14j: 39488208222420969886687226, (-1+14j): 40340749951628490796886115, (-2+14j): 41212801783585224529659578, (-3+14j): 42104839412279777411399330, (-4+14j): 43017350965826441923654948, (-5+14j): 43950837355370258538099013, (-6+14j): 44905812625550088568998275, (-7+14j): 45882804113469009444435905, (-8+14j): 46882352038521980095292650, (-9+14j): 47904986882009093256510706, (-10+14j): 48951184545186806014151864, (-11+14j): 50018607301254528280453275, (-12+14j): 51102079923722351438463570, (-13+14j): 51828868482199155861775869, (-14+14j): 52193609021894267813682708, (-14+13j): 105122126694465109020822784, (-14+12j): 106970339239857767314712437, (-14+11j): 109219001866364924510004684, (-14+10j): 111514944816957713681322363, (-14+9j): 113861912727835274403537037, (-14+8j): 116261088580934220753620047, (-14+7j): 118713705535895410128449639, (-14+6j): 121221027669287722634536395, (-14+5j): 123784350980314582133587700, (-14+4j): 126405004255539933655918177, (-14+3j): 129084349960520460771004880, (-14+2j): 131823785157699488284452062, (-14+1j): 134624742451424197915531880, (-14+0j): 137488690960964150079170524, (-14-1j): 140417137322440025945809184, (-14-2j): 143411626720599843502259240, (-14-3j): 146473743951349503076985321, (-14-4j): 149605114515696220510855361, (-14-5j): 152807405739934516003563763, (-14-6j): 156082327900235314541120959, (-14-7j): 159431634722382743508863306, (-14-8j): 162857122025211676156159901, (-14-9j): 166360552664742465434445007, (-14-10j): 169943507742770221935130222, (-14-11j): 173598082550407186979511484, (-14-12j): 177306807438197227583469012, (-14-13j): 179794382807246645100194508, (-14-14j): 181042712132061208109878761, (-13-14j): 364600390706451616427751921, (-12-14j): 370924707201790028511955456, (-11-14j): 378617782418760177954854598, (-10-14j): 386470278316240333303588427, (-9-14j): 394494770226987383786295475, (-8-14j): 402695183349148291313449671, (-7-14j): 411075607789419471125179861, (-6-14j): 419640234440077488683422876, (-5-14j): 428393358207183646612082414, (-4-14j): 437339380774547229932247822, (-3-14j): 446482813451980779903605741, (-2-14j): 455828280105650648707513269, (-1-14j): 465380520173152077275316466, -14j: 475144391765984198739973502, (1-14j): 485124874862194117063436081, (2-14j): 495327074592053864289448087, (3-14j): 505756224619720926005044058, (4-14j): 516417690623732322243303157, (5-14j): 527316973878384977324929038, (6-14j): 538459714919063931542385330, (7-14j): 549851697220227292296695915, (8-14j): 561498848798058691580785883, (9-14j): 573407237650157518815690642, (10-14j): 585582818576020899273763707, (11-14j): 598030931260282448788306301, (12-14j): 610724439330916933158636360, (13-14j): 623603463674834312011571243, (14-14j): 632241182444355931978534386, (15-14j): 636575599882154534218423620, (15-13j): 1281882743616944935960549150, (15-12j): 1303837982510177175861278583, (15-11j): 1330540069421255357873276905, (15-10j): 1357788022231294900932438193, (15-9j): 1385624739858907019915643566, (15-8j): 1414063462911809182828695283, (15-7j): 1443117983411395066540009725, (15-6j): 1472802427837377552200407559, (15-5j): 1503131267690199822192797928, (15-4j): 1534119328499127275717212632, (15-3j): 1565781799100095277593349844, (15-2j): 1598134241175766551215962610, (15-1j): 1631192599066015959111794640, (15+0j): 1664973209857193760058687402, (15+1j): 1699492813758803684285501292, (15+2j): 1734768564776519731707625002, (15+3j): 1770818041690728673046059399, (15+4j): 1807659259349455427234469813, (15+5j): 1845310680281994943270620114, (15+6j): 1883791226578291137150341911, (15+7j): 1923120291803569716041650925, (15+8j): 1963317746081864194417050107, (15+9j): 2004403920901368583736976939, (15+10j): 2046398762279681095489306556, (15+11j): 2089320151908207509874913959, (15+12j): 2133075670538992302730252568, (15+13j): 2177461706784540512190211559, (15+14j): 2207228111367975767315381689, (15+15j): 2222164186107957271853361774, (14+15j): 4474413607408560367881625470, (13+15j): 4550056084264894010055967220, (12+15j): 4642035831900036546679024641, (11+15j): 4735869775971423019198316113, (10+15j): 4831703084229491568832757464, (9+15j): 4929580044371013234487361669, (8+15j): 5029546771958924462136364610, (7+15j): 5131650482533239674246590081, (6+15j): 5235939525846132552889229909, (5+15j): 5342463414939746653156985943, (4+15j): 5451272856078481528910463512, (3+15j): 5562419779510147235308094557, (2+15j): 5675957371081385211184426757, (1+15j): 5791940104733131006423892496, 15j: 5910423775902753280276817907, (-1+15j): 6031465535860387965490050826, (-2+15j): 6155123927007881458227995849, (-3+15j): 6281458919169572902092709705, (-4+15j): 6410531946903049379965862996, (-5+15j): 6542405947849796168996615232, (-6+15j): 6677145401944185525548148425, (-7+15j): 6814816370721726603656875255, (-8+15j): 6955486513755726686453114516, (-9+15j): 7099225037221444565819069736, (-10+15j): 7246099815949894993370185581, (-11+15j): 7396171687720058679103254290, (-12+15j): 7549121243427234714683947004, (-13+15j): 7704245800855050489797869151, (-14+15j): 7808268278359143913473327728, (-15+15j): 7860461887381038181287010436, (-15+14j): 15826045901456541471594843656, (-15+13j): 16090331976412758615744061585, (-15+12j): 16411643444213446416589601490, (-15+11j): 16739347730136626822095640974, (-15+10j): 17073943589547784734690505058, (-15+9j): 17415581535673511943528984505, (-15+8j): 17764418242518176848814591228, (-15+7j): 18120614064304294202331197309, (-15+6j): 18484333148489791917227771043, (-15+5j): 18855743531394934155651813315, (-15+4j): 19235017236591309132212324072, (-15+3j): 19622330375965069014923699191, (-15+2j): 20017863253534713161894688013, (-15+1j): 20421800472104800998173842479, (-15+0j): 20834331042839629372114354067, (-15-1j): 21255648497843633391641593015, (-15-2j): 21685951005838022764166646760, (-15-3j): 22125441491025668331256746682, (-15-4j): 22574327755232648570848151127, (-15-5j): 23032822603388514621903691210, (-15-6j): 23501143971751067195957239238, (-15-7j): 23979515056398896930163383404, (-15-8j): 24468164365811233815262851618, (-15-9j): 24967325548243958178788586748, (-15-10j): 25477227691201878053137673461, (-15-11j): 25998076088933252689635784179, (-15-12j): 26528775361729103749298959183, (-15-13j): 27066919264106608830092501464, (-15-14j): 27427756359045916683302574733, (-15-15j): 27608799071177977891412453494, (-14-15j): 55582198533062407399252658909, (-13-15j): 56498766343102710252302245047, (-12-15j): 57612909223429712075196807022, (-11-15j): 58748921991366502614967205503, (-10-15j): 59908504822328490510011944003, (-9-15j): 61092165054220866518415277576, (-8-15j): 62300430615586421664640202583, (-7-15j): 63533841641165066915762254991, (-6-15j): 64792950841601747522182940142, (-5-15j): 66078323815023555887410693254, (-4-15j): 67390539367457267543858629231, (-3-15j): 68730189841789446202401996063, (-2-15j): 70097881455520229708288431539, (-1-15j): 71494234647565016633011234776, -15j: 72919884434366347026089960825, (1-15j): 74375480775586579206182818495, (2-15j): 75861688949660548113540746721, (3-15j): 77379189939496055226078542023, (4-15j): 78928680828617893451651818276, (5-15j): 80510875208039074682762435801, (6-15j): 82126503594056750883926446084, (7-15j): 83776313854994100799346313212, (8-15j): 85461071638662544302039485652, (9-15j): 87181560543686781411709725884, (10-15j): 88938581531173242278587486534, (11-15j): 90732919720340462559808192902, (12-15j): 92565278554606496253766706806, (13-15j): 94431847640056603430915448795, (14-15j): 96324267886057948209123978044, (15-15j): 97593084668384458675320936050, (16-15j): 98229660268266613209539359670, (16-14j): 197741203280150171355039268490, (16-13j): 200963499606159448001079519843, (16-12j): 204879760401707825470774624481, (16-11j): 208871926475870552905441618162, (16-10j): 212945879307382010184162976826, (16-9j): 217103355532384021287839753868, (16-8j): 221346161718566132557124102442, (16-7j): 225676145592726714358693215009, (16-6j): 230095197271665686799626430221, (16-5j): 234605250295692391449736848340, (16-4j): 239208282690981813825240208744, (16-3j): 243906318059756802929766733830, (16-2j): 248701426699098680717687840924, (16-1j): 253595726749197656988074285576, (16+0j): 258591385371879670391530268910, (16+1j): 263690619960272187567582082606, (16+2j): 268895699380498239656621268299, (16+3j): 274208945246314943488609422513, (16+4j): 279632733227637122532160571839, (16+5j): 285169494393846864039816003677, (16+6j): 290821716592510719836278616627, (16+7j): 296591945856974444883887659570, (16+8j): 302482787815761247378083337541, (16+9j): 308496908245024161251726671143, (16+10j): 314637031080113418440827868597, (16+11j): 320905825664840299348922341680, (16+12j): 327305683194072039673717719766, (16+13j): 333823448682763548255953565582, (16+14j): 340430302687024021807312520604, (16+15j): 344859694984499954846481264067, (16+16j): 347081859170607912118334625841, (15+16j): 698638131948624384604550877152, (14+16j): 709884765826405796254341831616, (13+16j): 723551271349979287178958448947, (12+16j): 737479233042115640754891756921, (11+16j): 751688841734216591889601855139, (10+16j): 766185994638788519712120290385, (9+16j): 780976824539347948977576774128, ...}
for key in values:
if values[key] > input:
print(values[key])
break
330785
passphrases = """kvvfl kvvfl olud wjqsqa olud frc
slhm rdfm yxb rsobyt rdfm
pib wzfr xyoakcu zoapeze rtdxt rikc jyeps wdyo hawr xyoakcu hawr
ismtq qwoi kzt ktgzoc gnxblp dzfayil ftfx asscba ionxi dzfayil qwoi
dzuhys kfekxe nvdhdtj hzusdy xzhehgc dhtvdnj oxwlvef
gxg qahl aaipx tkmckn hcsuhy jsudcmy kcefhpn kiasaj tkmckn
roan kqnztj edc zpjwb
yzc roc qrygby rsvts nyijgwr xnpqz
jqgj hhgtw tmychia whkm vvxoq tfbzpe ska ldjmvmo
nyeeg omn geyen ngyee rcjt rjuxh
qpq udci tnp fdfk kffd eyzvmg ufppf wfuodj toamfn tkze jzsb
rrcgxyp rbufd tfjmok vpyhej hcnz ftkojm
jnmomfc jnmomfc bkluz izn ovvm flsch bkluz
odisl hzwv hiasrhi hez ihihsra qpbmi ltwjj iknkwxf nbdtq gbo
gjtszl gjtszl fruo fruo
rdapv gaik cqboix sxnizhh uxmpali jdd usqnz advrp dze
flooz flooz qad tcrq yze bnoijff qpqu vup hyagwll
lnazok dze foi tqwjsk hpx qcql euzpj mwfrk
ilb fmviby ivybmf gtx xtg
rpauuu timere gyg wcolt ireetm safi
croe szwmq bbhd lciird vhcci pdax
hnc ykswt qqqmei goe bri wmyai hnc qpgqc pberqf bzs
hsnrb wdvh iezzrq iezzrq rdbmpta iezzrq kemnptg alkjnp wymmz
ngw don ddvyds nlhkoa aaf gptumum ugtpmmu
vmccke qbpag kvf kvf tgrfghb kvf bhpd sglgx
obomgk bkcgo yso ttft vbw ckl wjgk
fli qvw zhin dfpgfjb udsin nihz ovr tiewo
tgmzmph hauzieo jmg tdbtl lvfr qpaayq qapaqy ausioeu jun piygx
jkp guqrnx asdqmxf vmfvtqb tloqgyo ioix gajowri tmek ilc puhipb
uycn zxqm znft ayal znacus kvcyd ekv qqfpnh
fqghur xtbtdd ztjrylr bpuikb ziyk
rvakn uqbl ozitpdh uqbl dsej xehj
laxp haz jyd xnkrb ijldth woy xapl iqgg alpx gnupa ukptmmh
dyiy dyiy ihb qcyxr
wbwkd hdwu zvgkn hdwu wjc sakwhn zxujdo npllzp uyr uyr
fxczpmn cininu akcxs ggslxr riyxe ojisxe
ppbch sampq dnct afikor dnct edsqy pnzyzmc afikor
jnvygtn hijqjxl vsd jnvygtn nqcqv zns odq gkboxrv kolnq wrvd
mroq mroq flsbu flsbu
fyshor xvpaunj qmktlo xoce wkiyfu ukcl srndc ugwylwm ozcwdw mtqcste kpokr
cfh cxjvx cfh cfh uewshh
bpspbap bpspbap fquj mxmn bwls iirhvuk dmpkyt exrn mxmn
tvyvzk ezszod ntxr xtnr och
knfxhy kbnyl knfxhy xhkssx lxru uprh nkxpbx oodolxr tpvyf
nblmysu iwoffs upgof tyagwf aan vovji ajk ywzq oyfi sfulz
aushzkm lcaeki mkuzsah ynxvte rsntd refk pcm
mgguob gobmug dzenpty gmogbu
yvq eepof rgnree nerger fpb stfrln ernger
hrgkbl mzwvswk rsrsbk ieru holco pajvvn ztgsr qkyp fyeg owpcmoj
fowda gmsqdca yugj mcrroxv mqcbojd fjnqfji qdfsc jqs
qnc rvjfz vvxk sjd xrma ucdjvq sbw zydyt dfzww
ocajazv cozaajv tqunkla udwf ecnnmbz lsakqg bki njnda zsdu ccfqw rxpc
qqm qdfya qxyx qmq qfday uqnfttt
rnbirb iapor qet iapor hxkhz dfvzig pedl ybyb
mkgamxg xkniv meb hbzmxjn dhbj zhbxjmn hdjb
ilteux pyutyfx mau lrr bacak
sjjonmn dbbbgs crxyuu jztstgd ezb uiabyaa
tra fle ufzlvf nnaw kec hiwnnlj tei wld iyt syk hjdczb
qmd jtlud dgh dbanock fzp dsjgqru wwvo jwvxwgv xlemfij jcacd
rpkx oxesil snazcgx fly miiyc ikmtmp oefyyn egbw
ypfpeu wldnyd acchppb yqwcaw wldnyd turbz megci nbgxq xkc ypfpeu
iqqv iqqv neui iqqv
ypsxm icqyup zyetrwq nbisrv
viommi toszx dpueq eyy cunjou ffcjc jaeez djefra pxvkj liudlig yye
fhnacbg jghchh ghjhhc iue hwqmo
vbjw lpn cizba ltnsfpz tzoweml irewlc uzckhpd mszal obd
yeos utxkft hflxkfe fxczge qpgigkc ksgr vuumql vhlvv
xzmkv xzmkv krecdi klpem jsbu nwcmik emfzxf cjmpgnj
vtkjo pmiv zou gxo qdiyxsf hwyinjk jhkgf rjq
dyuoc ywiyvch irfgl ywiyvch fxb fxb
tuz onhr syu rqya abkaf bcfx mbknex juwoor zmksl
oheg spjorx ksdy vwtq fxz phvtazk tcze lrxg
hew lbup botaj ltr jpd
dxgc tzinkej gnz hxvvub adsqmc dxgc asgpp rqbdcra goy pmamdua bhiacva
xqv ygb kihxqz vyv pjcny vmyvsdv cgsi nfyx
tqga ssshrw ndq qlbvwh huyd pxbgj qbxk dkkbf jxy chsobw pph
hxl iwph iwph xnr otifm ljhre
zlgvpd kapxpoc dve rklk ogh hgnp rbrmc zzkz hhmcx aklmo
sar gfor nkf hek nkf aql shc aql
dtcrw kfjzcjx qyhi bldson whwdayo mqtgt xhqzp ttqmg
omspdml isze jdl nvwo qrkm wztfg ssfgyh dryj jhp unsmty
jxt cszylng ifht ixtuna azoi xutqlv jtx tjx
usgm azuayp fgkby ezpyq jqwl ezofj
tnhvil nrvg moyrpqs sldx qymoff megflxh pyhqwms xmdw
zomy zcquwnv lzx bvcna yods mjp dgsez
blklyf xokd gpit tiysj yrwfhm tofx
dtig vhdp omuj vhpd
fogwxim qvdwig emdiv jvhl euwbzkg xvxb hwmqo ujdmlp epmykj
sjxll sjxll pedvgb sjxll
drvay gtzhgtx yrt okz nqf
haxfazn pvkovwb pgu tgshw mxcjf pbe nwoymzc mxcjf pbe hydwy jradcr
prjsloa ahylvj okbsj qbdcdjt pmfo pagyoeg vkmhjzt khzmjvt opfm xfrji gyjqyel
lzypt jdbtrad ogr jdbtrad heink
rcoucuq gdxewa rcoucuq whlw zhhm rcoucuq azaqohe mzyli rdvaf
yuag ebcf yuag nsotg qqzuxr jfmao vyucw wmoye
qwvk xemm hgqrr wyxkpp tojndm xlvzypw jus bgnu bgnu nklfwhs
daqi knenmku ccm xkiuy vkexsbc kvvdagx umopitw yaocnx yoakqql mllmsp
mrxgl gywit mfopia ncnsvw vdxek axuiot rsejua nei prndudz mnu
egqn gaa qgen urs mix zbn rhn
ewharq aihy udkdaob kgrdd kgrdd kugbjtj fcef llqb pduxaq wcexmm
dwtiw nelq hppad algxgf gcc upou akm efnb mxmhrud
yxqaa ups okbhgt iet qns tqn rnjqxgp
npmhdm cgds ldexvr typi jyivoqk zkgq vfyxu xgfo
dkwnmr umm dkwnmr okpjw wqx jpztebl eqsib dkwnmr
dxbild wpbup evscivq dxbild dxbild geqp ojfbpl jshvqej
cxdntxs csfocjd pyy tuhws teb boyloz xfw scxh pxhonky
lteucke xrgwy hszgzu hnyrcvb
pfgsgwg dxzh fworek qbstod
usemcrf psczxu gcjtr brls
hjol efxczux bqdn gvrnpey yyoqse gbam ndzyj lbwb bhzn unsezg
bapw xifz blupk qqdk bofvqpp wnbuwyt rnwocu lzwgtt zucag pov
xkre lqvd juf lqvd xio xyg xyg
tzdao ztheib aymcf aorg iyawrch hetcxa iyawrch czdymc ccv
ucgl azlppu jvxqlj pest
dvwlw fuuy mnhmm okrp ualnqlm uyuznba fzyejk yaq crl ctprp
odfq knox mkbcku pxucmuf lpjpol phl
ixongh hfs ruorbd auy qyssl kykwcix aytsm rlj aytsm duq segpqhk
izufsk wedpzh podjkor eamo vqvev ifnz podjkor xrnuqe
twyfps bmdbgtu qye qkwjms
wlav htym vhsnu cocphsj mdsuq vhsnu jflgmrp
opajag itwjhfu purnnvk opajag
hpkopqp vnj aialpt lzrkzfs nwucez nwuezc
mcx hzcjxq zbxr dsx tpknx fva
rlvgm xrejsvn ghawxb efyos xty wdzdgh olahbtn rga efyos vhtm nsr
cni mbab qtgeiow ulttn rckc kmiaju jvbq emyvpew cdlxldn ulttn brhkprx
eykpffp rapik qki fhjgdyu tome ehjuy bibjk htxd vexvag
wrk dpxt gwkuiov gbkif ike gbkif pcd wpj toywyf qzsa aol
yqwzh uujn ujun ujnu
srs ralwxrz yxvvmgp sjhbhk waasid cqtxoxf whcladv jkmaq khjbsh dlavcwh
mdvsjh xaj etvxlsy fxgiy rgjesel rlegesj ptriz ebdyhkp kugxm dxv egljser
lhehwrs mqevb ygmv gri izop qgb ivm
loqqam alojlwg hgen hbyw qlwpun loqqam worgnwk kope
phozre todsknr todsknr ibj mvllsar
wuripy ruwlfbh wukbkey qhq iishw tvtvci xawvxc vxacwx hsiwi ogq
xryq vxwupqa zhqex aquxpwv bnvxrba dtbxki
yvvwh zvsm vqskhp vqskhp ggqqlw bpn wbuv
kqz tdy goqwge ygn jgd
szjjhdk zkpoo nxexz ebicc
wzuemcj oyd qupulju iaakzmt vzkvz
nppahov umm wpzev wxkgfxd owgekp bhhb bbhh dgviiw kdfgxwx wryb
bnc rhes lmbuhhy kwbefga bnc rtxnvz bnc
ani mggxf mcoixh zdd nai hbhzl mes bdpqr
mjn uinoty jjegvze bjgqg yhqsxbt coj obylb hddude xqi rhfbhha alood
cbjzj drmihy tfkrhsd nuhav hihzx bvblqpl tdd szmp gjgfv box
uumhdxd cmwgyf vepr rwqdkj exwk
hwvr ydvw bqefu kghes gvbhp awms iqsqes khgse
mrey jqfw fwvzhps komj dayvs fbui zmtd cofn mrey
dsjds fdpx irjj usndok qcctsvf fgk wvg txwxcl dxs llp zyilwtq
xmkelgk fdukc cye legkxkm wwly
enlny eynln cccku brkz dpof mwfoxcd yftmnqh wpebvyc
ggdn jnysl dsacffw ukj hdae cmzxku
uqhm gcachmn kxndfrl htmfis jfnajz fiqiypr kekho kekho ndcw ckrndub dejfna
keazuq ertql rauwl keazuq obmh rauwl ksrotm
jppp poigqhv repfsje grjk xwkyuh pkx ayzcj hoxzv
yhjw pcuyad icie icie icie hwcsuy wcd yihjh jnrxs
gaug ivvx ceb xujonak hbtfkeb ttciml cctoz
dggyyi dggyyi gqlyumf yasu fwdfa cbb nncn verhq
rhgcw gpcyct kiuhbg kiuhbg gpcyct jlmleo nhumm
wulxxu jyjek hclcp ogob viex wiqcupq
tthu nxgzpid kcnj mss ukapgkp nnc bxjocv qwxs oejwsif aywqtu brahkb
dtde bgvb smu vbbg zhlu
lyo nwjjmep ldbok wgxhto wwuh qfgjknk wnsl
lleyr onha hkwulbm jfg
bybjwd uoxvbh mvj iqfpnxs bybjwd zqtszp wvc lbazjr zkzenja cev
rbuyyr divtslq yuqmyt ajyveb smxsjb nlk tzqhq ims fewg wpjhr gqh
kpewfd beq klilis klisli eeezut
euqh hueq ldoo crqurv lvrwh tmaewp oodl
bqi lzrf jyhvxfh bqi jyhvxfh nbztd lwpdn cuzi
srjylou phavzjd wost uxkaq byh sluryoj
ihrdk bcegkpq nygrs qbcq wyjg dvzme pgzhjl vibg kvv
ijsx iedemek ktlz gtga tbal lbki gtga
vmiaxn kefig kefig vngxz
vrdmfvi qts vlvhq vlvhq dihmq
cfz dyrz zlw qnt vok fwvahg skshbqf hbwozdc ntana jdb uflp
rimbj bxemw sfps krtk umta vnk ewmbx nrlje ymrtqrz mxewb kjxunbt
egnuti ozat eltl ngueti
qtcwoxq rmaf qtcwoxq qtcwoxq
zws gcoa pydruw qsrk lrkybdf ugr wkrxoj nyvf vitwn
tmr hhd dojid zwrj bhsim righ keqlep flzunou
lwoquvy acjowxk tqudk oenvioh nyavyl
rgh dfhgyke iff cpxhuz hui koe iff hui dmukrei
bjiumig lcbmbgh vleipx sfawua rnf
gftfh qwb tfdroe xbno qhgofm vqfoe mux
ljdrr gyfggai iun nju xrucbis mhrcrh fukr obvuqc whlalfe xrucbis nju
nxjmjr egqwg arllu xqaahri lzc ivt uhsti
sqiepba rcmts kvesv nvp
tiksw tiksw rjni gbhvzm ctbq zuqfyvz
ibsnm kfka aoqigwo sqouih rxz
jmymq lxio adtmk umyu sxvzquq bporqnb heol fow
mepa eckq rqviawv dkqoei ifmngpp jiava rtklseu
yuycd jiufjci yuycd uowg yuycd udq izkicbr csxobh
nwu tfsjavb rruoxbn oepcov elxf rruoxbn rruoxbn azglwth jcjm ksqiqpv
dthfwip zqnwa zqnwa zqnwa
gso wruece ufl crgnlxv vllsm dpyfm wpa ctxko
wvpze seodz lpq lpq pmtp wsxs ffppx
yfxquj phvjn rtwieq rtwieq kgxztyu vbjvkc prqqd lyzmdo ojbrt ojbrt qiqjz
esaezr rpggiy jey kbzrhu uthus osr xxaiijd qfxlf auhzbx gkigoqw
yfhcj uvgck cds gjhhrg cmempgj yfhcj cjb
yxi voxvtuw unwg jqqm
igvjr ljz rus sru gbjtjt qfeg ztu zjl
leof ocxns hbkoysh hbkoysh leof
hab lyxmf yhh qeks fwhfxki xmbcak okqjii nfgzyg bhtfgdj lpmjn
mgognh tad herere lvwnzx ixwqs zphmuuc etdjz kczsf
mtej rlolsnn zbl uykek dpkan gmz etxtgj
mihuieo emjgbp jgks mihuieo iexrfw mjdnr bvp mcuzea xkbusvi
jvqpj bwt jvqpj bwt gxr
qpnd fpt tpor bibbpcg hmvguez wqc afl ckviua gpi
dntmcg jglm sxtnu sxtnu sxtnu
fzkbptw cbfwo ozvwov wbv gcdd izqo ovwzov lolewo xikqpw
nkxyxzd kpn datf fki werq mwidqx oiibor zizcjph
xvgyxym zor ijoy lvwsf fjuara idvvq rreit mqyyy ctio tzwqqhj rnpee
maqkfpk maqkfpk xukg sfdmnlg xjopvr xjopvr irf
liujcd vnlkouy dxkwc gto vhjvtw
swhqhj cas aupsd swhqhj cas bvbooii jquck dtdm
igh iqicicf ghi pcxt srcrjx gmf gyscphv
drplj drplj wopgpnk wytag wopgpnk
zexe ilcqoh qiefb txkuv lirfzv
ovvpn ovvpn uqeurqx uwzn hgmucj ovvpn sjxulms
rox silka irhsvym kutus otasof tdneav pcagds
mkja omu tyshbfq onp trxs lxa tftbv bnpl djhnc zdqfs muo
tjj rmmqas cbbkxs qio pikk ykyew gxlxt nhsyl ykyew
frcprg njrz oaxcmhc qben pedm ecvtga nzxwpb ior gaklot dpem
zyt kncau spoe qlchg sqys wkpbng yflju qlchg vkve bzadbpa
qtq pkaicl qtq mfkfqvr dnleiq brrjxsx uoyxh pkaicl yvmlug
firwy imtlp ywl qfa dqrbazz ztzb pcsbwhn zesmlag
ivey ivey mtvc mtvc
lhize acwf moa cdeoazd voktshy qmvqq jvmuvk ljfmq tsanygc
xreiqkc aawrovl pofcsg xreiqkc xreiqkc
cjbzvn ozds iniqu sdoz gqmki bablvll krs vjzcbn
izsod htkeqz entxn qtns prpcwu omfnmoy
kwfb tctzda aztctd tadtcz gyt wunbcub ydiwdin xxk
epnl ijcp giq ltfk zjcabve zfksmz epnl giq xxxbsom
ulyukpa mdjsbn dydko uhkdt qms aaaj hustlwu
zlsbu ohx jcwovf egf zlvpqgx qhejm wrywdmw
uhxqrzr mmu kjxcalj unuohiq rri yzngnb ikvlxry mfiym qbksdx
khqciz som yklmm jceb khqciz jspy jceb
ncwggv njvi nqox krtsn lnm
bgtqme xaxcoq qbtgme obqual vorfk baoqul lgrb
jli tsbb nlxjc pkwzmz dlxrj hmho gzguko ilj iyaasm
wlmw grkumg dynwtyo emxhhqr huluk slpqu uhqcmd absmr ufirmwr
pbs pcammxv dplfr tzvmav nccyy blvyq ffhnz bccutq
hgge ghge vxmvz hqxgjdg zab guo gheg
ylj bucoyoq udndc wpgyrbx ueh udndc gxdsdh hdoz wwgqlg
cjdeh gttyqe kdkm ltzd lfeozse quvjq mnwhokm kdv oojxm nxt
mfkzus knqxt saxkqww njx zumsfk sbmcyad cpt agvbuv
tukn vyco yobvsn bzgnn klrnzy kea thzk pxpwq ryfff nxzm
ylbm lxlz lybm lzxl
wgtxoij zad slgsi cvnxfg iomswwl vmx
hkm yinhnkj kmh kwkw kayknck chur styjif yknakck
rtfwhkq rtfwhkq zsf zsf
sldq zlntr ueegiw kajivqc ozcbm ceft snvugom pdyc elppeed nnqrp prwwf
lhk xjonc muc tudag tsafx mmivb dvrjbp qgrew
hnzer fbgqp aazta aazta lxaz lmgv aazta
victgxu victgxu mlpd ummrnbx cazjgnw isxcyp efy zfa cyusj
gyojxo onzq gyojxo uxufp awi ilhl wefwfxr gcjlt tmliynw uxufp pdcnxah
wjwachn xkuhfbp oky oky ybaeqkr rbuix yreoaw wepmye brvon aasb
kiidorw vxtxiqx wtqvbrv efdth isel qbom vcssyc vxtxiqx wtqvbrv riafzsw mqzsj
eurpjd vkhdamt tmfx czeoot hiz ykz lmixzq tfur jhzr
ipuftpj qbll sqkkdw fwncmiv bri oeeh lehd ioh wag
suima nanngc imrmc krq atxdo woy atxdo akev qlr aezco qlr
cfc efwbzck ozkmcxv moczkvx ccf
bnekky iakrk sask uwgnjp iyi rynev bdnas ldh kass
sicmw vvjbvv cap nsumc xgvrlm wsoo uoqdu psykckm
ugg mtr wnzhmmh tjxc ehwnji lwhu mdsckk yvmk enubrqo
grb oxmxz ohu ytetedv ssx apzlppg fdkamm sxofc jdt ynmu wyejok
umoep rbyqm eqfk twqnog cptbbi dragna ngqs ffb cexxnc rbyqm
utizi ormkel wvwur bdx ecelqbv xiccama aag glfvmj
znb rsuqoa uxo svc
obs lbifa cffi catpd
qkxwian ajlzjz wewduzp bbyv qmt fsr qgiu epinp ghmf
hatg bfgmb aght ghat
kuq inp dun cknbun wmwsu drlmmg kyxc bdl
bddybth swdbf jhi fva qpobio bjwm wjaztp jywi
mgckz vhveu zkemhp zdf xtiqqew mlx wazgd
umbjq pya lvvxf jeavij rhrxvew bwjqgpr piz
xaycpwo vjcuc qksc yuixhni sfbfb dydyaq gdfvb tggg xidphvf bpjdrl goskxym
agxfoip gguif wvo agxfoip ntkbaw fbyggy ooft zxih
nzvsu ffwq uxvfbl qrql olhmhom qhdltg ymwz krtndtx olhmhom nfsv krtndtx
qdp jqk ustz xjripzv mnk grnodk pjwdsj uug zqxjqj
mufrcox zunisfs ocvcge acamm xua vor bsde kxr vor kxr orccxx
ncycbp anvcxay bmm wndmeaw oso knmk mmb wamenwd kmkv ppdd
motdcn xzagzwu vuzt utffrn yuqxzrh uvzt ujttq
tauoqy coiy ybesz tauoqy wpmr trquyne ahxbj jzhems dsdy
aczq ypw pgmzz srfn quatjgf
cih ypapk bfxvr euvhkk gugru auhqui
vyf pssgfvy dnhvbfl xpacme dnhvbfl mzdv iynq hcqu
lbzvbu hhxiq hdfyiiz iyzihfd xhqih uzdqyxr
iapbdll vdr cprmrkk vdr dfjqse mlry flpqk vdr
grrfkq xcpxd grrfkq dxc bjpr prvwh swoc swoc
bopo chvwuhf qhd ieesl xey ieesl fnjcbe
kic fyq hsucnu agwyl pzzmd hqksh psw
mxf uau iti lcoz lpg zbu ocre wqlocmh mxf nidqj lcoz
bypmix ptzxgmf xmtzgpf hrvzzq
lbfw zwusma lbfw tuyyy
lrf uej unswvh obgsb npbl zajr kenea uej qnyjcu wzufim qpzkgya
qcrxj llyu kligt hlm ehwtbx dda lgsvhdt xewfcv uikn
nfzjx izqdbq mfbxs imiuc yqxb xlmvix izqdbq eflqfq wku omgtuu izqdbq
lasdwg hiy btzt eefd eyoep icn nnmhg otml rek luixac nyzgn
vekteds utsuxdx utsuxdx vekteds
feyov qrij zbebwg ijrq seplram wttkwm zewbgb kzuhuh
dmkgtv wohgqo ddtqmv zatahx mym hqowog tkmvdg
vhha wjrmuyx kqh vyyrj xzchbi ejsdq orlxg vyyrj dlrc
yetngqn zdtuqox hkarjei fqpsgh eaqwbg zsssog ghb gddqqzr hbg
obldb zsrhz zxp uxphnev mwnbc pfjft fms xwslk vjm fxy
nfij dbfykv ttq gyjgac igxuyqi gtiioqx ilhdex dbfykv uyp bdiwya gqf
pffzruz vogfosh dcs wje
pohhf fhpoh oon yyz
xxuam afwm qxl lnt syyr bwxhhf sozauq shlhfmz kwnn milav ochq
wefcqrt gejw cwerqtf fttf gjew
jfsvnmr osca epwtle pgfif sxom
exlfzmq nakp rgdnx rrcvth vhrrct aajjdrt ryyg dsozd jdqlqj pakn iruv
rmcvo txszcs xxhyxz hbsozk wshkocf rmcvo rcbnt
kitz yjgney yvkymef nauj hmllsgl kyhm kqr pzsu rcf pzsu qpte
cdinpx bfur mkj naz ihkheyr nohhoe
ylris xeqcgup wap bbfih tgfoj
ina gnlnm zyeqhij cudfuf ipufae bvkdzni aat teqsg cudfuf bjokrbl teqsg
aedx edax dnfwq qndwf
rdngdy jde wvgkhto bdvngf mdup eskuvg ezli opibo mppoc mdup zrasc
qcnc iaw grjfsxe gnf gnf
zbjm snznt zelswrk gkhlnx dqxqn qqxnd dmro
zisecvx ztezof uzbq otnrtj qsjzkwm ewvcp rlir bfghlq tgapdr qxmr
ipnqj opjf vabyoe wkwnd
wyf mfqxnrf apm snarf jqu aaghx pwecbv lvghayg
acncv jmmbwlg oiphlm ifuo cvt
pvmb egansnd zmh gcuzzci rrxpslv ubith
uoleptg xbouzn xbmg cfh cpn wpqi xbouzn xtxis sxzpns
rilybri kurbpq vfmjpck tjyogho hfyxad svfofx lfbbhxj khaerfs iqr
seaebgz wlmtkre qguv qguv wlmtkre
sgo edkxya zdqgwtt gxu nibuu rairqoq mzxli dci qsv
tsol mdhzqr rmaqnru ggvcq arbwkn hlkcnj ljkcuof
mmliphp ocup puoc eijjv
gmajqpb ijki ijki kvz
pmqss unhlpcj dlkll nuhlcjp expe tlurzmv nsy vlumtzr tgseozl
gkvaoni hsba hsba viuedv phyoclp fdq phyoclp febld nqfs
rxvdtw abn pntv qrqfzz slsvv abn lrxix mnu npot
ghlfjp woy xwkbmv bkahpkj jve cncvk jvdype fwgvoju yrkwjp gwfvln mvkv
kmluh mie bby fwer chsinb ojglqr nqk mie
yzmiu igkgca ybnsqja jpfejtp yjddy xsosxfi ingx qwuhb emrkwpx idqjmmm
btrllw mphm dkvo ewdl dchcul yah btrllw kmqi mtvgk wtb
hxsgard yuikc lykt tdee adprp gpougod klnzk mzsmlb
hdn znblw ifoblur bwzln dbv
smofpbs vjuyiro llk lfzesga tybu tybu
gffnpug xaup iqiyz fjkpnkz drrk fwyxw lwzfskz gslwpmv vjxylva tbkyo nib
evydmb nhwuiiu fkerq nkgbuyy uclrs ydjgglh xhotwbm riirgzt
bsub eavbt uvd dpzwyt rhn khrbptt xszckc djnfxju axofhat powmso nvdffrv
xtuykl fjz mbikc xpnx hmey fjz fjz
rkls nwdcsyx rkls rkls
tygml untequ ybdfumz nqffbq uipc sove hfnqj
ytecew vven koqn royynd qsn ksl qsn sdw
hknlw qwho whoq oqwh
lzmmtqu qvhyeo cnofuj utpwkjz gnirz yhhu aodbnd
zsr axw kwtzcv tydzo kwtzcv lkxsm
rbjtqe nihifd gvdxd bpxzy rxteky vgcgllv vbbua anygiup rqo
dpd wblfwp wblfwp wblfwp ygahc tqjbaq
gsw gsw pacgj xmrcz zmxhmch xmrcz
pdq rhe xqmq lgpkhg fyffrot ovnqh wle
tbjavke ypzzrj jizx gdxoh icjsat otfh fmygumv
snch nxlgjgp jeyn sxoqfj jtage jtage iuice
rtb coefuj grwg grwg rtb krhqnma vfhgbr
vhegtl btorwxg szcev kbvkx itsk nlzpbed
hiukrf ilzkm yllhh xsgwkdp zyy kjbv
rfcg tdorci zcj wzftlv rfcg rfcg
lgbc lzizat vsno pau nvv vsno bbr lzizat qhtb gwp
sfwnio tcugjk bsfsz ykyfwg ibkap fsrvy mygk kzunawx zyhyh
mpavlh qps bylh lttjkz rqabgk vewb bwev tlzkjt gzrbxga ktmso prpkj
gpf ims ynh ffrs vpa iemp gofh cgbauje
secys qks mcnfhwh drog kqs pajy zoltkw lfihnb myb ioxptu
ytq nrta ouk ajqblf yuwwcd zdy blyoxbw dakk nvgi bzrhzaa
nkoych sufiia xkdvw crtldee zycl qblab egqhr qblab
nllno muxaf vds qjnitmw zkpj wskyhft kmqct xamuzpw qcai cdjtbt kaxv
qzdytpe osr fuw osr qzdytpe whperd rydwdcl knoa
zkdznhd peh duoygr zamrgl irnvj otpe pltpq jdkecg
byzgw rece iigdug ehif tpgje
ccnn foqdran gbctca tefdjxh ntcr rjciii xip xlss crl wvvhzqm twyohf
dqyii milqqc qjgkojp qjgkojp ryde
tdkyj tbrcud tsba vqtmb cjwxnf
hqhmq wemvrce nagig pwnw nagig epg nagig vlsi
tqgvw luoplw hccti npjm rytdruq cylrsun rytdruq vjsbjl rytdruq ppti
itgt tuwc itgt rvp itgt tigns eipl ksmru
pdw wdhtkn nbdbpn wff zhuuipg rvemv qxr
qgkwdq cjilayh ymeks mrpuzai dwgs stfstgz ucvqhb yout oiq
vpxik ypfr qytimvu qms oxbmw ppyfx
fwwidn gdhd pyuexk snsz iwndfw
lfcb sllxjna lfcb hpzahfg mmvgaa svny jhuzd
unyg gicmzd fwc spkciy toyq wjupckd vzzx iuqgka ytqycb pxsufj
goj tnrcml eyizngj txa xrkiw zvu igduz
wek xrrlkna clyof rrlnxak
cjm rmyuku vjom gtf
buk cfae awstd dywgqp hxo wcxvf laihqw xdqfes wdbh qceh uzlwj
sudguo dxwplto rlebdh bkamu dxwplto
crwkyxm yuz kjtdhom crwkyxm
trhc sduorxr aizfryh rsudxor gbyc
pczkyl bptp qnn nxmpwsx udrg hhlb rubtrmx twzodlp xygnht
jmqct cden yfajtkz fevcw sxonbxz sxonbxz qkzkm hhngr fbv
sdsnm mwvicr wypfi cty ndbowr woiz mrauwzd qlno mwvicr
vteyo fng lvr lxytn txpj milg
wjx ahtmgo cgwcaj kaxae fhlvlqf
ezj eetqhzu upwda iiefwlk vyvby
imalvy yeghqe jwcu mvrod cwju
bxnmsa yhfu npsdar tsbri hfuy sirbt oofxmy
fkndt elbjtn vepqtxt elvpf fpelv bzkgag qttexpv prblwb
rmq iqs yvprnyy iezqrzm wlqsrr
yviovq lekxghj oey qwhzj lxknxw qiyovv ksnt jptz
tyrg cifxt hugqf tyrg ffuiv jmax qyw fozfosq ffuiv
nmg rsl jpzazd qbtlf yxqtsj czwmdfd bamge lbjdof uqy jssc
cbx boozjip pwgvzlq rjz kxy kxy hszacok fvsq jhnir cnsba gafz
sbcuxb wfur nnnfqjj fdwg huhe sbcuxb
icwk qelbxs uevp qped zsnhh wpuok wddxsln ftnzupr ruxol cgxjb jbhh
izcp htykj xxmndoq amnspe htykj
vverol oixwlny vqd tvfzu henc gnyrwr
ytxio etytsx choynep zqapo hfjit
lkvgr oyzfa taiqr jok djatvy ckif tmdw oyzfa zroy
jlgpyp kkqysg oqjki hjohoug hbhta muilz zft
sumfyu wftcu bwwdcy lezimwa qwvxv zwh mqyv bmfot aii torcol rnt
tpdj xrw ccsbnh fhptv fwkxjfm dmqaokd bjci
zxi vmf vmf dpyg
sfzxysw lcms bkojtv bkojtv
opywo qll ipkitr mtwp tudrr svhyp huz bxsdpn xomfy
gkod luo qrosbp orbd rpsjzyd rlh gdok tze
nusiuq nusiuq zeys ahufexc
veno jntg avtmtdn qojxru zegdcql odfcetz pgehau
uqun vigjm ykac ozlelj danmji bibugox
rpuozh ajwru rbvuevv uhzsq
iawoe tyb aewio ymf byt inijv ctu fcys micsgzl pbby alt
gktyxp ris mqpfm bkqsfl nrg idbbcxg jhcf
qibt invvv qibt luitx rnm eby hrfbmwl wnap sgkzvb qlwc hrfbmwl
jwkv qecsjbw lycgldd wjvk tjcp dycldgl pzrvr zrlcf kji
nzsrmiq nmhse ilivrk kqv
besmyzi imkgpt iekbjax abxeijk uvzs wwv
jdocl uki ltswp tjkljc ymce iuepze qygqxzs tei lkry
hhyfy gvzd mqksxlq czn afe mesnag eep frwgekg mqksxlq phpy
ehg connnza ekt ddgokw
mpbsoms uzhzl xevww ztt uzhzl
lftybr firc awsud dsxdkk ltf ipjv dtx lcymth
vkcpb gxtxq yioeq fexj xxgqt
srvca fslnnvf nfmkpvt egw wemumq jie vznf dzsjw cukf kcvyir
yxjkl lyjkx jyxlk kgc xtz
tpoe xzov csp leleoqo noyre tdhf cyib sjgtdx raehdw nmcxp
qvt uhznqe bpvos vtq ddlebtd tqv
xlw utsxs gpia rvlvnts elkxr dddihy tnrslvv ibf wlx bxg
cwqnnrt rkkqyf dye yde fzl pthanj
boc rqjenpp xjqte jteqx pvoofc pidqe ruoucy gvnro ognrv
qhalb gnazwc fhl iuti
clnbjfo nnfs nnfs heymvr oarew oarew nxu
lwtrotg hiaxwj ymzbly nvhzjhj zlsaheg nvhzjhj ymzbly
rrvi tsjp tsjp tsjp killji
rpx hiclj cmwq ibhj nfd
pvwymn iebkd xmpw vuhhkap ksw zigzy mzzyyxy rmuh iwwhea cglfq
rlwelgy sffml jin qsdzro xlsty mgqzuu etxjuo emzd jgnoyq tkjuy vfvb
tkctdj hhkuc viskmy obw
zvjkuj akeky ikj jqd hfhzbwe bkc
btev nrdo hcyiuph stf qharfg vpmel mpfz nvs ytgbbc
ieepn ndueuw svmdr tcvumw mceyrn mrjwhyl tbdj mgrgvz
uxrs ckyi xpmqm czzrkl cjp
nlliwd wrqkrkz yjmng nlliwd zirde hcjjn wco ysf mgl
dxti lcahe ommare izlwf ramsfb nzgfvo ijvm fwymrdu bndq
isxy jpvuzu tdduyhw dixp cfa fkzbteg ytoi kepk ysf yqcpi
qmeprfj soqo ncgeor cqsuuj grzy wogxy vyblnbg slvtry vdols kka
ltykfp gtzl olrp gxend vapee deq
emywfbn dbfiut rkt wvwe dbfiut bwffhea yuzcxv gogpicp wvwe
vqvmrp ofbk dlfabd jwllzxk obx vqpwjj umvng tqwis fstxy fstxy
miha zgvyux rmraszo xwf
kjaagk btm kjaagk wkewjrg kjaagk
lbmli aizs omrdr gzktnx asiz ptanzpa xlo ljre ckyb wob
svz dlk rijagg avxmg fkzwhk uro gegm
dzplum temdw jqnm tvxcww bmg tftttpp deuw comxey xfimzjx caluczi nqn
uwvhxa ztkd nlsdyt vihl julkwwv uzch dwakhs
wkhuihh ycrc cxff vzcfhpp uegfd gaok kcnvz lhzogq lwa tyrypvu
idp zmrrzp zmrrzp nktp xsnx rjsxn
eybrnib ivgntl vaxsbpi eybrnib
nzvnq xvbfa pbhwwh ylju runvsj imlx vztesn
nfdohd nfdohd gtevnky pivjyct ihvd fzcsrq lko fmqk
kwpkks ecikxu bcxswlt qvrxm sbcqmh
kdjrmj piuh kdjrmj vnaf gyedkg vptxgm xezssxx zsg qjzpo zsg
oqo sley aqx qmpqb fgmylbj egd zivj kepxizv kuakyn lunbnd
hmcf hmcf xlhgc hmcf cdlm buofnx
onjcj yluonz kzmk phqo phqo phqo
ohaafy efl bnkkjww wwjnyoj dxeaig ywnjjwo slk hrbebw ohlyju elf
msohiqz aunk njki bfktdgi htmyrj mgx
numlzrl rmnlulz glb ltt fhbajz gqxpu
gko hco oai ryq xwy sdqosft spjkiu cxfhg ycwpglh noy rah
btzpjem brpk vqr atxu rhlh rqv jmg fvyus
phmxxgj ejx xje qtk hsb kqt npwj gqt
hujyjp nwmsd ant zipuya lrkahww uwqal vzlo qmbo twkjkse ufivi
zfbnyz fwvh xrnrw usn zin daq iwjzj
yykyg iwypfy hehqnl cjvk cevdrec
gui muuto wsta glqmx gfo rdmbv mxwz gffzt eejpw gion
lpng nduid iqbpu nduid knrqd
xwxn oefpckv gjaua ugaaj gjuaa
qxk aeql trqdmqc crzlinj crzlinj trqdmqc rijcne ewyf
rfv qmbe fvr bmeq
upqyfw lowzq wpen upqyfw gfskbil sljuzh wpen
bdcara qyhx rtaez qyq gbyr
evzls qxtxq clzd svbgqi zxlzgss vtrre fko eebo qjyl
zaapeo kpwhz tygknau nyd pch trp xqe
ypzcafg rnqmbh qtteg sncu ssojhhm zonfym thir xmgheb wqj gpjg ssojhhm
wvcwyn xrf muozyya lasdp xpjgu kpqv zkiihiv ifje cbdlavg xbied hfnaa
qqqb rettz rycukl ihpkhh
dnxzxqv znb znb fbxj azxtezb xvxa
peqkd xlzqkov esgnw ucku hrwpfxd xtd vnig vlmfp ajte qswr kqoj
dpwy oavzkk dwyp ehij upqxgii pydw
amfc hfv xmqa nqvn cal rqmcq oej amqx cla ntxj
hqhhe qkbhwli wmhlcq xaczs peywuo
vcr xfv xfv kymo qpszwzo xfv
nmrbur tswo xbo ljlrzo bmhpgc pev zovkznz lok wbbhtkk
tojj lxqgr rhjavrm ndsdup gdbjwaq cqpnl wfaxivl rfry ryfr udspnd
beffod sknlph amb feobdf
mldgn jxovw yuawcvz kzgzwht rxqhzev fsdnvu vluuo eycoh cugf qjugo
tlnd qcxj ker fdir cgkpo nrqhyq raef uqadf iahy rxx
mhvisju lhmdbs tcxied xeidtc ujry cditex gvqpqm
cgc jazrp crgnna uvuokl uvuokl uoiwl sknmc sknmc
rvbu czwpdit vmlihg spz lfaxxev zslfuto oog dvoksub"""
valid = 0
for row in passphrases.split('\n'):
splitted = row.split()
if len(set(splitted)) == len(splitted):
valid += 1
valid
337
valid = 0
for row in passphrases.split('\n'):
splitted = row.split()
if len(set(splitted)) == len(splitted):
if len(set(["".join(sorted(item)) for item in splitted])) == len(splitted):
valid += 1
valid
231
test_sequence = [0, 3, 0, 1, -3]
def jump_until_out(mysequence):
"Returns the number of jumps needed to exit the sequence."
sequence = mysequence[:]
jumps = 0
current = 0
while current >= 0 and current < len(sequence):
this_jump = sequence[current]
sequence[current] += 1
current += this_jump
jumps += 1
return jumps
jump_until_out(test_sequence)
5
sequence = """0
1
0
0
1
-3
0
0
2
-2
-6
-3
2
-5
-6
-3
-3
0
-8
-12
1
-9
-12
-9
0
-7
-17
-6
-18
-7
-6
-21
-28
-14
-23
-14
-17
-5
-35
-17
-26
-14
1
-27
-19
-40
-32
-44
2
-14
-15
-12
-35
0
-49
-12
-7
-46
-47
-32
-33
-47
-7
-62
-20
-35
-4
-35
-8
-3
-61
-38
-63
-27
-33
-57
-48
-66
-68
-11
-61
-50
-34
-31
-36
-79
-49
-71
1
-34
-65
-61
-91
-12
-21
-82
-85
-51
-89
0
-83
-53
-44
-7
1
-19
-39
-27
-94
-36
-31
-35
-97
-45
-90
-15
-106
-30
-79
-18
-25
-105
-30
-63
-109
-32
-91
-96
-87
-121
-116
-103
-71
-1
-113
-10
-47
-109
-107
-38
-66
-26
-8
-38
-31
-129
-42
-91
-89
-107
-125
-75
-118
-81
-45
-111
-27
-63
-106
-110
-64
-63
-80
-44
-33
-130
-55
-90
-144
-15
-132
-122
-155
-122
-94
-159
-5
-89
-6
-97
-129
-159
-15
-44
-156
-124
-113
-154
-95
-96
-29
-121
-30
-73
-118
-57
-76
-141
-138
-108
-185
-56
-136
-161
-138
-192
2
-126
-12
-39
-60
-125
-149
-193
-146
-116
-101
-16
-207
-122
-92
-204
-42
-112
-28
-93
-96
-57
-136
-19
-36
-107
-170
-19
-20
-96
-229
-59
-172
-58
-89
-31
-57
-223
-37
-189
-43
-135
-90
-150
-22
-152
-243
-37
-231
-112
-57
-168
-30
-77
-162
-181
-176
-202
-138
-206
-183
-190
-257
-181
-47
-23
-248
-114
-98
-77
-143
-168
-166
-30
-155
-237
-51
-113
-243
-41
-142
-231
-139
-20
-190
-262
-142
-238
-200
-270
-113
-35
-296
-146
-205
-129
-198
-68
-139
-56
-196
-133
-16
-229
-258
-91
-63
-249
-274
-156
-273
-182
-166
-115
-154
-296
-115
-89
-120
-201
-44
-287
-8
1
-260
-297
-282
-114
-323
-326
-166
-241
-109
-21
-236
-280
-19
-80
-77
-271
-292
-340
-300
-206
-308
-99
-156
-277
-245
-132
-56
-172
-53
-271
-32
-5
-235
-329
-1
-150
-247
-268
-133
-341
-221
-2
-43
-229
-190
-337
-40
-71
-72
-149
-25
-253
-44
-113
-164
-370
-284
-235
-9
-234
-291
1
-152
-302
-393
-47
-289
-75
-140
-349
-140
-353
-298
-27
-292
-380
-55
-62
-208
-221
-41
-316
-411
-367
-220
-248
-59
-177
-372
-55
-241
-240
-140
-315
-297
-42
-118
-141
-70
-183
-153
-30
-63
-306
-110
-8
-356
-80
-314
-323
-41
-176
-165
-41
-230
-132
-222
-2
-404
-38
-130
2
-16
-141
-136
-336
-245
-6
-348
-172
-267
-208
-291
-285
-67
-219
-216
-136
-325
-27
-382
-242
-50
-284
-149
-454
-336
-346
-293
-402
-76
-324
-219
-336
-24
-446
-123
-185
-196
-295
-173
-400
-137
-414
-14
-104
-62
-252
-17
-398
-490
-440
-89
-347
-101
-142
-228
-301
-396
-320
-52
-508
-122
-436
-311
-344
-240
-434
-220
-197
-31
-295
-44
-452
-269
-430
-373
-409
-438
-365
-13
-241
-418
-20
-24
-141
-1
-148
-307
-63
-423
-254
-8
-438
-326
-19
-135
-109
-394
2
-398
-273
-158
-453
-346
-86
-431
-536
-549
-379
-483
-85
-476
-483
-104
-87
-462
-249
-540
-164
-360
-100
-238
-45
-390
-59
-156
-248
-257
-150
-164
-160
-545
-520
-364
-384
-237
-456
-28
-366
-147
0
-303
-583
-420
-370
-299
-154
-380
-188
-491
-258
-598
-429
-349
-333
-569
-4
-556
-421
-182
-441
-407
-542
-364
-370
-384
1
-529
-45
-319
-395
-279
-160
-575
-193
-25
-565
-548
-445
-266
-304
-361
-348
-303
-159
-39
-75
-437
-608
-622
-556
-108
-343
-283
-68
-632
-393
-68
-140
-126
-531
-87
-519
-334
-56
-70
-275
-247
-370
-439
-118
-497
-630
-594
-612
-541
-161
-646
-397
-100
-284
-313
0
-59
-200
-601
-663
-529
-676
-610
-7
-228
-50
-494
-382
-250
-306
-274
-163
-110
-375
-124
-237
-98
-645
-692
-495
-593
-647
-178
-531
-336
-697
-646
-671
-633
-542
-461
-200
-658
-525
-389
-643
-258
-329
-656
-400
-692
-557
-506
-594
-67
-623
-113
-459
-211
-713
-115
-602
-131
-181
-30
-227
-53
-719
-631
-641
-434
-552
-716
-368
-19
-439
-443
-552
-85
-79
-449
-254
-620
-474
-121
-210
-285
-608
-456
-513
-496
-13
-418
-399
-437
-258
-15
-623
-178
-336
-379
-721
-299
-729
-742
-64
-13
-438
-603
-666
-278
-767
-200
-686
-497
-256
-541
-491
-360
-615
-326
-682
-759
-524
-580
-323
-578
-793
-478
-107
-440
-657
-790
-605
-21
-163
-392
-560
-336
-430
-613
-182
-15
-782
-607
-281
-269
-25
-699
-89
-593
-280
-269
-438
-103
-359
-387
-157
-747
-619
-176
-772
-500
-735
-691
-797
-612
-573
-36
-617
-630
-357
-718
-210
-48
-185
-20
-556
-206
-722
-559
-416
-578
-745
-564
-273
-62
-300
-218
-711
-744
-805
-277
-522
-346
-280
-762
-438
-381
-379
-198
-737
-555
-466
-218
-511
-334
-353
-259
-225
-675
-350
-585
-647
-52
-395
-324
-106
-826
-279
-81
-396
-611
-312
-529
-291
-129
-594
-437
-188
-649
-820
-237
-673
-6
-387
-195
-503
-350
-83
-88
-626
-30
-313
-13
-633
-403
-319
-832
-185
-146
-839
-9
-557
-799
-841
-700
-465
-669
-769
-235
-849
-863
-819
-76
-912
-931
-909
-762
-607
-522
-64
-769
-377
-133
-414
-772
-206
-746
-730
-393
-901
-72
-33
-811
-372
-298
-835
-637
-302
-481
-958
-878
-867
-25
-260
-448
-21
-930
-903
-581
-547
-664
-843
-140
-337
-383
-513
-368
-221
-474
-169
-673
-728
-266
-862
-753
-815
-647
-106
-15
-728
-912
-147
-828
-6
-694
-434
-737
-335
-183
-732
-841
-364
-155
-116
-966
-822
-65
-22
-853
-208
-326
-826
-472
-491
-436
-771
-1009
-98
-401
-915
-275
-574
-313
-884
-648
-935
-94
-326
-553
-744
-723
-782
-719
-175
-868
-190
-153
-48
-218
-414
-721
-715
-995
-991
-575
-264
-70
-366
-381
-130
-409
-817
-258
-1028
-552
-878
-449
-138
-900
-45
-119
-677
-844
-869
-985
-1019
-60
-649
-915
-93
-1053
-121
-631
-156
-332
-193""".split('\n')
sequence = [int(item) for item in sequence]
jump_until_out(sequence)
372139
def jump_until_out_part2(mysequence, debug=False):
"Returns the number of jumps needed to exit the sequence."
sequence = mysequence[:]
jumps = 0
current = 0
while current >= 0 and current < len(sequence):
this_jump = sequence[current]
if this_jump >= 3:
sequence[current] -= 1
else:
sequence[current] += 1
current += this_jump
jumps += 1
if debug: print(sequence)
return jumps
test_sequence
[0, 3, 0, 1, -3]
jump_until_out_part2(test_sequence, debug=True)
[1, 3, 0, 1, -3] [2, 3, 0, 1, -3] [2, 2, 0, 1, -3] [2, 2, 0, 1, -2] [2, 3, 0, 1, -2] [2, 3, 0, 2, -2] [2, 3, 0, 2, -1] [2, 3, 1, 2, -1] [2, 3, 2, 2, -1] [2, 3, 2, 3, -1]
10
jump_until_out_part2(sequence)
29629538
import operator
bank = [0, 2, 7, 0]
def iter_banks(mybank, debug=False):
"""Iters over possible bank configurations."""
bank = mybank[:]
seen = dict()
hashit = lambda bank: "-".join([str(item) for item in bank])
seen[hashit(bank)] = True
while True:
index, biggest = max(enumerate(bank), key=operator.itemgetter(1))
if biggest % len(bank) == 0:
step = biggest // len(bank)
bank[index] = 0
min_index = index + 1
max_index = min_index + biggest // step
for i in range(min_index, max_index):
bank[i % len(bank)] += step
else:
step = biggest // len(bank) + 1
bank[index] = 0
min_index = index + 1
max_index = min_index + biggest // step
for i in range(min_index, max_index):
bank[i % len(bank)] += step
bank[(i+1) % len(bank)] += biggest - biggest // step * step
if debug: print(bank)
if hashit(bank) in seen:
return len(seen)
else:
seen[hashit(bank)] = True
iter_banks(bank)
5
iter_banks([2, 4, 1, 2])
4
input = "14 0 15 12 11 11 3 5 1 6 8 4 9 1 8 4".split('\t')
input = [int(item) for item in input]
input
[14, 0, 15, 12, 11, 11, 3, 5, 1, 6, 8, 4, 9, 1, 8, 4]
iter_banks(input)
11137
def iter_banks_part2(mybank, debug=False):
"""Iters over possible bank configurations."""
bank = mybank[:]
seen = dict()
niter = 1
hashit = lambda bank: "-".join([str(item) for item in bank])
init_hash = hashit(bank)
seen[hashit(bank)] = True
while True:
index, biggest = max(enumerate(bank), key=operator.itemgetter(1))
if biggest % len(bank) == 0:
step = biggest // len(bank)
bank[index] = 0
min_index = index + 1
max_index = min_index + biggest // step
for i in range(min_index, max_index):
bank[i % len(bank)] += step
else:
step = biggest // len(bank) + 1
bank[index] = 0
min_index = index + 1
max_index = min_index + biggest // step
for i in range(min_index, max_index):
bank[i % len(bank)] += step
bank[(i+1) % len(bank)] += biggest - biggest // step * step
if debug: print(bank)
if hashit(bank) in seen:
return niter - seen[hashit(bank)]
else:
seen[hashit(bank)] = niter
niter += 1
iter_banks_part2(bank)
4
iter_banks_part2([2, 4, 1, 2])
3
iter_banks_part2(input)
1037
input = """wdysq (135) -> sxldvex, wiasj
vjwuuft (33) -> inuci, neddz, rwamq
oislgqy (77)
lphki (233)
wgbviwb (417)
vikip (136) -> eofyk, dkexo, xzsxx
elmieqh (19) -> dbziu, spefs, krtxpw
tmzef (79)
ectlgy (232) -> zmstcy, ncobxr
sdatyo (91)
uisri (11)
smqimxg (132) -> husor, olzys
pltzthr (82)
szaqj (188) -> ptnndxj, fljpye
jqdngi (58)
uazwsu (15)
xrrhso (79)
gxeehd (68) -> iweii, rnqlzmv, hpmtom, vfzwqfr, xfzxrd, sgqhelx, hibjkps
evkoenr (43) -> oecxbyt, qbthgst
qivuzn (52)
udeev (389) -> lphki, qthzk, hpgsb
izgqzs (96) -> vbxzk, ubrrdtd
naxtp (65)
mvtkwn (42)
sxldvex (34)
tnlpmw (49)
rzbrbmy (31) -> dvnqv, helyy
esavxwq (81)
yqgru (465) -> gfuyuz, elmieqh, xckzut, tmbhjxf
ygypj (1303) -> ohcuki, ejdjxu, ytabct
yggqq (855) -> gowlaq, ebtoxi, xpljwl
ubaxya (92)
pjkzokv (23)
lvarp (76)
yrysmsi (14)
nofepy (23)
apjeywv (132) -> kclmmu, exsugls
licrtwb (56)
gspffet (84) -> wqzxa, lptaikg
gkrqba (82)
mqreb (126) -> jvdoo, paykww
xtidu (12)
kjauagn (88)
vvafqjs (56) -> qbvhefh, vfhgfb, iqtyv, ebdva, uxqkau, tydtcxc
snuewn (118024) -> vvafqjs, mhaucon, kikva, mqnbmre
gtkii (163) -> txcon, vuvwa
oaoisa (61)
ssqrs (24)
ybditq (21)
xgqxofa (119) -> bedzc, hdbkw, zwgsh
wxfir (71)
pxvse (19)
xemcuk (23)
paunv (28) -> zzvhmse, mubkcmk, vksephm, cbsdget, mellhhn
couhjsv (11)
tuzpls (58)
puomwl (90) -> wtxjnc, jdjbnc
wudlze (78)
ibslyw (153) -> ksncpee, npvuz
zzmczwl (54)
kidvt (3136) -> tuzzzct, qtqhwon
patlvg (20)
yvvxtg (90)
epxwjhy (22)
epvyxld (17)
xhecnbf (85) -> yituewe, wwhyd
mqsrwsz (26)
bhyzi (73)
batky (18815) -> woctu, iykjtnw, tpiwftj
sdponx (44)
qhotyqx (95) -> vdwfz, agthd, tuwedv, ixkkdyc, lnlkwq, bvmhqar, rlwmfp
nubqteb (89)
zygfdu (70)
tkerz (18)
solqvvf (10)
akiaxs (86)
jsfqyd (70)
aialff (68)
uiilkiq (73)
adlyhbs (46)
tnljdhr (20)
frctm (471) -> isqnx, euhgw, nrfqc, cmmnjch, zevrg
jjklma (105) -> xrrhso, uyjor
lpmnwh (56) -> orrfh, bqfzqra
owxski (23)
gqxyh (18)
lpyntz (91)
ivvyjos (81)
qssjswr (268)
jkbks (225)
jwbdb (83)
axqrke (119) -> mgoic, yivgs, bxggi, xamfjfv
uwizlce (24)
wuwhup (50)
suawycj (60)
wazvn (99)
wtxjnc (53)
ebtoxi (64) -> ttbns, voxychz, umsdpa, ajjmsnw
uuhoydu (82) -> gvucdh, hesyq, glwsf
tshyvej (1373) -> ebiovn, uvzpp, pblqb
bhakbq (991) -> izqxal, nhhytw, flmma, isgky, coqek
hcsjun (60) -> inelfwo, qcnstq, eymmhh, lpyntz
otjbn (67) -> szaqj, kkhlzm, jtzdqn
vtwud (10735) -> jldhlug, ikfzj, tsevkec
heztht (86)
rqonynk (65) -> olzqxap, oyhqsok
esbdjah (61)
hdinwud (1515) -> bdiftdg, ydtuje, aambg
rbbjcq (71)
kimffjc (155)
wifrwut (91)
hrlgs (9)
ieowdj (76)
vpqsjbj (147) -> eziosif, rptcpf
rlurjca (51) -> gtbjtpi, ohpkkhx, zkwnhn, cagvlf, zvlobk, ahsqaob, iactix
yzykfd (43) -> atqfhm, kazwz
kikva (6131) -> gkpalaj, jafrv, uekzf
lsoen (51)
uexqjw (10923) -> dxczurt, omqhf, ylfxp, qofsaux
nlnphv (117) -> vzlzrt, ypiwnt
bemxocu (78)
etcsuuv (312)
ihwbmt (27)
oorvvpt (63)
dvnqv (88)
ntlawn (60)
jhaow (45)
kccpv (17)
kbybvzk (89)
ctcmfv (49)
ujqjrz (89)
xekft (62)
wihtv (1278) -> qgbbhdv, adlyhbs
agthd (158) -> ucnehpw, hnutx
vuytzn (21)
svcqds (7)
emqqf (5)
uqddsal (17) -> trait, sdatyo
uhwlk (252) -> sxtto, qyvsaxn
ttbgzv (46) -> rokri, pygoqsv
oecxbyt (71)
xunvu (33)
mvbtomp (35)
uxqkau (693) -> qubhi, gneut, htmcpcy, qmncyu, wdysq
ycrnaf (177) -> ssqrs, twimkx
nlalji (28)
dgvvo (37)
niydqsy (33)
pprvv (89)
tmbhjxf (135) -> jutep, vkhiz
iaftm (63)
zjnrzph (81) -> gsxmqnw, gnxfwv
ggzqccl (5)
wwtiby (121) -> kytha, dgzywn
zismp (58)
hjbrfba (28)
xnlkkx (79) -> puomwl, xnbvupf, hgksz
bptaz (38)
ozaogat (15)
hxxml (27) -> emazu, kproiw
xpptslq (76)
ilohfvn (10)
hadddf (128) -> geapi, ocltuv
gtprqg (17)
qofsaux (209) -> bbnjml, fwskxq
xpljwl (128) -> ufust, aialff
thhbhrm (41) -> smqkli, ovtfd
xamfjfv (36)
jdjbnc (53)
kecpcmj (72)
ixkkdyc (80) -> wutzrk, antev
ysnbr (35)
cyvwwa (190) -> jtqxxa, pgmtcg, btvsj
uyjor (79)
oztxmy (76)
cancxr (213) -> ivdvlvq, ykxalh
zlads (14)
peokkb (167) -> mqkqtjo, qpchzkg, epssvr, yzose
iauxpc (81)
qbodszw (945) -> rgdvqu, oktgjb, abstvp
dmwutl (73) -> desuqj, etjwno
fcaht (134) -> ajidd, kigxtt
fkgkcwd (51) -> mqwagy, gvtve, djvbdm, ckapp, ldiqm, ezspaq, pyrvg
dqzkic (1032) -> inglhm, dgxdydd, hxhhhu
ydtykm (75)
zatfy (35)
rmenjck (89)
nrfqc (238) -> zgxjjm, fwide
schexn (97)
lrplxk (22)
nroecsv (44)
kiawm (64)
zpfuxux (73)
mvdkbch (28)
sufdte (71) -> gfjeud, rbbjcq
xmjunhp (45)
wsnsqx (7)
etyaxa (13)
cfrqn (57)
tslujme (60)
bebuqpx (33)
wwyuud (11)
gtotarq (95)
vtopekt (65)
hxhhhu (230)
aubvpzf (73)
kllsasv (73) -> enuvuv, jlhipos, hittl, smyzyqg
mgiuz (94)
dsytvn (296) -> mxfonyo, yihru
icsxziz (256)
agflbq (73)
amtrbok (12)
qcebc (20)
eymmhh (91)
pbpva (95)
rodxm (199) -> rzvlc, vnmml, rrmlgct
ekblpi (97) -> flwbwcq, ecwpa, usgpgi, pknsw, gkjwl, zzfom
ltpmtif (86)
bkfnip (4873) -> murnoa, qhzem, udeev
yhiab (249) -> sdponx, yvattv
hbaai (70) -> rmnkup, dgtsic
anazjn (225)
zjjyjj (101) -> viwez, ihwbmt, qnwwjwt
husly (98)
jlhipos (20)
xflsc (2516) -> qodow, vdkhvyp, masvpfj
cenqs (156) -> jhaow, mivmhi
rgrcla (84) -> nroecsv, pexfst
pdddwgk (30)
upefkx (75)
abstvp (46) -> wqgoxl, gbwaobo
glzmsn (93)
bgtzw (37)
flvrfdl (146) -> ybditq, vuytzn, yqdaz
jmzpxql (47)
wulvcf (89)
mxfonyo (20)
aambg (69)
jfjvw (32)
uslhk (8)
wwzjdv (45)
zwtsg (248) -> bjjtifj, ogbov
mbxyf (56)
xckzut (157) -> gaalz, upefkx
trseebo (18)
hbcpm (32)
ggoaczz (88)
zangrh (66)
ktbto (55) -> pdqzfg, mfoismz, mkirruz
rhpcgg (197) -> evkoenr, klpzhup, cigew
kbbcau (25)
porttu (92) -> haaqbj, lttlp
gfsgzni (73)
pyaqqhu (134) -> kdkobz, szvocp
eiyiuq (54)
fjgjfpc (17)
lvvkjx (56)
kinah (22)
ivdvlvq (31)
njerlzh (35)
zzdae (63)
rrkbjhn (78)
hnutx (50)
oqokji (198)
voxychz (50)
zovlqz (56)
ulood (81)
yzttfu (15)
htmcpcy (203)
jmytuxi (221) -> dvuctqv, sgilmx, fqdolnu, rdrncg
rehhbv (17)
ixkpaf (59) -> jqbdh, atvtit, qcebc
antev (89)
jfikdf (20)
ykxalh (31)
vqwclk (19) -> ewldimp, wkeqlvj, ouxuh
hxeqn (528) -> kimffjc, qpgphk, vqfiq
umsdpa (50)
aodfzpi (69)
wutzrk (89)
jyjvpeb (81)
ttbns (50)
wmewl (977) -> yhiab, iordzi, uuhoydu
ydejjeb (159) -> yvcanc, jrrubn
bykuuwe (80)
iesjhoq (336) -> bhzfx, sxexfai, mjounwc
kdrhj (1832) -> rrkbjhn, gzpgvqq
smyzyqg (20)
kigxtt (80)
rokvo (7)
wpcng (50)
koevsvb (97)
yihru (20)
krtglj (18)
cmfwwv (40)
jsaujq (1397) -> rgrcla, vqwclk, rxilrp
gmjxxi (97)
ekvmhd (49)
lttlp (66)
takbkro (200) -> ngjipr, inhfutj
whvpgmw (54)
lqaveh (97)
qthzk (187) -> wntmkg, pjkzokv
haaqbj (66)
vxufrto (40)
zseldo (181) -> hdvtd, papbxya
psmgm (95)
clwtgt (34)
bpwxvvw (89)
pmyrysb (77)
gjclsl (75)
olzys (57)
woqoljk (99)
ocodtdz (30) -> gjclsl, ogioyhi
nbybi (54)
veiaf (139) -> vlqqgb, iaftm
uvzpp (165) -> mxvba, jjtafg
qodow (63) -> oqxnfd, rpxaf, sybnvtp
kouye (58)
dlhuell (84) -> schexn, otzinx
nlrlj (145) -> veknoj, lfpjfv, yrlnu, ugelox
sambc (138) -> mnoinr, pkordz
bypqww (50)
rgkfzk (35)
kiatxq (1232) -> dispgy, irnjtjo, iqpoc
gigtu (60)
xzsrv (89)
dhafpel (636) -> vxddev, nxkpnt, zbuftv
bqfzqra (71)
rcbqqok (243) -> ofrogun, wwyuud
oaqkk (69)
dgxdydd (132) -> mudewqe, bazwto
vxddev (128) -> bzpjiss, qmjamoi
iqtyv (800) -> lvtotof, zddmrx, yzykfd, nlnphv
vdcmrrr (93) -> xuoyxmc, amrcopl, fcnsfy
jutep (86)
cyanr (23)
cxyxa (97)
tuzkv (153) -> iflll, tipewrj
cdegn (52)
mvijo (35)
xnbvupf (60) -> frlgjzf, wtorpp
rwopuzo (15)
uxfsb (76)
qedyqs (157) -> bjzbqzq, alfqryh
rwhgw (76)
csmjozb (79) -> sasym, wmewl, kdrhj, btvmyff, sqkfgo, jcputh
jbujmr (294)
xvjfw (8)
ekfwu (17)
ebiovn (225) -> mnufo, rokvo
ohcuki (197) -> alsfpfg, xsfryrh
zavisuv (15)
glwsf (85)
vurdlqx (196) -> acfdkr, aefjv
ihksnmq (95)
ecwpa (248) -> soyta, ytomr
jldhlug (234)
oazfz (61)
rdrncg (16)
rrrmaka (51)
qhgzopn (66) -> tmzef, iiiupn
ifetn (86)
plgjg (99)
okjds (73)
algkwbg (99)
ugmhzm (56)
vvnhm (135) -> ntrtfv, ihuqmbd
csuywzh (1788) -> wgvpotf, fwtxvo, vikip, bpzhj, bomuft, otjbn, zsotrv
pawpvkj (47)
zzvkwsb (148) -> hjfucl, gxcft
aivbhtz (78)
nyckm (23)
qwqpht (68)
kbuurtb (62)
ahexrp (19)
dlikiv (247) -> kinah, sthtydb
udiai (50)
lopnwz (91)
xbtvux (73)
gvtve (222) -> typbqmw, vdsaccd, sdlta, uisri
vczyhcg (8)
edswttn (58)
kqaua (89)
lmnuii (536) -> rlwoz, gjvmrh, ukapl, lthoz, boahhv, ylpxahm, rqonynk
kwlyw (193) -> hcruo, kecpcmj
trskdr (322) -> hdrfo, bimxf
clbmn (33)
scffzsr (48)
ewldimp (51)
qhixu (21) -> roorbg, oruhqn, psmgm
ypcup (94)
vrszijz (56)
vksephm (157) -> ngkax, tkerz
sxtto (30)
tkojiz (12)
elygt (569) -> bixtvg, xsqbapj, ocodtdz
vdctvf (84) -> iauxpc, cuyweja
rktxkyb (108) -> xjbot, flwjj
zckdwxe (54)
vfzwqfr (54) -> mphzxio, clbmn, donnc, niydqsy
iqpoc (260) -> zlads, jhapr
pojst (51)
ueitm (169) -> emqqf, qqstwmn
dgzywn (39)
ldcmzd (130) -> mertvs, ggoaczz
xtgmmc (306)
mjounwc (9)
ftbiwxy (62)
ogioyhi (75)
fkitgnx (69)
gvucdh (85)
opsrep (43)
olsycb (59)
jiizacd (49)
qbthgst (71)
nxqvwm (69)
rvrzp (113) -> xrqhewm, ifetn
pkordz (84)
vempqu (6)
ulmwqtm (230)
zwgsh (43)
srgob (561) -> plrig, djbtbrk
rmnkup (47)
btvmyff (1442) -> mrqtrkq, zjjyjj, uqkskjn
nrfyua (11)
nuozixg (1064) -> nnelc, zmzobfp, oggljxs
icrvj (22)
vksphlf (1423) -> kdykksn, wwtiby, uqddsal
xmnbar (58)
ukapl (195)
lijszmh (44)
zzonk (28)
jhapr (14)
mrqtrkq (88) -> zaxbfog, pawpvkj
aibtig (109) -> ggzqccl, hyxtojc
vuvwa (87)
ahysv (90)
mqwagy (88) -> uxlisdh, rmenjck
xpttnwd (95)
oullg (25) -> dlhuell, imrwgqw, hadddf, rktxkyb, zwtsg, wllrov
bwsgfa (22)
vmiykci (153)
jcgvp (18) -> mvbtomp, zatfy
wetluzb (33)
zvnzrr (37)
sgilmx (16)
geabygu (96)
kakvi (41)
fuujiy (92) -> xnfuz, urrhqwc, fmdfm
ppvsy (285)
nyuxiu (122) -> nzvqjrt, dhzsao
tjwynpa (75)
gowlaq (138) -> uwvfga, bnvlydl
snywwu (26) -> snqey, aodfzpi
cvude (41)
snqey (69)
ejqam (17)
pgmtcg (47)
rtcqml (85) -> zangrh, dspug
ezspaq (215) -> rehhbv, epvyxld, oguxu
ytabct (89) -> frfotet, zerxp
nxkpnt (248)
qubhi (107) -> lnznpq, scffzsr
tfotbwz (424)
wkgyfpp (824) -> ccbie, iesjhoq, kdffrsb
wjsxcmb (95)
ztdbvxb (53) -> zismp, dqoagdt, yxfjglq, givaxj
ouxuh (51)
xfzxrd (22) -> kakvi, mjlvx, wridnv, zeexkde
rekerpj (7)
redkli (81)
qdkhjb (53)
yituewe (95)
ocnkhq (10)
iaayhc (300) -> fwhhoz, ycrnaf, jkbks, anazjn, yhzjjgc, pocwgw
mjlzzq (212) -> hwycny, gmzabjk
rhaoo (36) -> kdzhiq, ydkhmp, dsytvn, wzezz
fqkzcq (293) -> gztng, oiaxzp
essijo (1248) -> wuqapgg, msmxf
ckapp (94) -> clktah, akiaxs
nktwwvp (159) -> qivuzn, cdegn
qxwdzl (50)
lfpjfv (48)
lmfclbd (14)
cglyptu (240) -> icrvj, epxwjhy, tpmqmg
dhzsao (24)
bckfa (16) -> ntlawn, tslujme, ccjze, woklobt
mivmhi (45)
bfjxeyo (24)
plrig (53)
ijlooi (1429) -> jcgvp, zvsgd, fzafkj
pyhcj (64)
gdvbtjk (71)
fxrkz (70)
husor (57)
riiaj (44) -> lvvkjx, mbxyf
lxmvg (4738) -> msjbv, ijoaqyv, yname
wntmkg (23)
helyy (88)
muxvdx (57) -> veiaf, rcbqqok, gfnmx, zezeds, ktbto, qedyqs
rroub (41)
hnwfe (89)
enuvuv (20)
wzzlsg (18)
hpgsb (81) -> xpptslq, jtoryw
woklobt (60)
jicyq (18)
lybwr (64)
ujgpnsy (12)
mbtweib (86)
vgzejbd (10) -> vuoqao, vwkkml, kmpfxl, snuewn, jjgjvki, fiprusz
vgfveov (198)
lvtotof (49) -> pprvv, gsckda
ylpxahm (33) -> jyjvpeb, tytsynv
glximrw (53)
iykjtnw (542) -> dizqtw, oiozpzq, dmwutl
xuoyxmc (51)
wpvale (18626) -> wihtv, isbdm, gxeehd
jruttt (28)
urrhqwc (84)
yfyaho (7)
klpzhup (11) -> befwz, mypula, xmnbar
kclmmu (49)
qcnstq (91)
sasym (13) -> vimnt, eoign, lusub, peokkb, mlhaxv
mgoxhns (130) -> edswttn, ioycu
stzzli (89)
ltesfzf (44) -> sufdte, vpqsjbj, oghyxz, hxxml, mnhrjdv
yxfjglq (58)
fuhbay (82)
gxcft (25)
rwamq (86)
qxqwmye (68)
ketopn (42)
tmsmb (84) -> pkxrm, pbbkg
zerxp (75)
zpbrw (95)
wuqapgg (66)
nmsats (82)
vvzctek (9)
cmoty (91)
qkkhj (88)
pocct (99)
xyfvxng (45)
mqnbmre (2069) -> vecnb, azhddw, muxvdx, qbodszw, yggqq
msjbv (918) -> nktwwvp, qijleb, ttnoqm, ulaio, furlcyu
mkirruz (70)
mubkcmk (163) -> solqvvf, ocnkhq, wntitz
lvzzwy (89)
ypiwnt (55)
bveilrx (306) -> pxvse, ahexrp
shiaqps (45)
mlhaxv (297) -> ctcmfv, ekvmhd
eiohuhm (72)
isqnx (122) -> azgohsw, pltzthr
qqstwmn (5)
fiwvclv (80)
zobti (87)
qbvhefh (53) -> ylazd, cyvwwa, sfkpzr, zsjlevq, zseldo
xqgxel (54)
yrlnu (48)
rrmlgct (19)
jtzdqn (178) -> lsoen, pojst
nffvt (37)
axtepsa (13)
ngkax (18)
viwez (27)
kdykksn (7) -> geabygu, cfiqn
zvlobk (419) -> mdfkbxa, wzzlsg
xsqbapj (164) -> xqxvktz, xvjfw
nzvqjrt (24)
gbqbg (18)
hskko (38)
bgmntpq (6)
zddmrx (227)
dgtsic (47)
iijfq (73)
qytxu (71)
mklcsj (54)
jnwdraz (63) -> aubvpzf, zpfuxux
hudde (1072) -> wyrfplr, rzbrbmy, ujmfmiu
jcoyk (18)
dspug (66)
qgbbhdv (46)
neddz (86)
boahhv (195)
ajjmsnw (50)
lusub (209) -> nrloleu, lfwpqb
bkgise (17)
xsgyar (568) -> fesce, vfteg, thhbhrm, vvnhm
mudewqe (49)
trait (91)
fljpye (46)
xobszr (61)
pkxrm (57)
qrynkpt (22) -> kswafh, oztxmy, zejcp
frlgjzf (68)
aomksx (70) -> pmyrysb, robpw
gjvmrh (167) -> xxtyban, mfjdb
atvtit (20)
ihuqmbd (34)
mfjdb (14)
rptcpf (33)
ljitswv (89)
zkujvlv (51)
ydtuje (69)
emazu (93)
sqkfgo (1451) -> ueitm, okbtg, cnzynyj
flmma (86) -> ygglox, ocvrlia
jnqgs (76)
ctken (72)
kxdbyp (20)
ktlkx (112) -> etyaxa, axygpr, rqsyc, axtepsa
hesyq (85)
tydtcxc (919) -> swcsd, nkclzqq, dhcopz
sqbxzl (12)
dispgy (52) -> olsycb, ynecxzo, esqvkcm, xclsj
djbtbrk (53)
svjnd (47)
fizbyu (78)
vqfiq (61) -> zdrhuz, jmzpxql
tqsrg (70)
dulrvcq (2086) -> apjeywv, vurdlqx, bwemy, ulmwqtm, qkxtwct
gfjeud (71)
xdzgwl (220) -> jicyq, prbbfe
jcputh (196) -> xdzgwl, rodxm, piutfin, ezmot, bckfa, zyisjsj, icsxziz
gbwaobo (94)
mlyar (44)
zsotrv (751) -> wudlze, hjmreq
chxgqe (47)
junva (83)
fmdfm (84)
ewwab (70)
hdrfo (51)
qijleb (111) -> qngug, voxemk
qmjamoi (60)
pyrvg (230) -> shcavm, trseebo
joszidy (95)
rxilrp (138) -> gtprqg, xqgqp
ptnndxj (46)
typbqmw (11)
fesce (39) -> fuhbay, jozav
oeixw (65)
gjhfseh (20)
zeexkde (41)
ynecxzo (59)
oqfpo (78)
keazynv (68)
gnsdn (51) -> njerlzh, rgkfzk, lhyzwtf
sqljeh (20)
dclmckh (93)
rqsyc (13)
wvwjep (70)
ncobxr (8)
builgr (78)
xkdjbxo (81)
bzpjiss (60)
vfomix (95)
wtorpp (68)
pruui (1276) -> glaosn, xgqxofa, ggkael
monhu (76)
piutfin (156) -> wpcng, qxwdzl
wrwim (10)
jrrubn (52)
vkdytw (24)
vdtdmy (26)
pbbkg (57)
uwviodb (208) -> bkxfso, evrtfzj
vfhgfb (1084) -> gnsdn, ttbgzv, pyaqqhu, riiaj
iordzi (223) -> cfrqn, nzuhp
biffdx (42)
bpsesr (50)
cglfuq (199) -> vempqu, noogeuk, bgmntpq
bkxfso (19)
oopnu (88)
wlavb (92)
gmzabjk (41)
ehrfv (57) -> pruui, eondv, ygypj, vksphlf
lpwuzn (89)
cnzynyj (89) -> wwzjdv, xyfvxng
dgmtgrv (12)
hpmtom (50) -> zzpwgcd, qxqwmye
jafrv (719) -> qhgzopn, aomksx, porttu
msmxf (66)
ldiqm (266)
llydxxz (37)
vdsaccd (11)
cbsdget (81) -> licrtwb, zovlqz
qgwhbwh (62)
epuqu (17)
loojs (43)
ovshy (95)
qhayeqe (86) -> opsrep, loojs, fvukbun
amrcopl (51)
tsncd (108) -> zygfdu, jsfqyd
oguxu (17)
skyaki (69)
ufxfx (25)
mpzyapm (19409) -> elygt, ltesfzf, dhqrk
lthoz (150) -> rwopuzo, uazwsu, ozaogat
xxtyban (14)
ggkael (54) -> gmjxxi, koevsvb
yuyhys (12)
qngug (76)
kazwz (92)
owysb (71)
eondv (25) -> uxggaix, ngfxax, ztdbvxb, jmytuxi, hkxfb, rvrzp, ppvsy
oyhqsok (65)
iflll (97)
xjbot (85)
tytsynv (81)
rsyxcdq (157)
vuoqao (102055) -> kahduw, lxmvg, vtwud, ktcffyf, ggdoqnl
ocvrlia (48)
cpuxdo (75) -> rroub, cvude
tpiwftj (482) -> cancxr, xhecnbf, ilcmx
eaoxb (2777) -> cfrbz, vmiykci, kllsasv
alfqryh (54)
gfnmx (214) -> ekfwu, ejqam, kccpv
daerl (14)
nvahhge (14)
rzvlc (19)
ktcffyf (1777) -> dhafpel, jtyljl, nmcewof, rhaoo, xsgyar, otetl, essijo
pntvfpd (49)
hkxfb (285)
ngfcc (87)
yqdaz (21)
qzwauo (49)
kdkobz (11)
tslbp (224) -> mvijo, qolgxnd
vlqqgb (63)
zsjlevq (175) -> bemxocu, builgr
xzsxx (79) -> zugkqyx, jubeqci
yvattv (44)
nhhytw (44) -> skyaki, nxqvwm
zmzobfp (75) -> ntxtwk, yhvdjl, xzsrv
sretj (240) -> wsnsqx, rekerpj, knciro, svcqds
awwhgzp (70)
adqnigs (72)
oipscid (85)
xsyqdlv (26)
eoign (134) -> aujeia, ngfcc, zobti
nfulfov (14) -> aivbhtz, exlwxxi, oqfpo
fqehxv (168) -> lgonp, vxufrto
impzr (70) -> lybwr, pyhcj
bnvlydl (63)
olzqxap (65)
frfotet (75)
ajidd (80)
qyvsaxn (30)
rlwoz (19) -> kjauagn, qkkhj
hysssy (12)
ptmsqz (81)
kahduw (31) -> qhotyqx, xhxek, bhakbq, ivgpv, lmnuii, frctm
ejdjxu (41) -> wazvn, algkwbg
ylfxp (99) -> heztht, mbtweib
isgky (80) -> kecckss, obakqyf
xclsj (59)
qhzem (47) -> fnkgp, ujipv, tuzkv
zaxbfog (47)
uekzf (1315) -> qjxikz, bptaz
gkjwl (50) -> pucdapo, zckdwxe, xqgxel, vcprhe
xqgqp (17)
ntrtfv (34)
ufust (68)
yvcanc (52)
jtqxxa (47)
rfumv (92)
qjxikz (38)
sybnvtp (59)
pugxio (62)
olfwppt (154) -> bwsgfa, lrplxk
ugelox (48)
oruhqn (95)
rlwmfp (158) -> bypqww, wuwhup
qnwwjwt (27)
hjmreq (78)
paykww (22)
aefjv (17)
hvpess (1924) -> vaxtfaa, wbnmb
dbziu (96)
xnfuz (84)
tpmqmg (22)
qrinzet (69)
ldrpjd (88)
pocwgw (13) -> glximrw, bhmirp, rcqkas, qdkhjb
sxexfai (9)
euhgw (208) -> xrbkzmk, xsyqdlv, vdtdmy
ulaio (203) -> pdddwgk, sakmm
vnmml (19)
ksncpee (28)
pucdapo (54)
ucnehpw (50)
btvsj (47)
veknoj (48)
papbxya (75)
sdzhsq (94)
orrfh (71)
gnxfwv (68)
grthhzv (244) -> dgmtgrv, tkojiz
dxcozh (35) -> phrpja, ahysv
vekndsc (94)
ujmfmiu (39) -> vrszijz, ugmhzm, sdrcc
jctafp (62)
bhmirp (53)
tmqlkof (28)
wyrfplr (109) -> qzwauo, pntvfpd
shcavm (18)
xmkegiw (28)
ydkhmp (290) -> cyanr, nofepy
ivkcc (70)
ujipv (183) -> gkrqba, nmsats
lnznpq (48)
xqxvktz (8)
wzezz (264) -> bfjxeyo, vkdytw, uwizlce
nvgohm (26)
ydqtt (158) -> oeabdth, bkgise, fjgjfpc
nmcewof (1182) -> plgjg, imtzl
bbnjml (31)
iweii (8) -> lvzzwy, nubqteb
kmpfxl (134829) -> csuywzh, ehrfv, bkfnip
dbkxe (34)
sfkpzr (76) -> lsszcka, manlcoz, oipscid
bbyoqzx (14)
uuavydd (43)
hjehgnc (489) -> ujqjrz, wulvcf
qmncyu (17) -> ofveqm, qgwhbwh, ftbiwxy
zzfom (210) -> jruttt, mvdkbch
cigew (185)
nozgflw (89)
trfjf (174) -> hskko, evbeo
idqhx (12)
noogeuk (6)
ccjze (60)
bedzc (43)
uymju (8) -> ectlgy, pchapba, tsncd
jvwvi (86)
xrqhewm (86)
ifijr (28)
tuzzzct (50)
zwrjdk (82)
ekvzyod (11)
vivco (626) -> okhisbv, biffdx, rbascuz
atujmm (250)
bdiftdg (69)
wqzxa (82)
jtoryw (76)
sttlowq (207) -> xmkegiw, tmqlkof
wqkoep (90)
sdloeq (14)
hzruk (47)
mgoic (36)
mqkqtjo (57)
gsxmqnw (68)
pexfst (44)
ycfbxe (254) -> tnljdhr, jfikdf
kenxmax (91)
yhvdjl (89)
gzpgvqq (78)
inglhm (94) -> qwqpht, keazynv
uytmyv (91)
wqgoxl (94)
yfxbu (32) -> jbujmr, mjlzzq, hcrys, mwfksx, fcaht, ycfbxe, tslbp
mnhrjdv (185) -> lmfclbd, sdloeq
gcasp (17)
jjgjvki (99205) -> suuppr, csmjozb, uexqjw, cckrzh, yuzzsk
zvqvvyp (39)
bgpab (1781) -> qmqpbm, rdwxvvp, vjwuuft, dlikiv, acaqfng
prbbfe (18)
gaalz (75)
robpw (77)
rcqkas (53)
axsimnf (403) -> yfyaho, qeyjc
mypula (58)
mnahxn (52) -> cxyxa, lqaveh
smqkli (81)
nkclzqq (44) -> bhyzi, okjds, gfsgzni
soyta (9)
cagvlf (267) -> ypcup, mbffei
dvuctqv (16)
hdvtd (75)
lexqf (96)
cuyweja (81)
vfteg (17) -> dclmckh, iihwb
fzuosl (94)
ipctg (80) -> zzyxzr, rqdtsp, esbdjah
yuzzsk (3542) -> ijlooi, yqgru, oullg, ekblpi, hudde
tpvhe (42) -> sretj, grthhzv, luqqu, uwqee, qssjswr, kbrwk
gpbdzes (96) -> dgvvo, zvnzrr
cmfwvem (23)
befwz (58)
mellhhn (166) -> vvzctek, hrlgs, evqbli
bmxolxn (20) -> bpwxvvw, sfnix, fxnap
rnqlzmv (88) -> tnlpmw, hrfbh
qeyjc (7)
jozav (82)
gjahajj (62)
qyfzonc (89)
ngjipr (24)
sepmxir (33) -> uuavydd, xocoiqa
qizpmf (98)
mroft (77)
lyeyx (61)
gtgovt (134) -> gqxyh, gbqbg
hrihd (50)
pygoqsv (55)
dxczurt (89) -> rupxxhm, lopnwz
mdfkbxa (18)
hcruo (72)
ytomr (9)
bhzfx (9)
mbgapsj (39)
omqhf (105) -> jwbdb, junva
wntitz (10)
zugkqyx (89)
ntxtwk (89)
phrpja (90)
ilcmx (129) -> xbtvux, agflbq
hhcoc (63)
bxggi (36)
obakqyf (51)
xrbkzmk (26)
sthtydb (22)
xvljr (21744) -> nfulfov, takbkro, gspffet, fqehxv
hofirm (33)
okhisbv (42)
uldgij (64)
sakmm (30)
zbuftv (62) -> glzmsn, oacnj
jxevsc (57) -> wvwjep, jilzdse, fxrkz, vkgfrb
ioycu (58)
ysuttai (72)
ttnoqm (133) -> vtopekt, naxtp
ereyjs (54)
hgksz (174) -> msuvilq, couhjsv
luqqu (112) -> yfaihrb, fizbyu
bixtvg (180)
kswafh (76)
fwide (24)
ghgou (12)
aujeia (87)
lgqad (75)
szvocp (11)
yivgs (36)
lnlkwq (216) -> nvahhge, bbyoqzx, daerl
qtcck (137) -> lgqad, ngtdwvu
wkeqlvj (51)
vbxzk (75)
uqkskjn (132) -> kbbcau, ufxfx
gacpvy (26)
ccbie (90) -> cmoty, uytmyv, dmiccse
suuppr (9751) -> uymju, rhpcgg, vivco
fqdolnu (16)
vcprhe (54)
iihwb (93)
swcsd (91) -> ltpmtif, jvwvi
nbwaei (61)
zdgyktc (84) -> jnqgs, uxfsb, xkzcttf
bimxf (51)
pdqzfg (70)
bomuft (785) -> xobszr, idpttp
kytha (39)
zyisjsj (58) -> woqoljk, pocct
hwycny (41)
ofveqm (62)
oqxnfd (59)
pnpsnjp (803) -> zpbrw, pbpva
ysekeoo (126) -> suawycj, gigtu
gneut (203)
zdrhuz (47)
qmqpbm (7) -> owysb, gdvbtjk, qytxu, wxfir
imrwgqw (170) -> yhncv, mklcsj
dymzl (72)
vzlzrt (55)
lfwpqb (93)
dirhtk (65) -> hrihd, udiai, bpsesr
donnc (33)
iactix (293) -> ulood, xkdjbxo
acaqfng (271) -> wrwim, ilohfvn
tuwedv (150) -> eiyiuq, ereyjs
mjlvx (41)
fwhhoz (72) -> rrrmaka, zkujvlv, fyaco
msuvilq (11)
mxvba (37)
smvskd (1262) -> cglfuq, rtcqml, zjnrzph
ggdoqnl (9436) -> hjehgnc, xnlkkx, srgob
aifpyc (61)
vwkkml (148790) -> hvpess, nuozixg, tshyvej, yfxbu, kiatxq
tipewrj (97)
pblqb (7) -> kouye, ibydam, jqdngi, tuzpls
oktgjb (70) -> lcbgeev, zwrjdk
dqoagdt (58)
xkzcttf (76)
zevrg (108) -> stzzli, kbybvzk
lomrivn (92)
grkzvkj (124) -> xemcuk, cmfwvem
uwvfga (63)
frxshon (95)
zzvhmse (157) -> ujgpnsy, idqhx, hysssy
ahsqaob (75) -> gtotarq, joszidy, frxshon, vfomix
jqbdh (20)
kvzmie (69)
oiaxzp (22)
spefs (96)
fxnap (89)
azhddw (909) -> smqimxg, mgoxhns, izgqzs
epssvr (57)
kxhvvgi (8) -> ihksnmq, wjsxcmb
etjwno (91)
tlwxovy (91)
capuc (91)
evbeo (38)
djvbdm (50) -> zzmczwl, whvpgmw, szqdapo, nbybi
mbffei (94)
uwqee (90) -> qyfzonc, nozgflw
bpzhj (251) -> hbaai, gfsnz, snywwu, ktlkx
dhcopz (207) -> hjbrfba, nlalji
jilzdse (70)
lgonp (40)
zvsgd (58) -> yzttfu, zavisuv
rdwxvvp (203) -> mlyar, lijszmh
wridnv (41)
ovtfd (81)
kttsf (35)
murnoa (238) -> gpbdzes, gtgovt, mqreb, grkzvkj, nyuxiu
otzinx (97)
bjjtifj (15)
irnjtjo (12) -> ubaxya, lomrivn, rlhmcf
zezeds (79) -> kbuurtb, pugxio, gjahajj
ofrogun (11)
bjzbqzq (54)
qolgxnd (35)
vdkhvyp (52) -> kfkfyx, mgiuz
rlhmcf (92)
okbtg (35) -> dymzl, eiohuhm
kkhlzm (96) -> wlavb, rfumv
dmiccse (91)
esqvkcm (59)
zzyxzr (61)
tegtsu (72)
kbrwk (124) -> tegtsu, adqnigs
mertvs (88)
awmmdn (49)
pknsw (74) -> lexqf, pxadg
fwtxvo (71) -> ibslyw, jnwdraz, ydqtt, flvrfdl
flwjj (85)
asbmk (76)
sdlta (11)
vdwfz (234) -> amtrbok, brpgc
exsugls (49)
yfaihrb (78)
oghyxz (213)
manlcoz (85)
mnoinr (84)
ibydam (58)
hjfucl (25)
lcbgeev (82)
ygglox (48)
xhxek (425) -> uwviodb, cenqs, mnahxn, ysekeoo, vdcmrrr, vdctvf
krtxpw (96)
zgxjjm (24)
vkhiz (86)
inhfutj (24)
qkxtwct (166) -> jfjvw, hbcpm
mfoismz (70)
voxemk (76)
inuci (86)
wllrov (200) -> nvgohm, mqsrwsz, gacpvy
fyaco (51)
ngtdwvu (75)
kfkfyx (94)
iiiupn (79)
gkpalaj (76) -> jjklma, ydejjeb, sttlowq, axqrke, ipctg
ubrrdtd (75)
fwskxq (31)
nzuhp (57)
npvuz (28)
fnkgp (65) -> vekndsc, sdzhsq, fzuosl
roorbg (95)
cfiqn (96)
fcnsfy (51)
idpttp (61)
vaxtfaa (83)
jubeqci (89)
uxggaix (195) -> shiaqps, xmjunhp
vvlimno (63)
txcon (87)
ocltuv (75)
kdffrsb (187) -> ldrpjd, oopnu
imtzl (99)
jvdoo (22)
yhzjjgc (93) -> xunvu, bebuqpx, wetluzb, hofirm
clktah (86)
givaxj (58)
fiprusz (88) -> bgydix, mpzyapm, xvljr, bnywvsx, snmey, batky, wpvale
wgvpotf (115) -> tmsmb, zzvkwsb, olfwppt, impzr
ohpkkhx (385) -> kttsf, ysnbr
eofyk (41) -> ctken, jyrzc, ysuttai
ubllty (91) -> qizpmf, husly
aqgumo (47)
zezbp (91)
mphzxio (33)
gfuyuz (209) -> jiizacd, awmmdn
rpxaf (59)
aewlgu (62) -> oazfz, aifpyc, oaoisa, nbwaei
coqek (166) -> uslhk, vczyhcg
kecckss (51)
jqlbenn (65)
jyrzc (72)
azgohsw (82)
qtqhwon (50)
furlcyu (85) -> lpwuzn, hnwfe
evqbli (9)
zwvhgce (121) -> chxgqe, hzruk
xsfryrh (21)
jjtafg (37)
acfdkr (17)
rupxxhm (91)
nnelc (342)
hdbkw (43)
usgpgi (182) -> ketopn, mvtkwn
thxqmj (81)
bgydix (16136) -> tpvhe, excdqtl, yjvfni, iaayhc
pxadg (96)
uiryg (2879) -> aibtig, sepmxir, ixkpaf
exlwxxi (78)
vecnb (897) -> atujmm, qrynkpt, trfjf
zkwnhn (329) -> oorvvpt, zzdae
ezmot (96) -> bykuuwe, fiwvclv
vrxkr (37) -> jxevsc, gtkii, nlrlj, kwlyw, fqkzcq
zmstcy (8)
axygpr (13)
yzose (57)
kproiw (93)
lptaikg (82)
cmmnjch (6) -> ewwab, awwhgzp, tqsrg, ivkcc
qpgphk (33) -> lyeyx, cqfsg
hittl (20)
wbnmb (83)
tsevkec (54) -> yvvxtg, wqkoep
mwfksx (216) -> mbgapsj, zvqvvyp
bvmhqar (224) -> epuqu, gcasp
oeabdth (17)
pchapba (70) -> kqaua, ljitswv
gsckda (89)
gtbjtpi (265) -> ovshy, xpttnwd
xocoiqa (43)
woctu (56) -> qrorhfv, axsimnf, wgbviwb
foxvut (77)
zerhdhs (150) -> xtidu, yuyhys, ghgou, sqbxzl
rqdtsp (61)
dizqtw (103) -> ieowdj, vgkhk
ebdva (718) -> vgfveov, zerhdhs, kxhvvgi, oqokji, lpmnwh
ikfzj (212) -> nrfyua, ekvzyod
hcrys (63) -> foxvut, oislgqy, mroft
vkgfrb (70)
bwemy (92) -> oaqkk, kvzmie
yname (1373) -> qhayeqe, dxcozh, dirhtk, zwvhgce
desuqj (91)
bnywvsx (19757) -> pnpsnjp, paunv, hxeqn
wiasj (34)
lhyzwtf (35)
gztng (22)
szqdapo (54)
flwbwcq (142) -> xekft, jctafp
ijoaqyv (91) -> ldcmzd, sambc, aewlgu, wrkoi, xtgmmc, cglyptu, qhixu
knyvyft (81)
ngfxax (139) -> uiilkiq, iijfq
atqfhm (92)
masvpfj (184) -> ifijr, zzonk
yhncv (54)
wwhyd (95)
oggljxs (314) -> awrbrc, yrysmsi
sdrcc (56)
sgqhelx (60) -> hhcoc, vvlimno
snmey (84) -> bgpab, xflsc, kidvt, rlurjca, uiryg, eaoxb, dulrvcq
qpchzkg (57)
mhaucon (2652) -> smvskd, wkgyfpp, fkgkcwd, jsaujq
brpgc (12)
vimnt (91) -> rwhgw, asbmk, lvarp, monhu
excdqtl (378) -> hcsjun, trskdr, tfotbwz
uxlisdh (89)
isbdm (1276) -> aqgumo, svjnd
alsfpfg (21)
zzpwgcd (68)
glaosn (86) -> ptmsqz, ivvyjos
fvukbun (43)
rokri (55)
qrorhfv (93) -> redkli, thxqmj, esavxwq, knyvyft
eziosif (33)
jqgfu (40)
nbqaqp (298) -> owxski, nyckm
hyxtojc (5)
awrbrc (14)
ogbov (15)
rbascuz (42)
kdzhiq (63) -> kenxmax, tlwxovy, zezbp
geapi (75)
oiozpzq (127) -> uldgij, kiawm
fzafkj (88)
zejcp (76)
wrkoi (124) -> capuc, wifrwut
dhqrk (173) -> zdgyktc, etcsuuv, uhwlk
jtyljl (348) -> bveilrx, nbqaqp, fuujiy
otetl (1340) -> patlvg, gjhfseh
mnufo (7)
cfrbz (117) -> krtglj, jcoyk
lsszcka (85)
rgdvqu (166) -> dbkxe, clwtgt
yjvfni (1179) -> ofnqgn, rsyxcdq, cpuxdo
gfsnz (14) -> ydtykm, tjwynpa
knciro (7)
sfnix (89)
cqfsg (61)
izqxal (142) -> kxdbyp, sqljeh
ivgpv (1040) -> ubllty, qtcck, bmxolxn
bazwto (49)
twimkx (24)
evrtfzj (19)
ofnqgn (19) -> qrinzet, fkitgnx
nrloleu (93)
ylazd (201) -> jqlbenn, oeixw
hrfbh (49)
dkexo (146) -> nffvt, llydxxz, bgtzw
hibjkps (106) -> cmfwwv, jqgfu
oacnj (93)
inelfwo (91)
vgkhk (76)
cckrzh (6841) -> hdinwud, dqzkic, vrxkr"""
test_input = """pbga (66)
xhth (57)
ebii (61)
havc (66)
ktlj (57)
fwft (72) -> ktlj, cntj, xhth
qoyq (66)
padx (45) -> pbga, havc, qoyq
tknk (41) -> ugml, padx, fwft
jptl (61)
ugml (68) -> gyxo, ebii, jptl
gyxo (61)
cntj (57)"""
def parse(input):
supported = {}
supporters = {}
weights = {}
for row in input.split('\n'):
if '->' in row:
a, b = row.split('->')
supporter, supporter_weight = a.split()
supporters[supporter] = 1
weights[supporter] = int(supporter_weight[1:-1])
if ',' in b:
for item in b.split(','):
supported[item.strip()] = 1
else:
supported[b] = 1
else:
supporter, supporter_weight = row.split()
weights[supporter] = int(supporter_weight[1:-1])
return supported, supporters, weights
supported, supporters, weights = parse(test_input)
for item in supporters:
if item not in supported:
print(item)
tknk
supported, supporters, weights = parse(input)
for item in supporters:
if item not in supported:
print(item)
vgzejbd
def parse_part2(input):
supported = {}
supporters = {}
weights = {}
children = {}
for row in input.split('\n'):
if '->' in row:
a, b = row.split('->')
supporter, supporter_weight = a.split()
supporters[supporter] = 1
weights[supporter] = int(supporter_weight[1:-1])
if ',' in b:
children[supporter] = [item.strip() for item in b.split(',')]
for item in b.split(','):
supported[item.strip()] = 1
else:
children[supporter] = b.strip()
supported[b] = 1
else:
supporter, supporter_weight = row.split()
weights[supporter] = int(supporter_weight[1:-1])
return supported, supporters, weights, children
supported, supporters, weights, children = parse_part2(test_input)
print(test_input)
pbga (66) xhth (57) ebii (61) havc (66) ktlj (57) fwft (72) -> ktlj, cntj, xhth qoyq (66) padx (45) -> pbga, havc, qoyq tknk (41) -> ugml, padx, fwft jptl (61) ugml (68) -> gyxo, ebii, jptl gyxo (61) cntj (57)
children
{'fwft': ['ktlj', 'cntj', 'xhth'], 'padx': ['pbga', 'havc', 'qoyq'], 'tknk': ['ugml', 'padx', 'fwft'], 'ugml': ['gyxo', 'ebii', 'jptl']}
def sum_of_children_and_self(node, weights, children):
"Sums the weight of children and that of the node itself."
if node in children:
return weights[node] + sum([sum_of_children_and_self(child, weights, children) for child in children[node]])
else:
return weights[node]
sum_of_children_and_self('tknk', weights, children)
778
sum_of_children_and_self('ugml', weights, children)
251
sum_of_children_and_self('padx', weights, children)
243
sum_of_children_and_self('fwft', weights, children)
243
Okay, we now have a way of doing this:
current_node_list = [['tknk']]
layers = [] # list of lists
layers.append(current_node_list)
while True:
current_layer = []
for node_list in current_node_list:
had_children = False
for node in node_list:
if node in children:
had_children = True
current_layer.append(children[node])
if not had_children:
break
layers.append(current_layer)
current_node_list = layers[-1]
layers
[[['tknk']], [['ugml', 'padx', 'fwft']], [['gyxo', 'ebii', 'jptl'], ['pbga', 'havc', 'qoyq'], ['ktlj', 'cntj', 'xhth']]]
reversed_layers = reversed(layers)
for layer in reversed_layers:
layer_weights = [[sum_of_children_and_self(node, weights, children) for node in node_list] for node_list in layer]
if any([len(set(layer_weight)) > 1 for layer_weight in layer_weights]):
break
layer_weights
[[251, 243, 243]]
layer
[['ugml', 'padx', 'fwft']]
Okay, let's run this on the big example. We can do copy and pasting :)
supported, supporters, weights, children = parse_part2(input)
def build_layers(start):
current_node_list = [[start]]
layers = [] # list of lists
layers.append(current_node_list)
while True:
current_layer = []
for node_list in current_node_list:
had_children = False
for node in node_list:
if node in children:
had_children = True
current_layer.append(children[node])
if not had_children:
break
layers.append(current_layer)
current_node_list = layers[-1]
return layers
layers = build_layers('vgzejbd')
reversed_layers = layers
from collections import Counter
for ind, layer in enumerate(reversed_layers):
layer_weights = [[sum_of_children_and_self(node, weights, children) for node in node_list] for node_list in layer]
if any([len(set(layer_weight)) > 1 for layer_weight in layer_weights]):
break
layer
[['vuoqao', 'vwkkml', 'kmpfxl', 'snuewn', 'jjgjvki', 'fiprusz']]
c = Counter(*layer_weights)
different_value = c.most_common(n=2)[1][0]
different_value
159246
layer_weights
[[159240, 159246, 159240, 159240, 159240, 159240]]
layer[0][layer_weights[0].index(different_value)]
'vwkkml'
layers = build_layers('vwkkml')
for ind, layer in enumerate(layers):
layer_weights = [[sum_of_children_and_self(node, weights, children) for node in node_list] for node_list in layer]
if any([len(set(layer_weight)) > 1 for layer_weight in layer_weights]):
break
layer_weights
[[2090, 2090, 2090, 2090, 2096]]
c = Counter(*layer_weights)
different_value = c.most_common(n=2)[1][0]
different_value
2096
layer[0][layer_weights[0].index(different_value)]
'kiatxq'
layers = build_layers('kiatxq')
for ind, layer in enumerate(layers):
layer_weights = [[sum_of_children_and_self(node, weights, children) for node in node_list] for node_list in layer]
if any([len(set(layer_weight)) > 1 for layer_weight in layer_weights]):
break
layer_weights
[[59, 59, 59, 59], [92, 92, 92], [14, 14]]
weights['kiatxq']
1232
1232 - 6
1226
If that was the weight it would be exactly balanced... and it works!
test_input = """b inc 5 if a > 1
a inc 1 if b < 5
c dec -10 if a >= 1
c inc -20 if c == 10"""
import re
def parse_input(input, debug=False):
registers = {}
max_of_all_time = 0
for row in input.split("\n"):
if debug:
print(re.split("(\w+) (inc|dec) (-?\d+) if (\w+)", row))
_, register, op, opval, condition_register, condition = re.split("(\w+) (inc|dec) (-?\d+) if (\w+)", row)
if condition_register not in registers:
registers[condition_register] = 0
if eval('{}'.format(registers[condition_register]) + condition):
if register not in registers:
registers[register] = 0
if op == 'inc':
registers[register] += int(opval)
elif op == 'dec':
registers[register] -= int(opval)
max_of_all_time = max(max_of_all_time, max(registers.values()))
return registers, max(registers.values()), max_of_all_time
parse_input(test_input)
({'a': 1, 'b': 0, 'c': -10}, 1, 10)
input = """ioe dec 890 if qk > -10
gif inc -533 if qt <= 7
itw dec 894 if t != 0
nwe inc 486 if hfh < -2
xly inc 616 if js >= -3
j inc 396 if b != -5
nwe dec -637 if uoc > 0
b inc 869 if yg >= -3
gif dec -221 if iyu < 0
tc dec -508 if gy >= -7
x dec 637 if gif < -526
nwe dec -185 if nwe != -8
x inc 638 if b != 869
ih dec -722 if itw > 9
xly inc -38 if ih >= 8
hm dec 910 if t == 0
uoc dec -585 if qt == 0
js dec -325 if hm == -910
yr dec -922 if cp != 0
qt dec 316 if itw != 2
bi dec -422 if iyu <= -1
uoc inc -862 if itw <= 3
itw dec -301 if x < -632
gif inc -492 if fi != 5
uoc inc -745 if x < -631
xly inc 21 if js > 331
hm inc 44 if js > 334
js dec 503 if tc > 503
t inc -216 if j == 396
yg inc 559 if nwe > 189
bhp dec -214 if x >= -646
hm dec 366 if fi == 0
t dec -658 if nwe == 185
hm inc -432 if qt <= -307
xly dec 695 if uoc >= -1031
cp inc -438 if x != -647
yg dec 211 if x >= -628
bi inc 829 if ih > -8
yg dec 540 if tc >= 503
hm dec -913 if qt > -310
qk inc -406 if itw < 309
uoc dec -716 if iyu >= -1
ih inc -655 if qt != -316
ih inc 6 if xly > -80
cp inc 795 if xly > -88
bhp dec 59 if yr < 1
yr dec 952 if x >= -628
xly dec -867 if j > 393
fi inc 720 if ioe >= -892
gif inc 454 if ioe > -886
j dec 547 if fi != 720
qk inc 665 if bi > 819
hm dec -174 if cp != 357
hm dec -795 if uoc <= -314
uoc inc 273 if itw <= 307
gy dec 212 if xly >= 783
tc inc 918 if ih != 9
tc inc -43 if js >= -186
gif inc -615 if b == 869
bhp inc -335 if fi > 724
ih inc 747 if hm >= -1711
ih inc -515 if ioe != -881
yg dec 967 if cp == 357
yr inc -23 if qt < -309
gif dec -16 if cp == 357
itw inc 353 if uoc <= -41
cp dec -788 if b <= 869
bi dec 510 if itw < 306
yg inc 321 if qk > 265
itw inc -194 if gif == -1624
yr dec 484 if b == 869
yr dec 828 if yg != -1515
cp dec -700 if gy != -212
ioe dec -238 if iyu >= -5
xly inc -334 if bi != 316
js dec 642 if uoc < -27
cp inc 131 if x >= -633
cp dec 693 if iyu >= -2
bi inc 671 if hm >= -1712
fi dec 781 if nwe >= 176
ioe inc 770 if qk > 253
nwe dec 381 if j < 406
qt inc -599 if hm != -1715
yg inc 277 if qk >= 268
hm dec -656 if ioe < 117
uoc dec -875 if ih < 243
js dec 297 if yg >= -1514
hfh dec 821 if iyu >= 8
ioe inc -133 if iyu > -9
x dec -623 if iyu != 0
gy inc 240 if cp >= 451
gy inc 937 if hfh != -10
tc dec 476 if tc != 1376
iyu dec -35 if hm == -1706
nwe dec 86 if yr >= -1344
cp dec 96 if qk != 259
x dec 864 if b >= 865
hm dec -965 if bhp != 161
bhp dec 402 if b == 859
b inc -19 if hm <= -746
xly dec 24 if uoc >= 840
ih inc 816 if js >= -1117
xly dec 511 if iyu != 5
t dec -214 if iyu != -8
yr inc -81 if tc <= 898
js inc -187 if yr < -1331
x inc -970 if cp < 462
hm dec 668 if tc > 904
uoc dec -488 if yg <= -1502
uoc inc -974 if j != 394
qk inc -58 if qt > -913
j dec -741 if js == -1304
j dec 58 if nwe != -276
fi dec 772 if qt != -910
yg dec -271 if bi == 990
uoc dec 983 if gy != 966
t inc -355 if uoc >= -636
hfh dec -486 if yr == -1335
itw inc -102 if tc < 905
gif inc 663 if b > 862
fi dec -546 if js < -1294
bhp dec -955 if qt > -914
qt dec -927 if ih == 1054
gy inc -272 if uoc <= -620
yg inc -30 if nwe != -291
nwe dec 393 if ih != 1048
ih dec 904 if tc != 915
nwe inc -211 if j != 1084
qt dec 249 if tc <= 913
ioe dec -703 if gy <= 695
hfh inc -836 if j <= 1079
tc inc -153 if qk <= 255
bhp dec -697 if uoc == -627
hfh dec -762 if qk <= 263
xly inc -369 if qk >= 269
xly inc -135 if xly > -80
j dec 773 if x <= -2468
iyu inc -541 if iyu < 9
itw inc 870 if xly < -77
x inc 646 if x >= -2474
qk dec 447 if fi >= -287
qk dec -37 if yr >= -1344
nwe inc 406 if gy >= 703
j inc 72 if j > 299
qt inc 946 if t < 306
hm dec -406 if cp == 451
ioe inc -906 if bhp < 849
xly inc -924 if b <= 871
xly inc -645 if qt == 709
b dec -578 if bi <= 999
js inc 237 if t <= 304
gif inc 425 if bi <= 989
uoc dec 318 if x < -1821
fi inc 455 if bhp < 859
fi inc -282 if iyu <= -537
bhp dec 980 if cp > 451
t dec 204 if gif > -967
ioe inc -273 if fi == -114
iyu inc 940 if yr != -1335
t inc -593 if uoc == -945
tc inc -34 if yr >= -1335
yg inc 204 if gif < -969
nwe dec -128 if iyu == -541
qk dec 949 if yr >= -1335
nwe dec -582 if js >= -1063
tc dec -550 if cp <= 452
js inc 427 if ioe <= 407
bhp inc -672 if gif == -961
b dec 890 if hm > -1419
qk dec -801 if iyu > -538
t inc 789 if tc != 1433
tc dec 134 if hm >= -1413
cp inc -287 if b > 552
b inc -131 if bhp == -800
iyu inc 991 if b <= 429
itw inc 3 if hm > -1411
ih inc 263 if b < 428
j dec 848 if t <= 294
xly inc 94 if ioe != 406
j inc 116 if qk < -1094
t inc -779 if yr >= -1338
nwe dec 910 if tc >= 1281
uoc inc -945 if itw <= 975
xly inc -675 if hm <= -1410
xly inc -58 if x == -1825
hfh inc -701 if bhp < -798
nwe inc -586 if uoc > -952
x inc -164 if b < 435
hfh inc -641 if j != -354
yg inc 827 if qt > 699
iyu dec -512 if t < -478
j inc 651 if itw < 987
yg dec 537 if hfh >= -289
ih inc -289 if qk <= -1094
itw dec 158 if nwe > -2260
xly dec 704 if hfh == -289
itw dec -564 if j <= 305
nwe inc -820 if hfh >= -290
bhp dec -252 if nwe < -3065
bhp dec 680 if itw <= 1385
cp inc 811 if t == -486
x inc 423 if b > 419
itw inc 131 if gy <= 693
qk inc 500 if nwe == -3065
gif dec 583 if yg <= -981
x dec -261 if fi > -115
itw dec 314 if cp >= 977
itw inc 197 if b < 429
ioe inc -666 if x <= -1314
hfh inc 345 if hm < -1402
b inc 653 if itw >= 1719
qk dec 298 if itw != 1701
t dec 943 if qt > 703
gif inc 430 if qt > 715
bi inc 60 if gy > 687
j inc -816 if gy > 685
xly inc 334 if js != -1075
qk inc -388 if xly != -2656
t inc 475 if fi <= -113
t dec -842 if nwe > -3078
fi inc 284 if cp == 976
xly inc 265 if ih >= 127
qt dec -481 if hfh < 58
xly dec -484 if ioe <= 415
ioe inc 525 if xly >= -2183
t inc 658 if tc >= 1281
nwe dec -680 if t != 555
qk inc 395 if tc <= 1293
bi dec 422 if gy > 683
itw inc 713 if t == 546
bhp dec 285 if iyu < 967
gif inc -186 if tc <= 1297
iyu inc -858 if iyu <= 954
gy inc -320 if nwe < -2384
yg inc 691 if qt < 1199
hm inc -19 if j <= -528
bhp dec 403 if xly == -2175
gy inc -886 if qk >= -1399
yg inc 404 if js < -1065
gy inc -255 if fi > 160
bhp inc 740 if bi <= 620
b inc -548 if nwe != -2398
t dec 255 if nwe >= -2397
t inc -678 if js >= -1064
js inc -497 if js >= -1071
iyu dec -463 if hfh >= 52
js inc -537 if b != -122
t inc -518 if yg != 129
ih dec 208 if yr >= -1341
qt dec -566 if yr > -1340
itw inc 113 if nwe == -2395
ioe dec -471 if itw != 2424
cp inc 222 if tc > 1283
ih inc 28 if bhp != -1915
yg inc -923 if xly <= -2169
bi inc 893 if yr == -1335
cp inc -459 if gy > -771
b inc 958 if bhp != -1922
yg dec 896 if tc < 1298
ih inc 385 if hfh != 48
j dec -663 if iyu <= 1419
fi dec 89 if x != -1297
tc inc -294 if gif != -1147
uoc inc -232 if qk < -1381
bi inc 743 if hfh >= 48
gif inc 317 if yr == -1335
hm dec 938 if xly <= -2172
iyu dec 961 if xly > -2173
qk dec -69 if qk == -1390
ioe dec -450 if hfh != 52
j inc 944 if qt != 1748
x dec 48 if gy <= -764
yr dec 505 if iyu <= 1422
x dec 316 if yg < -1695
bi inc -386 if nwe != -2392
xly inc 363 if fi < 87
uoc dec 629 if nwe < -2384
ioe dec 816 if bhp < -1909
uoc inc 196 if fi == 81
gif dec -196 if iyu > 1419
bi dec -652 if nwe != -2402
gy dec -416 if yg > -1701
bhp dec 78 if qk < -1384
bi inc -660 if ih != 328
ih dec 352 if fi >= 79
ioe inc 288 if itw == 2414
b dec -461 if xly < -1814
t inc -291 if js > -1557
tc dec 502 if j == 432
gif inc -800 if qk >= -1384
yr dec -59 if gif > -641
yg dec 360 if yr <= -1275
nwe dec 790 if gy >= -358
b dec 544 if yr == -1268
tc inc 743 if ih <= -22
bhp inc 314 if cp <= 744
x dec -708 if tc <= 2039
iyu inc 968 if yr != -1274
x dec 454 if hfh <= 61
qk dec -41 if bhp >= -1685
ih inc 302 if tc != 2032
cp inc -167 if yr == -1281
ih inc 349 if qt != 1760
gif inc -367 if uoc <= -1603
xly inc 229 if gy <= -344
gif dec 459 if fi >= 76
hm dec -297 if gy <= -347
j dec -320 if iyu <= 2397
qt dec 634 if b <= 837
cp dec 342 if ih > 324
ioe dec -119 if qt > 1120
x dec 564 if hfh != 56
tc dec 779 if qt < 1130
hm dec 586 if ioe > 695
yg dec 373 if ioe > 683
xly inc 344 if iyu <= 2397
hm inc 91 if qt < 1121
ih inc -219 if ioe <= 699
ih inc -937 if ioe <= 702
hfh dec -805 if t != -221
itw dec -385 if ioe == 693
nwe inc 946 if js != -1564
qt dec 685 if hm == -2052
itw dec -625 if bhp <= -1674
ih inc 933 if qt < 442
js inc 971 if itw != 3437
hfh dec 444 if uoc >= -1617
itw inc 182 if itw >= 3433
hfh inc 509 if gy > -353
ioe dec 952 if bhp > -1688
b inc 210 if uoc > -1615
itw inc -579 if hm < -2044
hm inc -427 if j <= 739
uoc inc 90 if nwe > -3190
ih inc -678 if x <= -1407
js dec -238 if x >= -1419
ih inc -263 if tc > 1244
ioe dec 30 if gy == -352
t inc -76 if ih < -837
yr dec -442 if cp < 400
iyu inc -425 if j < 751
qk inc -189 if js <= -350
yg inc 282 if t >= -311
b inc 11 if j > 737
qt dec -839 if bi == 1863
tc inc -40 if bhp >= -1688
b inc 439 if yg >= -2142
bhp dec 144 if b == 1057
gy dec 460 if b <= 1065
qk inc -681 if itw >= 3035
iyu dec 0 if j > 740
ih inc -189 if uoc <= -1520
bi inc 360 if hm > -2058
yr inc 603 if xly <= -1232
j dec 68 if fi < 90
yg dec -425 if gy <= -804
x dec 295 if x != -1405
nwe inc -355 if j <= 679
ioe dec -506 if xly < -1229
bhp inc -489 if j >= 671
hm inc 730 if ioe > 209
gy inc -464 if iyu < 1968
bi dec 191 if yg > -1731
j dec 707 if gy < -804
ioe dec -180 if qt == 437
ioe inc 909 if yr != -231
yr dec -627 if ih == -1027
itw dec -145 if gy == -818
hm inc -156 if gif == -1460
hm inc 301 if yg < -1735
gif dec 137 if bi == 2039
cp dec 777 if yg <= -1717
fi dec -90 if yg != -1726
cp dec 256 if tc <= 1217
gy dec -401 if ioe >= 393
js inc 850 if tc <= 1219
iyu inc 124 if hm >= -1478
tc dec 341 if nwe > -3534
yr dec -13 if tc <= 1218
x inc -44 if cp != -634
t inc 591 if qk >= -2229
t dec -38 if itw <= 3045
xly inc -996 if ioe >= 396
cp inc -21 if x > -1757
t dec -989 if itw >= 3033
uoc inc 193 if fi >= 74
x inc 234 if uoc > -1333
hm dec -353 if gif > -1597
cp inc 684 if t == 1315
bhp dec -437 if iyu < 2095
xly inc 59 if j == -30
nwe inc 176 if fi >= 81
b inc 573 if iyu > 2086
gif inc 526 if gy > -418
ioe dec 261 if b >= 1625
qk inc -976 if bi != 2040
qt inc -648 if cp >= 31
x dec -490 if iyu <= 2099
bi dec 450 if x <= -1021
hm dec -317 if hm >= -1485
x inc 462 if ih != -1032
qt dec 436 if yr == 409
uoc inc 289 if b <= 1638
qk inc -998 if uoc > -1045
j dec 387 if b < 1622
gy dec 13 if cp >= 24
bi dec -822 if js != 489
ioe dec -140 if xly < -2170
uoc dec -15 if ih < -1021
x dec -906 if hfh < 923
itw dec -986 if yr > 402
cp inc 474 if gy < -421
gy dec 530 if fi == 72
fi inc -277 if tc < 1214
ioe inc -26 if gif < -1066
itw dec -900 if ih < -1025
fi dec 443 if yg < -1719
hfh inc 602 if uoc == -1023
yg inc 409 if ih == -1027
t dec -366 if t != 1323
gif inc 158 if yr == 409
iyu inc 464 if hfh >= 1525
xly inc -71 if yg > -1319
cp dec -247 if qk > -4201
cp dec -278 if cp > 745
tc inc -903 if ioe < 257
itw inc 221 if bhp < -1870
yg dec -352 if j >= -31
ih dec -77 if qk < -4188
itw inc -921 if gy < -414
tc dec 565 if iyu != 2561
uoc inc -564 if cp <= 1035
ih dec -962 if qt == 1
hfh dec 646 if itw < 4222
js dec 604 if qk != -4186
hfh dec 389 if itw != 4214
cp inc -819 if bhp == -1876
tc inc 121 if qk <= -4185
cp dec 330 if t == 1677
nwe inc -864 if gy >= -417
uoc dec -459 if hm == -1155
x inc 886 if tc >= -124
tc inc 954 if yg != -973
qk inc 408 if x <= -563
hfh inc 37 if uoc == -1587
bhp dec -426 if cp == 197
nwe inc -46 if itw < 4233
j dec -546 if fi <= -637
bi dec 421 if xly > -2253
cp inc -991 if nwe >= -3417
gif inc -9 if hfh >= 1169
yg dec 397 if tc >= 816
gif inc 258 if js > -115
bhp dec -594 if tc != 822
t inc -975 if ioe != 253
tc inc 999 if ioe >= 242
gif inc 746 if yr < 419
gy inc -980 if yr > 407
qt inc 892 if cp > -789
itw inc 806 if yr != 402
hm dec 977 if iyu <= 2559
gy inc 848 if gy >= -1405
bi dec -310 if qt == 893
hfh inc -40 if yg == -1353
js inc -626 if j == 516
iyu dec 863 if yr < 408
bi inc 321 if b < 1633
qt inc 895 if hfh <= 1178
hfh dec -782 if js == -735
cp inc -443 if yr < 410
yg inc -446 if bi >= 2626
uoc inc -251 if tc < 1824
ioe dec 549 if yg < -1360
x dec -961 if yg <= -1362
gif inc -184 if js > -743
js dec 929 if x <= 397
yg inc 994 if yg == -1362
js dec -246 if bi < 2629
yg dec 875 if j <= 522
ih inc 287 if yg >= -1240
itw inc 615 if hfh == 1958
ih dec -665 if qt <= 1790
itw inc -747 if qt == 1788
iyu inc -631 if tc > 1810
j inc 178 if bhp >= -1273
nwe dec 85 if itw >= 4897
tc inc 530 if cp > -1222
fi dec 329 if tc >= 1819
uoc inc 1 if iyu != 1932
t dec 905 if nwe > -3497
j inc -836 if ioe >= -299
xly dec 185 if nwe > -3499
b inc 41 if gif >= -92
iyu dec 315 if t > -196
nwe dec 676 if uoc != -1839
bi dec 380 if tc != 1819
ih dec -397 if gif != -102
yr dec 449 if js > -1420
hfh inc 584 if bhp <= -1282
ih inc -524 if ioe >= -304
gif dec 688 if hfh == 2542
hm dec -370 if bi == 2621
js dec 575 if hm != -1768
qk dec -85 if itw != 4893
xly inc 961 if tc == 1819
itw inc 913 if qk <= -3699
bi inc -858 if js != -1420
t dec 622 if bi != 1764
qt inc -980 if fi >= -964
fi dec -380 if js == -1418
qt dec -446 if bi != 1772
gy inc -414 if yr != -50
qt dec 628 if itw < 5813
bi inc -649 if fi >= -588
uoc dec 821 if iyu >= 1916
gy dec 19 if xly > -1472
qt dec 137 if qt <= 1608
bhp dec -850 if t >= -830
bhp inc 19 if iyu != 1928
yr dec 272 if ih == 153
js inc 628 if hm > -1775
qk inc 893 if b != 1630
fi dec -959 if gif < -783
x inc 848 if bhp <= -405
bhp dec -555 if j != -318
gif dec -906 if hm > -1772
itw dec -722 if hfh == 2542
bhp dec 960 if j != -327
js dec 670 if gif >= 123
itw inc 153 if yr > -313
t dec -712 if ioe == -299
ioe inc 345 if itw == 6693
hfh dec -411 if bi <= 1123
hfh dec 368 if qt == 1469
ioe dec -688 if itw != 6684
cp inc 888 if bhp != -818
iyu dec 184 if fi != 378
xly inc 143 if fi == 371
cp dec 691 if ih <= 151
bi dec -712 if xly != -1333
nwe inc 231 if bhp < -808
qt dec -736 if fi != 361
hm inc 536 if gy < -988
yr inc -539 if j < -311
xly inc -311 if bi <= 1833
qk inc 271 if yg != -1237
uoc dec -40 if gif < 119
nwe inc 223 if yg >= -1239
qt inc 501 if itw <= 6685
xly inc 11 if t >= -109
hm dec 147 if j != -328
js inc -15 if hm == -1379
bhp inc -841 if fi > 362
fi inc -26 if ioe != 397
fi dec 283 if tc > 1817
uoc inc 105 if j < -314
ioe inc -885 if gif < 113
xly dec -849 if iyu == 1746
j inc -614 if yg != -1243
yg inc 115 if fi <= 62
itw inc -405 if cp != -1222
hm inc 854 if gy >= -988
tc dec 143 if cp >= -1232
gy dec -111 if b < 1635
ioe inc -939 if hfh == 2585
gif dec 43 if bi < 1831
gif dec 519 if itw < 6284
nwe inc 197 if gif != -449
bi dec -71 if bi != 1835
ih inc 479 if hfh >= 2595
ih inc -979 if qk <= -3438
iyu dec 653 if uoc == -2513
yr dec -346 if hfh <= 2585
gif inc 572 if xly != -1638
qk dec -891 if j > -322
qk dec -911 if ih == 150
tc inc 995 if iyu <= 1094
hfh inc -129 if x == 1241
xly dec -533 if gy > -884
gif dec 806 if b == 1630
hfh dec -805 if hfh >= 2453
iyu inc 242 if qt < 2714
fi dec 878 if bhp <= -1661
t dec 166 if hm == -1379
ioe inc -456 if hm == -1379
hm dec 225 if cp >= -1228
xly dec 820 if qt <= 2707
tc dec -786 if bi != 1898
uoc inc 751 if qk != -2547
b dec 922 if x >= 1238
j dec -179 if b <= 715
hfh dec -590 if qk == -2539
x dec 187 if itw == 6280
bi dec -967 if js < -804
tc inc 133 if qt <= 2713
t dec -411 if tc <= 3596
uoc inc 264 if fi < 61
gy inc 223 if ioe <= -1000
gif dec -942 if ioe >= -1008
hfh inc 999 if gy > -662
fi inc -485 if ih <= 153
nwe dec 733 if ioe > -1015
x inc -753 if bhp <= -1653
js dec 784 if gif < 263
bhp dec -307 if b != 703
itw dec -757 if ih == 153
iyu dec 785 if bi >= 2874
nwe inc -450 if t == 136
bi dec -77 if yg > -1132
js dec 990 if yr > -515
iyu inc 337 if bi > 2933
uoc dec 241 if ih != 153
bi dec 459 if hm == -1604
iyu inc -85 if bhp > -1353
qk inc -437 if hm != -1597
x inc -852 if qt <= 2708
gy dec 311 if hm != -1604
iyu dec 876 if t <= 143
x dec 779 if yr <= -513
hfh inc -843 if qt < 2707
bi inc 536 if yg < -1120
itw inc -886 if hfh != 4003
js inc 107 if hfh <= 4009
x dec 156 if yr >= -504
hfh dec 971 if j < -140
tc inc -480 if hm != -1595
x inc 993 if j > -142
tc inc 910 if yg != -1120
tc dec 571 if x != 432
x dec -194 if nwe > -4935
yr inc 288 if b <= 717
fi inc 970 if tc >= 3454
xly dec -554 if fi <= -431
ih inc -380 if iyu <= 706
qk dec 162 if nwe == -4925
fi dec 396 if gif != 261
xly inc 698 if yr >= -224
qt dec 57 if hm >= -1607
tc inc 555 if x <= 644
x inc -20 if xly == -1217
ih dec -766 if ioe <= -1005
tc dec -101 if gy != -660
hm dec 989 if ioe == -1006
yr inc 995 if gy != -651
cp inc -70 if cp < -1232
gy inc -408 if hfh > 3027
yg dec 360 if bhp >= -1352
hm inc 263 if qk < -3137
qt dec -603 if yg > -1495
xly inc 516 if js <= -2466
ioe inc -442 if uoc >= -1764
ih inc 898 if gy < -1053
gif dec 863 if tc >= 4114
hfh dec 478 if hfh != 3030
js dec -623 if hm > -2328
itw dec 792 if qt > 3244
yg inc -367 if tc == 4105
gy inc -330 if b <= 709
x inc 821 if t == 136
bi inc -979 if cp >= -1235
nwe dec -608 if qt == 3252
cp inc 885 if yr == 778
js dec 197 if b > 717
ih inc -737 if qt != 3248
iyu dec -570 if tc < 4107
x dec 63 if bi == 2039
t dec 323 if j < -133
tc inc -962 if tc > 4098
ih inc 663 if xly == -701
ih inc 489 if ih >= 1363
uoc inc -393 if js >= -2480
j inc -62 if cp == -342
gy dec -29 if bhp < -1348
yg inc -202 if nwe >= -4322
fi dec -628 if bi == 2039
itw inc -338 if itw > 5350
qt dec 24 if qt > 3242
tc inc 877 if t == -188
nwe inc 521 if ioe != -1448
gif inc -328 if gif > 261
ih inc -277 if bhp != -1351
tc inc -61 if qk > -3148
nwe inc 588 if xly != -702
qk dec -762 if qk >= -3141
gif inc 937 if b <= 708
t inc -749 if fi == -191
js inc 814 if qk == -2376
j inc -479 if bhp < -1346
iyu inc -941 if gif == 876
js dec 411 if hm > -2326
itw inc -832 if gy == -1364
iyu dec 537 if xly != -706
yg inc 687 if js == -1658
b inc 741 if tc > 3073
x dec 86 if ih < 1584
fi inc 851 if t > -940
x dec 680 if qk >= -2373
gy inc 882 if itw != 4183
tc dec 711 if fi < 658
yg dec -166 if qt == 3228
yg dec 684 if fi > 661
bi inc -715 if gif < 875
gy dec 168 if nwe != -3719
gif inc 301 if yg != -1204
ioe inc 293 if cp >= -344
yr dec -395 if bhp <= -1351
qk inc 97 if js > -1659
hm inc 371 if gif > 865
gif inc 443 if uoc >= -2151
nwe dec -677 if cp > -351
qk dec -845 if yg != -1201
ih dec -890 if cp != -337
nwe dec -932 if hfh > 2549
xly dec -281 if ih <= 2473
cp dec 76 if j == -682
hfh dec 236 if gy == -650
uoc inc 804 if b != 1448
iyu dec -791 if yg <= -1205
yr inc -720 if bi == 1324
b inc -234 if yg == -1204
bhp dec 728 if t != -938
qk dec 703 if itw == 4194
hfh dec 944 if uoc <= -1360
yg dec -384 if hfh < 2324
hm inc -765 if fi == 660
b inc -769 if hfh == 2322
ioe dec 681 if b >= 455
iyu inc -795 if itw > 4180
bhp dec -533 if t < -933
j inc 861 if ih < 2475
ioe inc 136 if itw < 4189
b dec 400 if fi >= 663
fi inc -483 if gif < 868
bhp dec 815 if qt == 3228
x inc -236 if yr > 456
xly inc 516 if b > 443
bhp inc -95 if x != 1295
uoc inc 174 if js > -1668
bi inc 126 if b <= 454
uoc inc -742 if gy >= -655
ih dec -381 if qt > 3235
itw inc -493 if bi <= 1449
fi inc -673 if fi <= 653
ih inc 55 if x >= 1284
tc inc 55 if fi == 657
ioe inc -715 if yg <= -820
nwe inc -665 if qk != -1432
qt inc -129 if b <= 443
fi inc 984 if yg <= -819
cp dec 112 if bi < 1454
j dec -268 if hm <= -2729
fi inc -620 if itw <= 4191
nwe dec 330 if tc != 3077
xly dec -490 if bi == 1450
cp dec 922 if yg >= -825
itw inc -752 if uoc < -1914
yg inc 502 if tc == 3082
hm inc 987 if qt > 3226
qk inc -234 if bi <= 1451
ioe inc 201 if iyu > -64
fi dec 730 if xly <= 591
js inc 506 if qk <= -1661
x dec 453 if yr <= 455
t inc -941 if uoc > -1923
hm inc 30 if bi < 1458
gy inc 947 if fi > 292
hm dec 976 if iyu == -56
tc inc -420 if qk <= -1667
tc dec -779 if gy < 302
bi inc -814 if x < 845
qt dec 484 if bi > 643
yr inc 363 if fi >= 290
ioe inc -314 if gif > 866
ioe inc 84 if yg < -312
bhp dec -941 if itw >= 3447
gif inc -791 if ioe >= -1898
yg dec -440 if ioe != -1904
b dec -673 if x != 835
tc dec -547 if qt <= 3233
t inc 641 if yg < 120
xly dec 548 if fi < 293
iyu dec -947 if hm >= -2687
gif inc 643 if yg > 119
iyu dec 681 if j >= 174
ioe dec 326 if cp == -1452
cp dec 489 if js == -1151
bi dec -814 if js != -1152
tc inc -803 if yr >= 812
qk inc 155 if itw >= 3429
bhp inc -445 if tc < 3188
itw inc -280 if js > -1147
js inc -921 if ioe > -2227
gy inc 200 if b == 446
js inc -943 if nwe > -3125
gif inc -412 if hfh == 2322
t inc 240 if ioe == -2225
iyu inc 774 if b != 440
yr dec -305 if ih != 2522
ih dec -24 if uoc > -1928
yr inc 770 if gif != 1102
iyu inc 440 if yg != 115
gy inc 148 if qt >= 3226
ih inc 534 if tc != 3182
yr inc -140 if js > -3019
ih dec 369 if bhp < -2894
x dec -155 if uoc <= -1915
x inc -627 if nwe < -3114
yr dec -446 if tc != 3180
cp dec -638 if xly <= 593
gy inc -97 if x <= 370
qk inc -769 if fi == 298
hfh dec 365 if bhp < -2906
j dec -533 if xly != 586
x dec 24 if uoc < -1910
fi inc 391 if tc <= 3182
yg inc -329 if b >= 440
ih dec -722 if t >= -1633
qk dec -517 if x >= 340
gif inc 404 if qt != 3225
x inc -52 if ih >= 2716
hm dec 759 if js < -3008
nwe dec -356 if yg >= -212
ioe inc -337 if x == 332
xly inc 610 if cp < -811
j dec 778 if j >= 178
qk dec -477 if ioe != -2231
gy inc 61 if b < 451
hfh inc -726 if gy <= 615
iyu inc -899 if itw < 3441
ih dec 980 if qt >= 3232
js inc 165 if yr != 1425
js dec -668 if yg == -207
b dec 584 if x < 339
qk dec -606 if cp < -806
gif inc 269 if hm <= -3437
js dec -472 if t > -1638
fi inc -853 if xly < 1197
gif inc -716 if iyu != 522
cp inc -536 if itw < 3440
hfh dec -848 if hfh <= 1594
hfh inc -135 if iyu <= 525
fi dec -789 if hfh > 1459
bhp dec -689 if uoc == -1919
hfh inc -507 if ioe <= -2221
yg dec 440 if ih > 2714
qk inc 99 if bhp != -2213
qk dec -330 if hfh >= 958
j inc -946 if ih != 2717
bhp dec -107 if gy < 619
cp dec -797 if t >= -1641
cp dec 615 if fi <= 228
nwe dec 502 if t != -1641
hm dec -58 if hm < -3433
t inc -324 if nwe < -3257
hfh dec 754 if gif > 1067
hm dec 2 if ih == 2709
bi dec -992 if fi == 230
t dec 646 if ih == 2709
qk dec -549 if nwe == -3261
tc dec -772 if nwe <= -3260
fi dec 640 if fi == 230
ioe dec 921 if tc >= 3957
tc dec 79 if tc <= 3964
tc inc 541 if yr == 1427
qk dec 331 if cp >= -546
ih dec 561 if itw >= 3438
itw inc 558 if qk != 119
hfh inc 809 if hfh >= 948
itw dec 981 if xly < 1197
ih dec -431 if js > -1708
yr dec -737 if hfh != 1754
tc inc 873 if ih != 2709
bhp dec -53 if hm != -3395
fi inc -207 if j >= -1541
bi inc -484 if itw >= 2449
js inc 548 if j > -1549
tc inc 336 if nwe != -3257
gy dec 39 if hm == -3386
gif inc 186 if itw > 2450
hm dec 671 if fi > -404
bi inc 950 if qt > 3227
gif inc 667 if fi > -414
x inc 380 if qk != 111
t dec -194 if js > -1172
yr inc -954 if itw < 2449
bhp inc 61 if j <= -1539
x inc -893 if bhp > -1997
ih dec -169 if iyu > 522
b dec 211 if cp >= -548
gif inc -278 if fi < -406
js dec 22 if t < -2404
ih dec -350 if nwe <= -3255
yg dec 198 if qk != 116
fi inc -466 if bi != 2091
yr inc -28 if yg == -405
cp dec 165 if xly < 1201
hm inc 875 if bhp >= -1995
qk inc 856 if gy > 565
hm inc -20 if iyu == 525
hfh dec -771 if itw > 2448
ioe dec 162 if fi == -874
yg inc -662 if ih < 3233
yr inc -214 if t == -2413
xly dec -251 if yg != -1065
itw inc 361 if ih < 3234
qk inc 206 if yg <= -1060
t inc 398 if ioe == -3146
qk dec 35 if b > 437
itw inc -841 if xly != 1445
hfh inc -461 if yr == 1922
hm dec -698 if itw != 1968
fi dec -98 if bhp < -1986
t inc 224 if hfh < 2080
j inc -767 if hm == -1833
uoc dec -817 if j > -2320
qt inc -801 if tc < 4761
hfh dec 597 if iyu == 525
itw dec 670 if cp != -709
ih inc 173 if bhp <= -1983
js inc 904 if hm == -1833
ih dec 913 if bi >= 2091
x inc 841 if itw < 1297
t dec 74 if gif == 1634
j dec 302 if yr != 1916
xly dec -815 if bi > 2092
qk inc -349 if x <= -168
xly inc 974 if fi >= -783
ih inc -251 if t == -1865
ioe dec 314 if nwe != -3253
fi dec -245 if ih < 2239
js dec -69 if js <= -272
yg inc -33 if j != -2623
xly dec -146 if ioe < -3451
bhp dec 757 if itw < 1309
qt inc -472 if yr >= 1918
xly dec 662 if hfh < 1477
nwe dec 66 if iyu <= 528
gy inc 47 if j > -2623
bhp dec -567 if bhp < -2746
gy inc 968 if nwe >= -3333
t dec -731 if iyu >= 519
gif dec -522 if j > -2621
qk inc -855 if tc > 4754
gif inc 125 if gif <= 2159
iyu dec -400 if hfh >= 1476
nwe dec -751 if qk >= -67
hm inc -645 if ioe != -3466
bi inc -235 if nwe >= -2571
b dec 981 if yr >= 1922
gy dec -452 if hm <= -2475
fi dec -532 if qt <= 1959
cp inc 612 if hm >= -2487
fi dec -455 if bi < 2097
t dec 80 if iyu <= 934
xly inc -694 if hm == -2478
uoc dec -759 if qk >= -59
ih dec 244 if yr >= 1918
tc inc 638 if ih > 1998
cp inc 1 if fi < 458
cp inc 454 if nwe > -2573
gy inc -134 if hm < -2471
yg dec 1 if iyu >= 919
js inc 91 if yg < -1108
yg inc 173 if ioe <= -3458
gy dec -760 if t != -1214
qk dec 816 if iyu < 920
gy dec 226 if itw < 1301
bi dec 704 if tc == 4755
iyu inc -661 if nwe != -2572
nwe inc -425 if qt < 1963
gy inc 197 if qk == -58
t inc 853 if nwe == -3001
js dec 603 if yg >= -928
j dec 708 if xly == 2026
hm dec 836 if b == -535
x dec -132 if itw > 1299
cp inc 587 if gif > 2278
t dec -715 if nwe <= -2994
b inc 63 if yr == 1922
tc inc 147 if bi > 1383
yg dec -24 if cp <= 476
gy dec -11 if j == -3322
bhp inc -488 if tc >= 4903
iyu inc 890 if hfh >= 1476
qk inc 224 if yr <= 1928
bhp dec 845 if itw > 1303
uoc inc 965 if qk != 166
fi dec -186 if cp == 482
t dec 388 if js >= -814
hm dec -157 if t < 357
hfh inc -353 if nwe == -3008
x dec 846 if cp >= 491
fi inc -436 if iyu <= 1154
qk dec 465 if bhp == -3027
yg inc -489 if t <= 354
js inc 809 if gif >= 2284
iyu inc 757 if hfh != 1479
uoc inc -765 if yg != -1415
bi inc 637 if nwe == -3005
ih dec 369 if ih == 1993"""
parse_input(input)
So we need to parse groups.
streams = {"{}": (1, 1),
"{{{}}}": (3, 6),
"{{},{}}": (3, 5),
"{{{},{},{{}}}}": (6, 16),
"{<{},{},{{}}>}": (1, 1),
"{<a>,<a>,<a>,<a>}": (1, 1),
"{{<a>},{<a>},{<a>},{<a>}}": (5, 9),
"{{<!>},{<!>},{<!>},{<a>}}": (2, 3)}
def parse_stream(stream):
"""Parses a stream. Returns the number of groups."""
counter = 0
groups = 0
score = 0
in_garbage = False
ignore_next = False
for char in stream:
if not in_garbage:
if char == '{':
counter += 1
groups += 1
score += counter
elif char == '}':
counter -= 1
elif char == "<":
in_garbage = True
else:
if not ignore_next:
if char == ">":
in_garbage = False
elif char == "!":
ignore_next = True
else:
ignore_next = False
return groups, score
for stream, expected in streams.items():
print(parse_stream(stream)==expected, parse_stream(stream), expected)
input_stream = """{{{{{{{{<a}!!!aa!!!>ua,a,!>{!>!!!>a>,<!>,!!!!,!!!"!,!a!e}!>!>,<!!oi!!}>},<!!'u"!!!!!>,<e>}},{{<}eaa'<!>},<<>},<}<!},!>},<e>}}},{{{{}}},{{{<,!>,<!!}!>!!!>!!!>!>!>a!!,!!',>},<e,!!!!!><'!<,>},{{{<!<!>i'u">}},<!e!!!>!!eo!!""'!>,<a!i!!!>!!,,>}}},{{{{{{<o!!''!!!>!>,<e}a!>},<>}}},{{<aeo!!!>!!!!<!!!!!!!>,<uu!>},<{!!!>>},{<>}}},{{{<},!!'>}},{{<!"}}!!!ooe'!o!!!!<>},{<u!'aoa!!u{!o!>!>},<!!!>'>}},{{{<!>,<!!!>}!!!>u>},<'a,!>,<!{<!!!>e!>!u>},{{{{},<!>e!""!!'e">},<{e!!!>!}'}o!>,<,o!>},<!!}!>,<i>},<!>},<!oo'!>},<}}<'o}!>,<'!!!>'>},{<{e>,{}}}},{{},{}}},{{<uu!!!!o!>,<!<!!o!!!>!>e"'!>},<!!e!,!!!u!!!>>},<,!>}}<<!!!>,<ai!>{!e>}},{{{<a'!>},<o{ie!>},<!!!>{}au!>},<!!!!iu!ai>,{<!!{',>}},{<eu!o,!<}!>i!"!!!>a,uu!ao>},{<!!!>,<oe!>{e!!!>},<!!!!!!!>!!!>!ei!!io}!>},<"!!o!}>,<!!!><!!!><!!!!!!!>"!!!o!>,<!"!!!>,<!>},<>}},{},{{{{{<"!!!!!>>}}}},{<{!>},<}i'!!i!>!'}<!'!{}>,{{<!!!>ioi"u>}}}}}},{{{<{"'e<e!>},<!o!!,!,'!!!!!>>}},{{{{<ia'oa!!i<o,!>u!!!>ao'a>},{}},<!>},<!!!>!>},<!!!>"!>!>},<u,!>,<eauu}!!}o">},{{{<}',"'>},{{}}},<{<>},{<{!!"}!!!>!!!>{!,"!>},<!>,<!}!!!>ae}'>,<!!<u{!!!>!!!>},<o!!!!<!>,<!!}>}}},{{{{<o!!}!>},<a!>i!!!>},<e!e<,>}},{{{<"iao,}>},{{{}},{{{}},{<!>},<!!i'!>},<o!!{e'!{e"!!u"!!!>>}},{{<>,{<!>o"!>!>},<,ea>}},{{<e'>},{}},{<!<!!!>!>},<!>},<{!e,!>},<},e>,<!!!>"!!u{u{!>,<!uuuoi!!!>!>,<>}}}},{{{{<!!!>},<<"!!!>},<iu!>}e<io>},<e!>,<!!}}>},<!>a{{!!!>,<{!a}ua<',!!!o!!!>e,!!!>>},<!!{a!>},<e'oe!!{u!!u>}}},{{{<ai!!{}ai'>,<}!>{!>o!>},<!!!!!!!e!>'}<!a>},{<!!o}!!!>"!!ou!!o>,{<!>},<!>},<>}}},{{<io>}}},{{{<"!eui!>},<!!!>!>o!!!}>,{<o!!<ie!>!!!!!>!i!'!!e>}},{{<!!!!!>i!>,<,""}a}{!!!>{u!>,<!!'>},<!!!>,a!!!>,<!!iu<}!!!>>},{{{<!!!!'!<ao!>,<}>,<e!>!!!!!>i>},{<,a!{{{!>,<!>!!a!>},<i,!!'>},{{},{}}},{{<!!!!!>u!>'!>!!!>,o!>,<!>a!!,<!>},<!!',>}},{{<!'u}{>},<'!{'u!>,<!>},<!>,<!!!>},<>}}},{{{<!!e!>'>},<!!!><!"e!!!!ea<,ue>},{{<i!><u>}},{{<!>a>,<<"e,u!!!'i!'!!!!!!}!>}i"aa>}}},{{{<u!>ai!!!>!!!>'!>},<e!>!>u"i>,<aeiu}>}},{{{<,i!!!>!!e"au!!'"u>},{}},{}}}}},{{{{},{{<,!>},<<!!!>"!>,<!>,<<!>!!!!"!>,<!>,<>},<"<<{},!!!o,o!!!>!!!>!>},<>}},{{<{,<!!e!>{>},<"oi,!!e!!!>i!>,<{!>,<!>},<!!!!o>}},{{{<,{!>'i!>!!!>!!!!!>},<'i{u>},<!>},<!>uo!!o!>,<o!!e!ae!!',!>,<>},{{{<u!!!!!>"u!!{>},{<!<{uo!>},<<!>},<>}},{}}},{{},{{{{{<,,>},{}},{{<i'!!!>!>!!e!>o!!!!!!!e'!!!><!"",!!!>"u>}},{{<iiu!!{!!!>'aa!!!>},<!!!>!'}!!!>>}}}},{{{<i!!ae<!!u<a!!"''!>,<>},{<!!!!!>!!o!>a,<!!{!>!>,<,!!!!>}}},{{{{{}},{{<!!'eo!>!o<,e!>,<!>},<!!>},{{<<u',}!!!>!<!i!>},<!>>},{<e<e!>},<}!>,<ii!!<"!>},<!!!>>}}},{{<{}!>!>i!>,<!>!!!>!!!!"{!>,<,'!>},<>,{<!iee!!!!"ao{",!>u"!{!!!!}>}},{<{>,{<!>},<!e">}},{<a!!!>},<u>}}},{{{{<!>},<>},{{<!<e!!!!!!u!!!!!ea!!ue!!u}!>},<!>,<!>},<!!!>a>}}},{{<a!>,<ua<!>},<'e>},{<a!!!!!!!>>}}},{{<i!!!!<!>,<'{,!{!!!!!!}}e!!{<io>},{{<,o"e!>},<!>},<i{i!>},<!!>}}},{{{<a!>}!!'a"<ou>}}}}},{{},{<,!>},<>}},{{{},{<>}},{<!a!!!>u!!a>}},{{},{<!!,'>,<}o!!!>!!!>>},{{{<<,,!!!>!!!>!>},<e!!{<!>i!!!>o!!!>'!>},<!!!>>}}}}}},{{{<!"!"!,!>},<!!!>a{e!!!>!!!!!>>,<!>,<!>},<!!"!>,<ii'!!{'>},{<!>},<,>}},{<o!!,!i"'!>,<>,<ie,!<"oeu,'!!!>!>},<'i'>},{{<!!,!!{!!eai!!!aa!!!>'<!>},<!!>},<!>},<o!!!>,<iu}">}}}},{{{{<e>},{{{}},<!i!>,<i'!i!!!>!!!!}!!!>'<!>},<uo!>>}},{<,!!!!!a!>},<!uo!!!>,<!!e!!!>>,<>},{<>}},{{<e!!u!a<{u>,<<!!!>!>},<{!!!>,{!!!!o!u",!!!>'o!!!!a!'!!,>},{<}!>,<u!!,{!e'!!!>,<e!>!!!>u!!!!!>!>},<!!!>a!!!>!>>}},{{{},{<uueua!!!>!>},<!!!!!><!>,<!!!>e}<>,<}{uuo"!!o!e>}},{{{<}!>"!!!>{o!!!!<>},{},{{}}},{},{{<{!!!>eo!>},<,>},<!!{<!>,<{iu{!,!!oi!!"!{'!!>}}}}},{{{{<!!u!!!!!>e,"!!e!>!!,'!>,<>},{{{<<!>},<!!!>u>},{<!!!!!>"<u!'!!!<!>,<a{!!!>,<>}}}},{{<!>,<!>i!!a!>},<e"!>>},{{<<''o!>!!!>>}}},{{<!!!!u!!!!a,!!<"!>{ao>},{<<o!!!'!>,<u!>,<o!u!>{!!>,{<},,o}!!"ioo!>,<}!!,o}i!>,<<a">,{<!!!>!!!!!!!>!>},<,{!!ia!>,<!!!>!!!>a!!{}o>}}},{<a>,<!>!!o>}},{{{{{<{o!!e'}{,<!!u>}},{{<o"<!!!>!>},<i{!!a!!!>}'o{!'{>},<!!{u!a!>,<"!!{>}},{{<!!!>!!o!!<!>!>},<"!>a{!>},<'!>},<!>},<!!!uo">,{<}!>},<!!i!>,<!!!>},<!!!>!>},<!!!a!<!>i!!!>>}},{<}ia"!!!>o,<",!,>}}},{{<!>,<<a!>,<>,<}a<!!!!}!>},<u'"!!!>},<'!e>},{<!ue!!!>},<oe>},{{}}},{{}},{{{{}},{{<<<,!!o!!!!e!!!>}!!!>!>,<ia'"'"!>},<e{>}},{{<,oe!a}!>>},{<{!>},<!!e!!!>!>!!o!!!>u'"!>,<!>>}}},{{{<<'!>},<e!!!>!!!!!u!{e!!i!>,<!>},<'!!}!>,<!>},<!>,<!!!!!>e>},{<"!!!>,<!!!>},<!>}'!!"!>},<!"a<!!!>,e!}oe>}},{<">}}}}},{{{<!!}'!!{a!>,<!>a>},{<!!i!}!!!!!>!>,<e!!!,}!>{!>,<u!a!>,<>}},{{{{<!>!>,<>},{{<">}}},{{{<,i!!!>}!>,<!>!>,<!!!>},<e!>},<!>''!>>},{}},{{<!>,<{!!!>'!ai!!!>,<>}}},{{{{{<!'!!ei,!>!!!>!>,<!>{!}'o!>!!ui}>}},{{<!!!>!!!>,<e!ou{!>},<ei!!!>!uu!a!>},<>}}},{<<o{{"!!!>o!>,<!!}!!<!>,<}o'!>>,<}!,,},!>},<o!!{<"">}},{<!!!>{<!!!>,<'!>,<i!!!>o!'o>,{}},{<ui!ou!{o>}},{{<,!>},<!!!><"!!!!!>''>},{{<ou}!>,<!!}'!!"<!!u!!!}!!e!!"!>,<!{!>!!!!!>},<!!!!!>,<!!!!!>>}},{{<e!'>},<o{a!!!>,!!'!>},<!>},<!>,<ue""!><<<i>}}},{{{<<!>},<<!!!>,<"oai,<o!!!>!>>},{<'ue!!!><!!!>{!>},<e!!,!!">}}},{},{{{},{}},{<!u!>,<!"!>},<{o!!">,<>}}},{{{}},{{},{<,u!!'!>!>!>},<}!!e!{!!u!!!>},<!>!>},<,>}},{<>}},{{{<u}!"!!'u!!i!>,<!!!>}!!!>!''!>!!>},<!!u!!{,ui!{!!!!!>!!!>},<!!!!>},{<iie,!!!!!!!>'>,<!!a!!e',!>u{'!!,<!!!>'>},{}}},{{{{{{},{}}}},{}}},{{{{{<!!u!!}!u!!!>!>},<!>!!u!!{{e<'!>},<'!>!>},<>},{<"o!>,<!>,<!,!>,<u>}}}}},{{{{<e{<e{!!!>!>,<ii},}!>,<a>}},{<'au!>},<{{aaiu!!>},{<!i,ui!!!!!>i"!!iiiu}>}},{},{{<}!!'<ua!!!!!!o}a!>,<!>},<>,{}}},{{{{<i!>iie!o"!!,!>,<!>,<!>,<>},{<i{!>e!>'>}},{}},{{<'!>},<'!!}!!a!>},<e!!a}!{{'!>e>}},{{<}i"'!>,<!!!>!>},<!ae{!!o!!!>!!,!!!!!>,<!!>},{{<i<!!a,!'>,{<"i!>},<!,!>'euu!!!>,<,>}}}}}}},{{{{{{<'u!}!>!>},<a>}}},{{{<!!ee!!"}>,{<eu,!!!!'!!!>!>,<,{oee}<!>},<i,>}}},{{{<u!>,<!!!>ai!>},<""e!!!>!>,<!u>},<!!!!!!'!!'!!i!!"ei,}!!!i<,!>},<!>>},{<a!!!>aui!>},<e!<!>}"}!>,<,!!!>!>},<!!!>!!>},{{{}},{<!>!ue"a,!!!!!>e!!,!>!>,<<>}}},{{{<!>,<"!!{,<!><!>},<<!!iio!>},<>},{}},{{},<a,"!>,<}!>,<a!!!>e!!">},{{<!>!o!!uu!,!>,<u>},{<!a!!!>!>,<iu!o!!ia!!!>!>,<!!!>,<,o!!!>!>!!!>e{>}}},{{{<!>o!!!>}oa"!!!>!a"!{>,<i>},{{<'>},{<ee!!!>!!!a!!ia!,!>,<!!!!}!!ui!>u<u>}},{{}}},{{<a<!e!!e!!!!!>!u!!!>"!>,<o!!}!>>}}}},{{{{}},{{{<!!}{o!u{!<o'}u!>,<!!!!<>}}},{{{<e!!!>!>},<!>!>},<!u>}},<i'ei'!>},<!!oo<i!>},<!!!>,o{!>>}},{<"e!>,ia"!>},<u!!!a"!}<ea!!<!{>}},{{}}},{{{{{<!{aiioi<!ei!>!!!>},<a!!a!>},<!u!!!!!!,!}<a>,{<'oo!!!>!>,<!!!!!>!u!>},<>}},<"},!!!>,!>!!!>!!!i,>},{{<{!!u">,<{,{!>},<{!}'>},{{<<o!{'!!!>,<>},{<i'oo!{u!!">}},{<oo>,<<>}},{{{{<i{!>,<!>},<"<!!!>e<e!>,<!!!""<!!'o>}},{{},<e"a!>},<au,>}},<!!i{!>,<!!!!<>}},{{<"<o}'e!!!!,<>,{<>}},{<>,<!o!>},<"!!!!!>!"{{"''au!!o,<!!!,>},{{<!!!>!>!e<o!>,<>,<>},{<>}}}},{{{{{{<"}>},{{<!!{u!!!>,<!>},<<!!!!"'>},{<!>},<'"}o,o!>},<!!o!>},<!!ie'!>}!>,<a,>}},{<{'e,a!>i!>,<!!!>,<!!!!"'a,o>}},{{<i"i"!>},<!!,!!!>!>'a!{!>,<!!!>,<!>},<e>},{{<!>,<>}}},{{<'i!>,<,o,!!i'i!!e<!}o>},<!>}e{!!o<!!!>o!!,!>},<,!>,<!>},<!>},<o!!{>}}},{{<!i{!!,u}'u!ea>,{{<!!oo>},{<,>}}},{{<!>,<!!i!!!>'!!u}!!,,u}<!!,!ea>},{{<!!i!!,"!>'o"{ou,'}>},<!!!>>}}},{{<e'!!<u>},<!>,<i}!>!>,<<!!!>"{u<uo>}},{{{},{{<u!!euu!>},<>}}},{{},{<!!!>a<<}{""'!!!>>}}},{{<}!{'!!}}e,'e!!'}!>},<!!e>},{{{<u!a,eoo!>,<{!!,<>},{<!>,<>}}},{<!<}uei}o,io!>,<{!!!>,<!>>,<!!{oioi!>,<!!,!>},<iu!>},<!!o,}!u<>}}},{{{{{<!!!!!!e!>},<u!!i!!!>a!">,<a!>},<}>},{{},{<e!!!>>}}},{{},{<i!!>,{}},{<""{!a>}}},{{{<a,"!!!>!!'!au',a!'aie'!>,<{o>,{<<<<!!e<>}},{{<e'"!!a""!!>},{<a!oe!>},<,<>}},{{<}i'<!>!>,<}!!oa!!eeu!>},<a>}}},{{},{{{{}},{<!>!!<!!}>}}}},{<!!!!'i,<!>},<"{!!"},>,{<!e'!>},<,!><!!{"!>!"!>!!'>}}},{{{<!!io!>,<ioi,>},{<i{!!!>,<!>!<!!!!{ae!!!>!>},<e!>!!!>'a,"!>},<>}}},{{{<>}}}},{{{{{{<{!>},<!!!!ua!!{e!>a>}},{<oa!!u{,!>},<e!>,<!>'o'u>,{<!!"!!!>,<}!>!!}!!<"ui!>,<!"!>},<,ou>}},{<o!>>,<!>},<{!!,a!>,<!,aa!>'!!!!!>"!o!>,a>}},{{<!"!!!e!>,!o,'<ea'i!>>,{<!>},<'!,!>},<e}>}}},{{{<!>,<!!}!!!>,<a!!<e}!o!>i,!>},<,>},<o,>}}},{{{},{{<!a!!!>!>},<o!!e<!!oa!!}!!>},<}!>!!!!i{>}},{<<"!>!>,<<<!!!>,!!!>!!!"{a>,<!>,<!!,!!!!!>>}},{{{{<>,{<{o{i'<{!!"i<!>,<u!>>}}},{{<u!>,<!>,<!!,!}!ee,!!!!'<'!<!><>}},{{{{<!>},<'!!!>ue!o!>!!<!>},<<!!>},<!!!>}>},<!>!>u<>},{{},{<!>},<!o!>,<i<e}>}},{{<u"u<,u"'a}<i!!!!!>e}>,{<!>,<!!!>>}},{}}}},{{{<!>,!!!>e>}}},{{<,oe>},{{<<!o!!!>},<!>,<u!!}!!!>'!!'"!!!!!>>}},{{{}}}}},{{{<!>},<!!a!>,<!>!!}a"<'>,{<!''u!!!>},<!!'aa!>i!!o'e!!!a>}},{<!>},<o!>i'!a!!<aa>,<'<e>},{{<'!!!>},<}i{i!!!>!!{!!a,!,>}}},{{}}}}},{{{{<e}!!>,{<e!!!>!!!!!'u{!!"!!!}o!'aou!!!!!>a>,<!!o}}ai!>,<i>}},{<!>},<!>,<'!!!>u!o{oo{'!!!>>,{}},{{<!!{!""o,}!!!!{!o<!,ii!!<,!!u,<>}}},{{{<<!>,<!>},<!>,<!!}!!!a,<,o!>},<!!a}!>,<!{}>}},{<"}{!>,<!a<<o!{u}!!!!!!!!"<!>,<!!<!>>},{{<<!!,"!>!!<!>,<a!>},<e,!>},<<{!!>},{<<!>,<!!{!!!o!}!>,<!!!>},<!o>,<oo>}}}},{{<{o!!!!!>{!>,<}>},{{}}},{{<{!!!>,<<!>!!!!u!>!!!>'i{,}u>}}},{{{{{<!>},<!!!>e!>},<oui">}},{<,,!'!>,<o!!!>ua<!>>}},{{{<{!,!>,<!!!>"!!!!<!>,<<!!<a!!''!>>}},{{}}},{{{<!!u}{!>"!!!>},<>},{<!!!>u'ea!>eu!u!!!><u"e,>}}}},{{{{{},<!!!>!u!!!>},<,{oi!>,<'!!!>,<>}},{{{{<!>,<"u}!!">,{}}},{<i!i,{{!>,<{!!!>!>!!uuo!>,<'!>,<>,<!!!!!><ioe!<!!ae'!!!>},<,>},{}},{{<<}!!{!{!!>},{<!!!>!ioaau!>!>},<ou,oo>,{<!>{e<,iei!!au!!!><u{!>},<>,<!!!!!>'!""!!!>e{!!!>u>}}}},{<!!o!!!,<!'!!!i>}}}},{{{{<a!!!!!!,iai!!!{!!o!!e<uo!!!><>},<}!!'!>,<<a,!!},!>,<!!!!!>}'!>,<!>u>},{<!!!>!<o!!!>{o!uaa,!!!>{!!!!}<o!!!>!>},<>,{<,"{ae!>},<!>},<!!!!!>!!!>!!!>}e,>}}},{{{<<"!>'a'!!uu>},<,!>!>a!>!!>},{<!!!!'!!!>e!!!!!}uu<!!"!o!{ie!>"eo>,{}},{{},{{{},{}},{<!>,<'!>e!}!!a<o>}}}},{{<!!!!!>},u!!!>e<{!!u">},{}},{{<,'i!!!>>,<"e<,'e{u!!!!o}"!""uu!!!!!>!>},<'o>},{{{}},<o!>},<!!!>!!!>e,!!!>,<!>},<,!!!>,<a>}}}},{{{},{{}},{{{<>}},{<>}}},{{},{{{<ueao>,<ou!!!>},<!>!>ei"e<i!!>},{<!!!>,<!>,<u<,!!a}<!>,<e>}}}},{{{{{{{<"!>">}}},{{<{!,}!>!!!>,<"!>},<!!!i!>},<i!!'!!uau!!!>!>},<>,{{}}}},{{{<>,<!>,<!>,<!!!!ioi!!!><{{}!!!!!!'>}},{<!!'!!{o!!i!!i}o!!!>},,>,{}},{{{<>,{{{<e!}{!!o""!>u!!!>">},<!!'{!!!>"!!!!!u!!!<,!!!>>}}},{<!!!>!!a!>},<}u!!!><!>,<o!!!>!uo}"u!{!>!!<>}},{{<a!>,<ui!!<!!!!{o!>}}!>},<"e,>,{<a<aeu"a!!"u!!i!!u!>},<!>,<!>,<'"<a<>,<>}},{<!>},<}"e'a!>},<!!'!>,<e!a!!!!o'!{!>},<!>},<'>}},{{{{},<<<o!>},<!>,<!!}!!!}>},{{},{<u!!'}i!!!!>}},{{}}}}}},{{{<"!!e!>},<i}!>i>,<!>},<!>!>},<>},{<!!oeou!>},<i!au{ai!!!!!>!>!>,<!!!>>,{{{}}}}},{{{{{<e!,,,!!u}i!>,<e,}}o!'>}},{<!!!>>}},{<{},!!iue''o!!!!!>!>},<>}},{{}},{<a!>e'!!,!!!>},<>}}}},{{<>}},{{{<'}{ae>},{<!e!>,<<}!!!>a!>},<!>,<!!!>!!!>a!!o>,{<!>},<<{a,e,,i}o!>,<>}}},{{}},{<ui!!!!ui!>,<{!>},<>,{}}}},{{{{{},<!!!!!>,<a''ao!>},<{!",>},{<!>!!u!!!!!>a!!!!!>,>,{<!>!>,<!!!!!>i}u!!!>!!!>,<!!uu!>},<!!>}}},{{{{<iai,!>'!>,<,u!!!>},<!!!>!!ao>},{<!!!>{!!!u!!',a!!!!!>u!>,<{>}},{{{}}}}},{{}}},{{{<i!>,<"!>,<{>},{{<e!!a!!!!!!}!!!>!!i<!!!>{>},{<!!!>!!!>}!!a!{,e!>a!!,!!!>>}},{}}},{{{{{<e!!iue<e!!,>}}},{{<o!>},<,!>,<>,{<i,,"{a!'}{o>}},<!!!>,!{!!!>},<!!oa!!,oa{!>>}},{{},{{<!!!!e'!>},<{!>,<!!i!}{a!!!><uu,!!!>},<}!!">,{}},<!!eo!>,<!>,<,o!>,<!>},<,!!!>}"o<!>,<i!!!!!!!>},<>}},{{{},<oae!!!e!>,<>}}}}}}}},{{{{}}},{{},{<!{'ie'!!!>,<!>,<ou!>,<!!!>},<{ea!u!>a!!!><>,{{<o!!!!!<,i<!>},<i!}!}!!!>,<!>u{!!!>>}}},{<!!!>a!>,<<{e{!>},<}}!>>}},{{<!>,<e>,{<!>},<!a!>a!!!>!!!>o!uio{o>}},{{<!!!>!!o!!iu!<"}!!o{'!{ooio<>},<e>}}},{}},{{{{<>},{{{},{<!!!>},<i!!!!!>!iaa,}e!>!!o}a!!!>},<>,<e!>},<!>,<!!i,,,"'uo>}}},{{<>,<>}}},{{{<!ee!!!!!>!>},<'!!!>!>i>}}}},{{}},{{{<}!!!>{!!>},{<'a,!{i!!,!>!!'!>}u>}},{<!!"!>!>,<">,{<<<!><o!>},<!>},<e!!<"!>>}},{}},{{{<!!!!!>!!!!!!<"<!"{}!>},<!!!!!!!>e}'!!{!!i>}},{{<!!i!>>,<o"!{'!>!>'!>,<!!<i!>},<o!>},<!!!>,<!!}a!>,<!!>},{{},{<!!a">}}},{<!>,<ii!!,>,{<a<o"!>>}}}},{{{<!>,<o!!!>}>},{{{<u>}},{<!>},<!>},<>}},{{<!!!!!>ao!>},<<!>},<!>,<!>,<!',o!>,<!!{!>,<!>},<!>},<{>}}},{{{<}!>},<<a>},<,!!!>ua!>!>,<o{u!!!i!>>},{{<'o>}},{{<e!>},<!!!>>},<!>!>,<"<!!!!i}>}},{{{{},{{<!!<o<!>},<>,{<>}},{{}},{}},{{{<>},<eoeuo!>,<>},{{{<o!!,!>,<!>"o!>,<,!!!>o'!!<oe>},{{{},{}},{}},{{<!>!>},<eo>},<>}},{{<!>!>",!!!>,<!!<,!>>},<!!!>{!>},<}<uo!!oe!o<o!>,<"{"<>},{}},{{},<!!{!!!!!>!>i!>'{ei!!!a!!!><!!{!!!!!>}<>}},{{{{}},{<i!!!>!>},<!>a!>},<"}!!,u,'{a!>},<{>,<!!!>io!!<!!{o!!!!!,e,>},{{<e>},{}}}}},{{{{{<u!>,<">,{<<!>uo!>,<>}}}},{<<u}"!<{{!!}!!a!!">},{{<}!!!>},<i!>},<!>},<}>},{<!!ui>,{}}}},{{<}"o!<ae!!'!>},<!>},<'u'!>},<<>},{{{<ai,}io!!!>e!>,<a,>}},{{<!>!><a!!!>o!!!>},<,{,a<u!!}e>}},{{{<'!>}!!'u,!!!i!!u>}},{<!>,<o!>!,>}}},{{{{}}},{{<!!!>,a!!<iae!!!>{<!!ao!!!u>},<!!!>!!<!>i"!>,<!!!>!!iu!>},<!!"'"!}!>,<<,>}}},{{{{{<iu!>},<'aae!o!!!>{aa,!>!!!>,<>},{<u!!!>,io<{u!!!!u>,{}}},{<}!<!!}!!!>!>},<}!>!>!>!!i,!>'!>,<,">,<{ioo!>},<!!!>{}a'e"!o>},{}},{}},{{{{}},{{<!!ue<>},{{}}},{{<a!,>,{}}}},{{{}}},{},{{{<o!!!>!>,<!>i!>},<,e!!!u<!>},<>,{<{<!!!>a!!!!'oi<!!!>!!}!>},<!!!>{>}}},{{{{<!!'u,>,<!!"!!}"!!{!i>}},{{<!>},<{!!<}<e>,<u!>,<!!!>!!!>!>,<a<!!!a!!u!a"!!,!!''>},{{{{},{{<!>!!!>!>,<e!!}!><!>,<!!!>,<'!>e!>!!ee,>}},{{{<,o!,,o<!!i!u!>>,{<!!!!ii"{}!!!>',>}},<!><"a!!!!{a!>},<e{!!!>}}>},{{{<"',!a>},<!>},<'!>,<!>,<{i!>},<!}!!!!!!!>!>,<i!>!'!!}<>},<{!o"o>},{{{{<i!!!!'{>}},{{<!{!}!>e!!!>!!!>i'e,,a}!>u">},{<!>},<u!>,i!i!!!>!>,<,a!!'"",uu>}}},{{},{{<!u!>a"}>},{{<!<iu!!!!!!u'''>}}}}}}},{},{<'!oue!!!>oa!u!>,<}e!>{o>}},{{},{{{<!!!!!eii!!!>},<>}},{{<}!>},<e<!>!!!>i,!!!>},<!e!!!!!>e!!!!!>">}}}},{}}},{{{<!!!>"!,!>,<!>!!!>,!!!!!>!!!!!!!!'oa!!u{a"!!!>e>},{<{,!!!>!>,<<!!!>,<"!!!>!>},<!!a"o}'>}},{{<>},{{<!>},<"!!!!!>'!>,<!>>},{<!!!>!>,<e{,a!!e}!>,<u<}!!i!>},<!!!>'>}}}}},{{{{<!!!>o<!!!>!!!!e"!!",!!!!!!i!!!!!>!'>},{<!!e!>,<'!!!>>}},{}},{{{<!'!!!>!ao!>,<!!ia!>},<!>i!>},<'!>,<>}},{{{<o!!,>},{{}}}},{{{<"!>,<!<<!>,<'>}}},{{},{<"!a!>},<ia{!>!!!>{!!!>},<!!}a"!!'!!'"u>},{{<a"!!!>},<'!!!>i!>,<',}}>},{}}}},{{},{{<o!!!>!!!>!i}''eu!>},<!!a,!!!>>},{<{!!!>o'u'oa!!e,>}}},{{<!>,<!}<}"!!!>u,!>!!!!!!!>!!!!o>,{<{!>},<!>'e!!"!!e>}},{{},{}}}},{{{<!>,<!!!>",!>oo{!>},<e'!!!!!>>},{<!>'a!>,<eu!!!>u}!!!!u">}}}},{{<!o'!i!>,<,!!",a!>},<>,{<{}oe!!!>}{!>},<,{'!>},<u!!!!!>,<>}},{{<'ao'a!!,!!<i!!!>>},{<i}!>,<'e>}}},{{{<<!!!>,<i!!!!!!!>}>}}}}}},{{{{{{{<{!>,<o"u}!!!>{o>},{<ue!!{>}},{<!!i!>},<o,!}eo'!!ue!>},<e>}},{{<{{!!i{!>},<!!!>!!!!!>},<e'<'!!{!>},<>,{<a!>,<'!>{!!!>"!}"<a}!!!>!!e!!ii!>>}}},{{{{{}},{<!!!'!!!!!>!,!>,<i,,i"{,e!>,<!>,<,>}}},{{<<ai!!!!!!!>!!!>},<"'o!>,<o'!!!>,<!!{}>,{}},{{<!!!>!>},<i!>},<i>},{}}},{{<<{>},{<!!!>,!!i!!ea<}!!!!o{}a!>,<,}!>>}}}},{{<"a!>},<ee,!>,<}!!!!!>'eoi{!!}!>},<>},{<!!i}!>!>},<!u!>!>,<}",!!'!><!>!<>},{}},{{{<u!>,<ae!i!>,<!!e!!!>iia>},{<!>,<!!!>a{u}ieu!!a}!!!!e!>},<o!>},<!>u!!u!>},<>}},{{<!!!>>,{<'>}}},{<!!u!>},<,!!o!!!>!!a!!!>!!}>}},{{},{{}}}},{}},{{{<e'o!>},<!!iie!>,<,!>,<!>!!e!>},<!!!!!!!>,<>,{<!!!!!>u!>,<e!o!e!>!!!>!e>}}},{<<!>,<i"!!}!!o!!!>!e{aaoui>,{<,}i'i"}"ou>}}},{{{<>},{<!!i,oa!!!>!!!!!>}}}eu>}},{<iaa!!!!i>},{{{},<<u!!!>!!o!>,<',!!!>u!!!>!!'{!>'!!,e>},{}}}}},{{{<}!>,<!>!!!>},<>},{{{}},{{<{,!>u"!!a"',<}!!!>u!!!!!>a!><!e>}},{<!>,<!!"'}!oa}uu}!{e'ei!!oa{!!!!!>>}}},{}},{{{},{{{<!!e">}},{{{<!!!>!!,">}},{},{{<a"oe!!!>"<!>,<!>,<">},{<a!>,<i!>!'!!!>u'!>,<,!>,<o,>}}}},{<"<!!!>iii!>!!!>},<<!>,<!!!>},<!!o!>,<!!!>ui">,<<i<a!!'"}<e!!!><!!!!!"}e,,!a>}},{<euo<!!!>},<u>,{<!!,!!u{!!!>!!!!!!!!}e<>}},{{<'}i!>},<a"e!!!>ue!!'oa>},<!e!!!>>}}}},{{{<'{!>,<a!ai'!!!!!><u!>,<"!>},<>},<a}!>},<}eo!!!>ai!>},<e',!>,<a!>!a"}>},{{<}o!>ao"!}<<>},{{<>}}}}},{{{{{<!!!>!>},<!ai!!>},{<{>}},{}},{{{},<i},ue!!!!ou!ee!'e'!!'>}}},{{<!>},<ii!!!>!>,<!>},<<}!>},<!,!>},<"}a>},{<,!!!>}!>},<!!,!>},<!>u<i!!"!>,<'u!>,<!>,<!!!>>}},{{{{{<"e!!!!!!u!!!>!!"!!!>"!}!oo!!!>,<>},{<!>},<!<!'u!>,<ae>}},{{},{<i!{>}}},{{{<{'!!<}!>,<,i,!>},<!>,<o!!!>,<}!!!!o>},<!!!>!e}a!e!>}!!o>},{<!o!!ae,a!>},<}}!>},<}{!!>},{<ea!>io"'{!<!>,<>,<o,"a'!>,<i!!!>}}!!!>,<!!<!>,<!}{a'>}},{{{{},{<{!!!!!>!!u'!!!!!!!<}e"a}>}},{<!>},<!!!>io!!!!!>},<,e,}!>!>!!e}!>},<ui<>,{{<i}o!!!>!!!!,{!!ee!>,<,!!>}}},{<!>},<,!>},<>,{{<{!>,<{"a}!!!>!!!>!!a!!ai!u>,{<ie"!"i>}}}}},{{{{<!"!!!>!}!!a!!>,<!>u!!!>!!,o!!,<!!<!>,<"!>,<e!!!>,{}!>},<!">}},{{}}},{{{<!>},<a"!!oo!!!!i>,{<uoo!>},<!!!>!!e,e!!u!u,i!!i,>,{}}},{{{<!>,<'i!>},<{e!{!!i>}},{<uiua{!!<e>}},{}},{<io!>e>,{{<i,!}!e>},<,!>{!!!>!a!}>}},{{},{{<a!>,<a!>!>,<oi!!!!!>,<!>!"!!a!!!>!<!<>}}}},{{<"ioe!>,<!!a<!o"!>!!i{!!!>,<!>!!o>}},{{{},{}},{<>,{<'!!'!>!i<!>>}},{{<!>,<!!!>,a<o<{!,}!a!!!>,!!!>>}}}}}},{{<"'",<'>},{{<u},!!!>",!>},<e{e!!!>!!!>!>,<!!'o}i>,<!>,<{{}i"a{!!!!!!!>,<}o,>},<!ii>},{{<{!>,<!!o{>}}},{},{{<'uo!>ui{!!!>!>,<!'!!'!"eo!<!!{!i>,{<!!,{{i!!!>,<!o>}},{{},{<o>}}}},{{{{{{},{}},{}},{{<e!>e!!o!!!>ue"{!!!>!!!>!>>}}},{{<>,{<i",a!"">}},{{<!i!>,<!!!"e!!u!!!!!!!>o}e"}>},{}}}},{{{<},!>,<!!!>uu!!'}!!!>o!!}<{!!!>,<u!}>,{{{},{{},{<<a!<!>},<u!!i{<!>},<>}}}}},{{<!>!>o!!!>!>,<<,!"!!}">}},{{<!!!!'o>},{}}},{<ao!!!>!!!>!!!>!>},<!"aao"{!>},<!>>},{{<'oa{!u}!o!!e!>},<!!'>}}}}},{{{{{<!>},<o}o!!!>,<'>}},{}},{}},{{{},<!>,<i!!e!>},<<<!>,<e{aa!iouie>},{<!!!>,>,<{!!!>,<'!!!>},<"!>"}!>},<!!!>,<!>!!!!!e!!!!,!>,<>},{{<!!!>,<>}}},{{<!>!>},<<<!!e!!!!!>>},{{<}!>},<'>}}}}}}"""
parse_stream(input_stream)
def parse_stream2(stream):
"""Parses a stream. Returns the number of groups."""
counter = 0
groups = 0
score = 0
in_garbage = False
ignore_next = False
garbage_count = 0
for char in stream:
if not in_garbage:
if char == '{':
counter += 1
groups += 1
score += counter
elif char == '}':
counter -= 1
elif char == "<":
in_garbage = True
else: # we're in the garbage NOW
if not ignore_next:
if char == ">":
in_garbage = False
elif char == "!":
ignore_next = True
elif char != ">":
garbage_count += 1
else:
ignore_next = False
return garbage_count
garbage_streams = {"<>": 0,
"<random characters>": 17,
"<<<<>": 3,
"<{!>}>": 2,
"<!!>": 0,
"<!!!>>": 0,
'<{o"i!a,<{i<a>': 10}
for stream, expected_garbage_count in garbage_streams.items():
print(parse_stream2(stream)==expected_garbage_count, parse_stream2(stream), expected_garbage_count)
parse_stream2(input_stream)
input_str = "157,222,1,2,177,254,0,228,159,140,249,187,255,51,76,30"
input = [int(item) for item in input_str.split(',')]
input
def transform_number_list(number_list, lengths):
# init
#number_list = [0, 1, 2, 3, 4]
#lengths = [3, 4, 1, 5]
current = 0
skip = 0
for length in lengths:
start, stop = current, current + length
if stop < len(number_list):
number_list[current: current + length] = number_list[current: current + length][::-1]
else:
# selecting
stop1 = len(number_list)
stop2 = stop - stop1
selection = number_list[start:stop1] + number_list[:stop2]
# reversing
reversed_selection = selection[::-1]
# modifying list in-place
number_list[start:stop1] = reversed_selection[:stop1 - start]
number_list[:stop2] = reversed_selection[stop1 - start:]
current = (current + length + skip) % len(number_list)
skip += 1
return number_list
transform_number_list([0, 1, 2, 3, 4], [3, 4, 1, 5])
number_list
skip
first_two = transform_number_list(list(range(256)), input)[:2]
first_two[0] * first_two[1]
Converting to ASCII:
def to_ASCII(number_list_as_str):
return list(ord(item) for item in number_list_as_str) + [17, 31, 73, 47, 23]
to_ASCII("1,2,3")
def transform_number_list2(number_list, lengths):
# init
#number_list = [0, 1, 2, 3, 4]
#lengths = [3, 4, 1, 5]
current = 0
skip = 0
for _ in range(64):
for length in lengths:
start, stop = current, current + length
if stop < len(number_list):
number_list[current: current + length] = number_list[current: current + length][::-1]
else:
# selecting
stop1 = len(number_list)
stop2 = stop - stop1
selection = number_list[start:stop1] + number_list[:stop2]
# reversing
reversed_selection = selection[::-1]
# modifying list in-place
number_list[start:stop1] = reversed_selection[:stop1 - start]
number_list[:stop2] = reversed_selection[stop1 - start:]
current = (current + length + skip) % len(number_list)
skip += 1
return number_list
sparse_hash = transform_number_list2(list(range(256)), to_ASCII(input_str))
from functools import reduce
reduce(lambda x, y: x^y, [65 , 27 , 9 , 1 , 4 , 3 , 40 , 50 , 91 , 7 , 6 , 0 , 2 , 5 , 68 , 22])
reduce(lambda x,y: x^y, sparse_hash[0:16])
dense_hash = [reduce(lambda x,y: x^y, sparse_hash[16*start:16*start+16]) for start in range(16)]
dense_hash
to_hex = lambda sequence: "".join([format(item, '02x') for item in sequence])
to_hex([64, 7, 255])
to_hex(dense_hash)
Let's encode the directions as vectors that we can add and substract.
import numpy as np
dirs = {'n': np.array([0, 1, -1]),
'ne': np.array([1, 0, -1]),
'se': np.array([1, -1, 0]),
's': np.array([0, -1, 1]),
'sw': np.array([-1, 0, 1]),
'nw': np.array([-1, 1, 0])}
def distance(displacement):
return (np.sum(np.abs(displacement))/2)
def sum_input(input):
return np.sum(dirs[item] for item in input.split(','))
test_inputs = [('ne,ne,ne', 3),
('ne,ne,sw,sw', 0),
('ne,ne,s,s', 2),
('se,sw,se,sw,sw', 3)]
for test_input, expected in test_inputs:
displacement = sum_input(test_input)
print(test_input, displacement, expected, distance(displacement), distance(displacement) == expected)
input = """n,nw,nw,sw,s,sw,sw,s,s,s,s,s,ne,s,ne,se,se,sw,s,se,se,se,n,se,se,ne,se,ne,n,ne,ne,sw,ne,ne,se,ne,ne,ne,sw,ne,ne,ne,n,ne,n,n,se,ne,ne,n,sw,n,ne,n,ne,n,ne,n,n,n,n,n,n,n,ne,n,n,sw,nw,n,nw,n,nw,n,n,nw,s,nw,nw,n,n,nw,se,nw,nw,sw,n,n,n,nw,nw,n,nw,nw,nw,nw,nw,ne,nw,nw,nw,sw,sw,nw,nw,nw,ne,sw,se,n,s,nw,sw,nw,s,sw,sw,n,nw,sw,sw,nw,sw,sw,nw,nw,nw,sw,sw,sw,s,sw,se,sw,sw,ne,sw,sw,sw,ne,sw,sw,sw,nw,sw,sw,sw,sw,sw,nw,sw,se,se,nw,nw,sw,sw,sw,ne,nw,sw,n,sw,sw,sw,sw,se,sw,sw,se,sw,ne,nw,sw,sw,nw,sw,sw,sw,se,sw,s,s,s,sw,s,sw,sw,sw,s,s,s,s,s,s,s,sw,s,nw,s,sw,s,s,se,s,s,s,s,ne,s,s,se,s,se,nw,s,s,ne,s,s,se,s,s,s,s,s,s,s,s,se,s,se,s,n,s,n,s,s,s,s,s,ne,s,sw,se,s,s,se,s,s,s,s,se,s,s,s,nw,se,s,nw,se,s,se,se,nw,s,sw,s,sw,s,se,se,s,s,s,se,s,s,se,n,se,se,se,s,s,s,se,s,se,se,se,se,s,nw,s,se,se,se,se,se,s,n,se,se,se,se,se,se,sw,s,s,se,n,se,se,ne,se,se,se,se,se,sw,se,se,se,n,se,se,ne,se,se,se,se,se,se,se,se,se,se,sw,sw,nw,se,ne,ne,n,s,se,se,n,ne,ne,nw,se,n,se,se,se,ne,ne,ne,se,s,s,se,se,ne,se,se,se,ne,ne,ne,s,se,nw,ne,s,se,se,ne,se,se,se,ne,se,s,ne,se,se,se,s,ne,sw,nw,s,ne,se,se,ne,ne,ne,n,ne,se,ne,ne,ne,se,ne,ne,sw,ne,ne,n,ne,s,sw,ne,ne,ne,se,ne,se,se,ne,ne,se,se,ne,ne,ne,ne,ne,se,se,n,ne,ne,ne,s,ne,ne,ne,ne,ne,ne,se,se,s,ne,ne,ne,ne,s,ne,ne,ne,ne,ne,nw,ne,ne,sw,ne,se,ne,ne,ne,ne,sw,s,ne,ne,s,ne,ne,ne,ne,se,s,ne,ne,ne,ne,sw,ne,ne,ne,nw,ne,ne,ne,n,ne,ne,se,ne,se,ne,ne,ne,sw,n,ne,ne,n,nw,se,n,n,n,n,sw,ne,n,n,n,ne,se,n,sw,ne,n,n,ne,ne,ne,ne,ne,n,ne,ne,n,n,ne,s,n,ne,n,sw,sw,ne,ne,n,ne,ne,n,sw,ne,s,ne,n,ne,n,n,ne,n,ne,s,n,ne,se,n,ne,n,ne,n,ne,ne,ne,n,s,ne,ne,ne,n,n,n,nw,ne,ne,n,ne,ne,n,sw,s,ne,n,n,sw,ne,ne,n,ne,n,nw,nw,nw,ne,n,n,n,ne,ne,se,n,n,s,ne,n,n,n,nw,ne,s,n,n,nw,sw,ne,ne,n,n,n,ne,n,ne,nw,n,n,n,n,ne,n,n,n,n,n,n,ne,n,n,ne,n,ne,n,n,n,n,n,sw,n,sw,n,n,sw,n,n,n,n,n,n,n,se,ne,se,sw,n,n,n,n,n,n,n,n,n,n,n,n,n,n,nw,n,n,nw,n,ne,n,ne,n,nw,nw,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,ne,n,n,sw,ne,n,n,n,n,n,n,n,ne,n,n,nw,n,n,nw,n,n,n,n,n,n,se,nw,sw,n,n,n,n,n,n,nw,n,n,s,n,nw,n,n,s,n,nw,n,n,nw,se,n,n,n,n,n,n,n,n,nw,n,n,nw,nw,nw,n,sw,nw,n,nw,se,nw,sw,n,nw,s,nw,n,n,sw,nw,nw,nw,sw,nw,nw,nw,n,n,nw,n,n,nw,s,nw,n,n,n,sw,se,n,n,n,nw,nw,s,nw,nw,n,n,nw,nw,nw,n,nw,nw,se,n,n,nw,nw,s,nw,n,n,n,s,nw,ne,nw,n,nw,nw,ne,se,n,ne,n,nw,sw,nw,n,nw,n,n,nw,n,nw,n,nw,n,nw,nw,n,n,n,s,ne,nw,nw,nw,nw,s,nw,nw,nw,n,n,nw,n,nw,sw,nw,nw,nw,n,ne,s,se,nw,n,nw,nw,n,nw,sw,nw,nw,nw,n,s,nw,n,nw,n,n,nw,sw,nw,nw,nw,n,nw,nw,nw,nw,nw,nw,ne,sw,nw,nw,nw,nw,nw,nw,sw,nw,ne,nw,nw,nw,ne,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,n,nw,nw,nw,nw,nw,nw,nw,n,nw,nw,s,se,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,sw,nw,nw,nw,nw,sw,nw,nw,nw,nw,nw,nw,se,n,nw,ne,nw,nw,s,nw,nw,se,s,nw,se,n,nw,nw,nw,nw,nw,n,nw,nw,n,nw,nw,nw,nw,nw,nw,nw,n,s,nw,sw,nw,sw,nw,nw,nw,nw,n,nw,n,nw,sw,nw,nw,nw,nw,nw,nw,ne,nw,nw,nw,nw,nw,nw,se,nw,nw,nw,ne,sw,nw,nw,nw,se,nw,nw,s,n,nw,nw,nw,nw,nw,nw,nw,sw,nw,nw,nw,nw,s,nw,ne,sw,sw,n,nw,nw,sw,nw,se,nw,nw,sw,nw,n,nw,se,nw,se,nw,sw,nw,nw,sw,nw,n,nw,se,nw,nw,s,s,nw,sw,nw,s,nw,nw,nw,n,nw,nw,sw,n,ne,sw,ne,sw,nw,sw,nw,sw,s,sw,nw,sw,nw,nw,nw,sw,sw,nw,nw,nw,se,sw,n,nw,nw,nw,sw,ne,sw,sw,sw,sw,sw,sw,sw,nw,se,nw,nw,sw,nw,sw,sw,sw,nw,nw,n,nw,nw,nw,nw,sw,sw,sw,se,sw,sw,s,sw,sw,sw,sw,sw,n,nw,sw,nw,nw,sw,sw,sw,sw,sw,nw,sw,sw,n,nw,sw,se,sw,sw,nw,sw,sw,nw,nw,ne,se,se,sw,nw,nw,se,sw,nw,sw,nw,nw,nw,nw,sw,sw,nw,sw,nw,sw,nw,sw,sw,sw,sw,sw,nw,nw,sw,sw,sw,sw,nw,nw,sw,nw,sw,sw,sw,sw,sw,sw,n,sw,nw,sw,nw,n,sw,se,nw,sw,s,nw,sw,nw,sw,sw,nw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,ne,ne,n,nw,sw,ne,nw,n,sw,sw,sw,sw,sw,ne,s,sw,se,n,nw,sw,sw,sw,sw,sw,sw,sw,sw,nw,sw,sw,sw,se,sw,sw,n,nw,sw,sw,nw,nw,sw,sw,ne,nw,nw,se,sw,sw,ne,sw,sw,nw,sw,nw,nw,sw,se,sw,ne,sw,sw,sw,nw,sw,sw,s,sw,sw,ne,n,sw,sw,ne,sw,sw,s,nw,nw,nw,sw,sw,sw,ne,sw,sw,n,ne,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,ne,sw,sw,ne,sw,sw,sw,sw,ne,sw,nw,sw,sw,sw,sw,sw,sw,se,sw,sw,ne,sw,nw,sw,sw,n,sw,ne,sw,sw,sw,sw,sw,sw,nw,sw,sw,sw,sw,sw,nw,sw,sw,sw,s,s,sw,sw,sw,sw,sw,sw,sw,sw,n,sw,sw,sw,sw,s,ne,sw,s,s,sw,sw,sw,sw,n,sw,sw,sw,sw,sw,sw,sw,sw,s,sw,sw,sw,sw,sw,se,s,sw,sw,sw,se,sw,sw,n,sw,s,sw,sw,sw,sw,sw,sw,sw,sw,ne,sw,s,s,s,s,sw,nw,sw,sw,sw,sw,nw,sw,sw,s,sw,sw,ne,nw,sw,sw,s,sw,s,sw,sw,sw,sw,s,ne,sw,sw,sw,s,sw,sw,se,sw,sw,sw,sw,sw,sw,ne,se,sw,sw,ne,s,nw,s,sw,s,sw,s,sw,n,sw,n,se,sw,sw,sw,s,sw,s,sw,sw,sw,sw,sw,s,s,sw,s,s,s,s,sw,sw,ne,sw,s,sw,sw,ne,sw,sw,sw,s,sw,ne,sw,sw,sw,ne,sw,sw,s,sw,sw,sw,sw,s,sw,s,sw,sw,sw,s,sw,sw,sw,n,n,sw,s,sw,s,sw,sw,sw,s,s,sw,sw,sw,sw,sw,sw,s,sw,n,sw,sw,s,nw,s,sw,s,n,s,sw,s,s,s,sw,nw,s,sw,s,sw,s,sw,s,sw,ne,s,s,sw,se,sw,sw,n,sw,s,nw,sw,sw,nw,s,s,sw,s,nw,s,s,s,sw,sw,s,s,nw,s,sw,sw,s,nw,sw,s,s,nw,nw,sw,s,se,s,s,sw,s,n,sw,sw,sw,sw,sw,sw,s,ne,s,s,s,sw,sw,s,s,sw,s,sw,s,se,ne,s,s,s,sw,s,s,sw,ne,s,s,sw,s,se,sw,s,s,sw,se,sw,s,ne,sw,s,s,s,s,s,s,s,s,s,s,sw,s,s,sw,s,se,s,s,s,sw,s,sw,s,sw,s,sw,s,s,s,sw,s,s,s,sw,s,n,sw,sw,se,ne,s,s,sw,s,sw,n,sw,s,sw,s,sw,sw,s,s,sw,sw,s,s,s,s,se,sw,s,s,s,n,s,s,se,s,sw,sw,s,sw,s,s,s,sw,s,sw,sw,nw,s,s,s,s,s,s,s,sw,s,s,s,sw,s,s,s,s,nw,s,s,s,s,s,s,sw,n,s,s,s,n,s,sw,se,sw,s,s,nw,sw,s,sw,sw,s,n,s,s,s,sw,s,sw,n,s,s,sw,s,s,sw,s,s,s,s,s,ne,sw,s,s,s,s,s,s,n,sw,s,s,se,n,se,sw,s,sw,s,sw,se,s,s,s,s,se,s,se,ne,s,s,sw,s,nw,se,s,s,s,s,sw,s,s,s,s,s,se,ne,s,s,s,s,s,s,s,se,ne,n,n,s,s,s,s,nw,nw,s,s,s,s,nw,s,s,s,s,s,se,se,s,s,s,n,s,n,s,s,s,s,s,s,s,ne,ne,s,s,n,s,ne,s,sw,s,sw,sw,s,s,ne,s,sw,s,s,n,s,s,se,s,s,s,s,s,s,s,s,se,s,se,s,n,s,s,s,n,s,s,s,s,s,s,s,ne,sw,n,s,s,s,s,sw,s,s,s,s,se,s,n,s,s,s,s,s,s,se,s,s,sw,s,s,s,s,s,s,s,se,n,s,s,ne,s,s,s,s,se,s,se,s,s,s,ne,s,s,s,nw,s,s,s,s,s,se,s,n,se,s,s,s,s,s,se,s,se,nw,se,n,s,n,s,s,s,s,s,s,s,s,s,s,s,nw,s,sw,s,nw,s,s,s,s,s,nw,s,s,ne,sw,s,s,sw,s,s,ne,s,s,se,s,s,s,s,s,s,s,sw,sw,s,ne,s,s,s,sw,nw,s,s,ne,s,n,s,s,s,s,s,n,sw,sw,s,s,sw,se,nw,s,ne,s,s,s,nw,n,s,n,s,s,s,s,s,sw,se,s,s,s,s,se,se,s,s,s,ne,s,s,s,s,s,se,se,nw,nw,s,se,s,ne,se,s,s,se,se,se,s,ne,nw,se,nw,s,n,s,se,se,se,s,sw,s,se,s,se,s,s,s,s,se,se,s,s,s,s,ne,s,s,s,s,s,s,sw,se,s,se,s,s,se,s,sw,s,s,se,se,s,se,se,s,s,se,s,s,s,s,n,ne,se,s,se,s,sw,sw,n,s,s,s,nw,se,sw,se,s,se,se,n,se,s,se,s,s,se,sw,n,s,s,sw,sw,s,se,sw,s,se,sw,s,se,se,s,se,s,se,se,se,ne,s,s,se,s,ne,se,se,s,se,se,se,s,ne,s,s,s,se,se,sw,s,s,s,se,n,s,se,s,se,s,s,s,s,s,s,se,ne,ne,se,ne,se,se,se,se,sw,s,n,ne,s,se,s,s,s,s,nw,ne,s,sw,se,sw,ne,se,nw,s,se,se,se,s,s,ne,s,se,se,ne,s,s,n,s,se,s,se,se,se,se,s,se,se,se,s,se,sw,s,se,n,s,nw,nw,se,s,s,sw,s,se,s,se,se,ne,s,se,se,s,se,s,se,n,s,se,s,s,se,s,s,s,ne,se,se,s,s,sw,se,se,se,se,se,n,se,se,ne,s,se,ne,s,se,se,s,s,n,s,se,s,s,se,ne,se,s,ne,nw,s,n,s,ne,se,s,sw,se,s,se,n,s,se,s,se,se,s,se,s,se,sw,ne,se,se,se,se,s,se,se,se,n,se,se,s,s,s,s,se,se,se,nw,se,se,ne,se,se,s,s,s,s,se,se,s,se,se,sw,s,se,s,se,s,ne,se,se,se,sw,se,nw,n,se,s,se,se,sw,s,sw,s,se,s,s,se,se,se,s,s,se,se,nw,s,se,sw,se,s,se,s,se,s,s,ne,nw,sw,s,se,se,se,se,se,nw,nw,se,s,sw,se,s,ne,se,s,s,se,s,nw,ne,se,ne,se,s,ne,s,nw,se,sw,se,nw,s,sw,sw,se,se,se,s,se,se,se,se,s,s,se,s,s,se,se,s,s,se,se,se,n,s,se,se,se,s,sw,se,se,se,se,se,se,se,se,s,se,se,se,se,ne,se,se,s,ne,se,se,ne,se,s,se,sw,n,se,se,se,se,n,se,sw,se,se,se,sw,se,se,se,s,sw,nw,se,se,sw,nw,se,se,nw,se,se,se,se,nw,se,se,se,se,se,s,nw,se,ne,se,nw,s,se,se,se,sw,se,se,se,se,se,se,se,s,s,se,se,se,se,se,se,nw,n,se,se,se,n,se,se,se,n,n,se,n,se,se,se,se,se,ne,se,se,se,sw,n,n,se,s,sw,se,s,se,ne,ne,nw,se,se,ne,se,se,se,se,se,s,se,se,s,se,se,s,se,se,nw,se,se,se,se,s,se,se,se,se,se,se,se,se,se,se,se,se,n,se,se,se,se,se,se,se,se,s,se,n,sw,n,se,s,se,se,se,se,se,sw,ne,se,se,se,se,se,se,se,se,se,se,se,se,se,se,se,se,ne,se,se,se,se,se,se,se,se,se,se,se,ne,se,ne,se,s,se,se,se,se,ne,s,s,se,se,se,se,se,s,se,se,nw,se,se,ne,nw,nw,se,sw,nw,se,se,se,se,se,se,sw,sw,se,se,nw,ne,se,se,ne,se,se,ne,se,se,se,se,se,ne,s,se,se,se,se,se,se,se,se,se,se,n,se,se,se,se,se,se,se,se,se,se,n,se,se,se,se,se,ne,se,se,se,se,se,se,s,se,se,se,se,se,se,se,se,ne,se,se,ne,sw,ne,se,se,ne,se,se,s,se,se,se,nw,ne,se,n,se,sw,se,ne,se,se,se,ne,se,se,se,nw,se,se,ne,n,se,se,se,sw,se,ne,se,se,se,ne,se,se,ne,se,se,se,se,se,se,ne,s,se,ne,se,se,se,se,se,se,ne,ne,se,nw,se,se,se,ne,se,se,sw,ne,ne,s,sw,se,nw,ne,se,ne,ne,se,se,se,ne,ne,se,se,nw,se,ne,ne,se,se,s,nw,ne,ne,se,se,se,ne,se,se,ne,se,se,se,se,se,se,se,s,se,ne,nw,sw,se,se,se,se,se,se,se,se,se,ne,se,se,ne,se,se,se,se,n,se,sw,se,nw,se,se,se,ne,ne,se,se,ne,ne,se,se,s,se,ne,se,s,nw,se,se,nw,se,s,nw,ne,se,se,se,ne,se,se,se,se,se,se,se,se,se,se,se,se,ne,ne,ne,sw,se,se,se,ne,se,se,se,n,se,ne,s,ne,s,se,se,nw,se,ne,ne,n,ne,ne,se,ne,ne,se,sw,n,ne,ne,se,se,ne,se,s,se,ne,n,ne,se,se,se,n,se,s,sw,se,ne,se,ne,se,n,se,se,se,se,ne,se,s,se,se,se,n,se,se,ne,ne,se,se,se,se,n,ne,ne,se,nw,se,sw,n,se,ne,se,se,ne,ne,sw,se,se,se,ne,ne,se,se,se,se,ne,n,n,ne,se,ne,se,sw,se,n,se,se,ne,se,se,sw,se,se,se,se,ne,se,se,ne,se,se,ne,n,se,ne,sw,se,se,se,ne,s,ne,se,se,se,ne,sw,se,se,ne,ne,ne,se,se,ne,se,se,se,ne,se,ne,se,ne,ne,se,se,ne,ne,se,ne,se,nw,se,ne,se,nw,n,nw,ne,se,ne,se,se,ne,se,nw,se,se,ne,nw,se,se,n,ne,nw,se,n,se,se,ne,se,se,se,ne,se,nw,se,ne,ne,se,nw,se,se,se,se,ne,se,se,se,se,ne,nw,se,ne,se,ne,ne,se,n,ne,ne,se,ne,n,sw,ne,ne,se,ne,se,se,se,sw,ne,se,s,nw,se,sw,s,se,ne,s,ne,se,ne,se,ne,s,ne,ne,se,se,se,ne,n,se,ne,nw,ne,ne,nw,se,n,sw,ne,ne,se,ne,ne,se,ne,se,se,sw,sw,ne,sw,se,se,ne,ne,nw,ne,se,se,ne,se,s,sw,ne,se,ne,ne,ne,se,se,ne,ne,se,se,ne,se,ne,se,ne,ne,se,se,se,se,ne,ne,se,ne,se,sw,ne,se,s,s,ne,ne,ne,se,ne,sw,se,ne,ne,se,se,ne,ne,se,ne,ne,ne,ne,ne,se,nw,ne,se,ne,ne,se,se,ne,se,ne,se,ne,n,se,n,se,se,se,se,nw,ne,n,se,ne,s,ne,se,se,ne,ne,ne,n,se,sw,sw,ne,se,ne,ne,ne,se,n,ne,ne,se,se,se,ne,ne,se,ne,sw,ne,n,s,se,se,sw,se,ne,ne,se,n,nw,ne,s,se,ne,sw,s,ne,s,ne,se,nw,ne,ne,sw,ne,ne,ne,s,ne,sw,ne,se,ne,ne,s,se,se,s,ne,nw,nw,se,se,ne,se,ne,s,ne,ne,ne,ne,ne,se,se,ne,ne,se,sw,se,sw,ne,sw,ne,ne,se,ne,se,s,n,se,ne,ne,se,ne,ne,ne,ne,n,se,se,ne,n,se,se,ne,se,ne,ne,se,se,ne,se,se,ne,ne,ne,se,sw,ne,se,se,ne,nw,ne,ne,ne,ne,ne,ne,ne,n,se,ne,se,s,ne,se,ne,ne,se,ne,se,se,ne,se,ne,ne,sw,se,ne,ne,ne,s,ne,ne,s,ne,ne,ne,ne,se,s,ne,ne,ne,ne,ne,se,sw,ne,ne,ne,ne,ne,ne,ne,ne,nw,ne,ne,ne,se,nw,ne,se,ne,ne,ne,ne,ne,s,ne,ne,se,ne,n,ne,ne,ne,ne,ne,ne,se,se,ne,s,ne,ne,se,ne,ne,se,ne,s,n,ne,ne,ne,se,ne,ne,s,se,n,ne,ne,ne,ne,ne,ne,ne,ne,n,ne,nw,ne,ne,ne,sw,ne,ne,ne,ne,ne,ne,ne,nw,ne,se,ne,ne,ne,ne,s,ne,ne,ne,ne,ne,n,ne,ne,ne,ne,ne,ne,n,se,ne,ne,s,ne,ne,ne,s,s,ne,ne,ne,ne,ne,ne,se,ne,ne,ne,se,s,nw,se,ne,ne,ne,ne,nw,ne,ne,ne,sw,ne,sw,ne,ne,ne,ne,ne,ne,n,ne,ne,ne,sw,se,ne,s,ne,ne,ne,ne,ne,ne,n,n,ne,ne,ne,n,ne,ne,nw,ne,ne,ne,nw,s,ne,ne,nw,ne,se,ne,ne,ne,nw,se,nw,ne,ne,ne,ne,ne,ne,ne,nw,ne,ne,ne,ne,sw,ne,ne,n,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,n,s,ne,ne,ne,ne,ne,ne,ne,ne,ne,sw,se,ne,sw,se,ne,nw,sw,ne,ne,ne,ne,nw,ne,ne,s,ne,ne,ne,ne,n,ne,ne,se,nw,s,ne,ne,ne,ne,ne,nw,ne,ne,s,se,ne,ne,s,ne,ne,ne,ne,ne,ne,ne,n,se,s,ne,ne,ne,n,ne,se,se,s,ne,ne,ne,sw,ne,ne,ne,se,ne,ne,ne,s,ne,ne,ne,ne,ne,ne,sw,nw,nw,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,n,ne,ne,ne,ne,ne,ne,ne,ne,s,ne,n,ne,se,ne,nw,ne,sw,ne,ne,ne,ne,nw,ne,s,ne,ne,ne,ne,ne,ne,sw,ne,ne,se,nw,ne,ne,ne,n,se,nw,ne,ne,ne,ne,s,ne,ne,n,se,ne,ne,sw,ne,ne,ne,n,ne,nw,ne,ne,ne,se,ne,n,ne,s,ne,ne,ne,ne,ne,ne,ne,ne,n,ne,ne,se,se,ne,ne,ne,ne,se,ne,ne,ne,ne,ne,ne,ne,n,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,nw,ne,ne,nw,ne,ne,ne,ne,sw,sw,se,ne,n,ne,ne,n,n,n,nw,ne,ne,ne,ne,ne,ne,s,ne,ne,ne,ne,ne,n,ne,sw,se,ne,sw,s,ne,ne,ne,ne,ne,ne,sw,ne,n,n,ne,n,ne,sw,n,ne,n,s,ne,n,ne,ne,ne,ne,ne,sw,s,ne,nw,ne,nw,nw,ne,ne,ne,ne,n,ne,ne,ne,ne,s,ne,ne,ne,ne,ne,ne,ne,ne,n,n,n,ne,n,ne,n,nw,ne,n,ne,ne,ne,ne,ne,ne,ne,ne,sw,ne,ne,ne,n,ne,ne,ne,ne,ne,ne,nw,ne,n,n,ne,ne,ne,n,ne,n,ne,ne,sw,nw,n,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,n,ne,ne,ne,n,n,ne,ne,ne,ne,ne,ne,n,ne,ne,ne,ne,n,n,s,ne,ne,ne,ne,se,ne,nw,ne,ne,se,nw,ne,ne,ne,sw,ne,ne,se,ne,n,n,s,ne,ne,ne,ne,ne,s,ne,ne,ne,sw,ne,ne,se,ne,n,ne,s,ne,sw,ne,s,ne,ne,s,ne,ne,ne,ne,s,ne,s,ne,ne,ne,nw,ne,n,ne,ne,ne,ne,n,ne,n,n,n,ne,ne,n,ne,n,ne,ne,n,nw,se,ne,n,ne,ne,ne,n,n,n,n,ne,n,s,ne,ne,ne,n,n,n,ne,s,s,n,s,nw,ne,ne,ne,sw,ne,ne,ne,n,n,ne,ne,ne,ne,ne,n,ne,ne,ne,n,ne,sw,ne,sw,ne,ne,ne,ne,ne,ne,nw,n,ne,ne,ne,n,s,n,ne,n,sw,s,ne,n,ne,s,ne,se,n,ne,se,n,ne,s,ne,n,ne,n,ne,ne,ne,ne,ne,n,sw,ne,n,nw,n,ne,ne,ne,n,ne,ne,n,n,n,ne,n,ne,n,sw,n,ne,ne,sw,ne,n,sw,n,n,n,nw,ne,ne,ne,ne,ne,ne,sw,s,ne,n,ne,n,n,ne,ne,sw,ne,ne,ne,n,ne,ne,nw,se,n,n,n,ne,ne,n,ne,ne,ne,sw,sw,ne,ne,ne,se,n,sw,n,n,ne,ne,ne,ne,ne,ne,sw,sw,ne,ne,ne,ne,n,n,nw,sw,ne,s,ne,ne,ne,ne,sw,n,n,n,ne,nw,ne,sw,ne,ne,n,sw,ne,ne,sw,ne,n,se,ne,ne,ne,nw,ne,n,ne,nw,ne,ne,s,ne,n,ne,ne,ne,n,ne,ne,ne,n,ne,n,n,n,nw,se,n,n,n,ne,ne,ne,ne,n,ne,se,n,n,ne,n,se,ne,ne,ne,ne,s,n,n,ne,ne,n,ne,n,sw,n,ne,n,sw,n,ne,n,n,ne,n,ne,sw,ne,n,ne,ne,n,s,ne,n,s,ne,n,ne,ne,ne,ne,n,ne,ne,n,ne,sw,n,ne,ne,ne,ne,ne,ne,ne,se,nw,se,n,n,n,n,n,ne,nw,n,n,n,n,ne,sw,n,n,n,ne,ne,n,ne,ne,ne,n,ne,sw,ne,n,sw,ne,n,ne,nw,n,sw,ne,ne,ne,ne,se,nw,sw,n,ne,sw,n,n,n,se,nw,n,s,ne,n,sw,nw,n,ne,ne,n,ne,ne,n,ne,n,n,ne,ne,n,ne,ne,ne,ne,n,sw,se,ne,ne,ne,s,n,nw,s,ne,ne,n,n,n,ne,ne,s,ne,ne,ne,sw,ne,n,n,n,ne,n,ne,se,n,ne,n,s,ne,n,ne,ne,n,ne,ne,s,n,n,n,se,n,n,ne,n,ne,se,se,se,n,n,n,nw,ne,ne,ne,ne,s,n,n,ne,ne,n,s,s,n,n,sw,ne,n,n,n,ne,ne,n,ne,ne,ne,sw,n,ne,n,n,n,ne,ne,nw,n,n,nw,sw,ne,sw,ne,s,n,n,s,n,ne,n,n,ne,n,ne,n,n,ne,ne,ne,n,n,ne,n,ne,ne,n,ne,ne,n,n,ne,ne,n,ne,sw,se,ne,ne,ne,n,n,nw,n,n,n,nw,se,n,n,n,sw,sw,n,n,n,n,ne,ne,n,ne,n,n,n,ne,n,ne,ne,se,se,ne,ne,n,n,n,ne,n,sw,ne,ne,ne,n,n,ne,se,n,sw,ne,ne,n,n,n,n,s,ne,n,n,nw,nw,n,n,n,ne,s,n,ne,ne,s,ne,n,n,sw,ne,ne,n,n,n,s,n,n,n,ne,n,sw,ne,n,s,n,s,sw,se,ne,n,n,n,n,ne,ne,nw,ne,n,n,ne,ne,ne,ne,ne,se,se,ne,n,n,sw,n,n,nw,n,ne,sw,n,sw,ne,ne,n,se,ne,ne,n,n,n,n,sw,n,n,n,nw,s,n,n,n,se,ne,ne,n,n,nw,n,n,n,n,n,n,n,n,n,se,n,ne,nw,n,se,n,ne,n,ne,n,n,n,n,nw,ne,n,n,ne,n,s,n,n,n,n,ne,ne,ne,ne,nw,n,s,se,ne,n,s,n,ne,ne,ne,nw,n,n,nw,se,ne,ne,ne,n,n,n,ne,s,nw,nw,nw,ne,n,n,nw,ne,n,n,ne,n,n,n,ne,sw,n,se,ne,se,n,nw,nw,n,ne,n,ne,ne,n,s,n,ne,ne,s,se,ne,ne,s,n,s,ne,n,n,n,n,nw,ne,n,sw,ne,n,n,n,n,n,se,s,n,n,n,se,n,n,n,n,n,n,n,n,se,n,n,s,ne,ne,ne,ne,s,n,n,n,n,ne,n,n,ne,n,n,n,ne,se,n,n,ne,ne,s,n,n,n,n,n,n,n,ne,s,n,n,n,nw,se,n,n,n,n,n,ne,n,ne,ne,ne,ne,n,n,se,n,n,ne,n,sw,n,ne,n,n,se,s,n,n,n,n,n,n,n,nw,s,n,n,n,ne,ne,n,s,nw,n,n,n,ne,ne,nw,n,ne,n,sw,n,n,ne,n,n,n,ne,nw,n,n,sw,n,se,s,n,n,nw,n,n,n,n,ne,sw,ne,se,n,n,n,n,ne,n,n,sw,nw,ne,n,n,n,sw,n,n,n,n,n,se,s,s,n,s,n,se,n,ne,n,n,n,n,n,n,n,ne,n,n,ne,n,n,n,n,se,nw,n,n,n,ne,n,n,n,n,ne,n,sw,n,s,n,n,n,n,n,se,n,n,ne,n,ne,n,se,n,n,ne,n,n,n,n,n,n,s,n,n,n,n,n,sw,n,ne,n,n,n,n,n,n,n,n,ne,n,n,s,n,n,n,n,n,ne,nw,ne,n,n,n,n,n,n,n,n,sw,n,n,n,nw,n,n,ne,n,ne,n,ne,n,n,nw,n,n,n,n,nw,n,se,n,n,se,n,n,n,n,n,n,n,n,n,n,s,n,n,n,n,ne,se,n,n,nw,n,n,n,n,s,n,n,ne,se,n,sw,n,n,n,ne,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,ne,n,n,n,n,n,n,sw,n,n,n,n,n,n,s,n,n,sw,n,n,n,n,n,n,n,n,ne,n,ne,n,n,n,n,n,n,se,s,n,n,sw,n,n,n,sw,n,n,n,n,n,n,n,n,se,s,sw,se,se,n,ne,se,n,n,n,n,n,n,n,ne,n,n,sw,n,n,n,n,n,n,n,n,n,n,ne,s,s,s,s,ne,s,s,s,sw,se,sw,se,ne,n,sw,nw,nw,sw,ne,se,nw,nw,nw,nw,se,sw,n,n,n,n,n,se,n,n,n,s,n,n,n,se,n,se,n,n,ne,n,n,ne,n,ne,ne,n,ne,ne,se,ne,n,ne,ne,ne,ne,ne,n,sw,se,se,ne,ne,nw,se,s,se,ne,se,se,se,se,ne,se,ne,ne,sw,se,se,ne,se,se,se,se,se,n,se,se,s,se,se,n,se,nw,se,se,sw,se,se,nw,nw,nw,s,se,s,n,se,se,sw,nw,s,se,se,se,se,se,ne,s,se,se,s,s,s,se,ne,nw,s,nw,se,s,sw,s,s,s,sw,s,s,s,s,s,s,s,s,s,sw,nw,sw,s,se,s,nw,s,sw,ne,s,s,s,s,s,sw,s,s,sw,sw,s,s,s,s,ne,n,sw,sw,s,s,se,sw,s,s,sw,s,sw,s,sw,s,sw,sw,s,s,s,sw,s,sw,sw,sw,sw,sw,sw,sw,n,nw,sw,sw,sw,sw,s,sw,sw,ne,sw,sw,sw,sw,sw,sw,sw,sw,n,sw,sw,nw,s,sw,sw,sw,sw,sw,sw,sw,s,sw,sw,sw,sw,se,se,sw,sw,sw,sw,sw,nw,sw,nw,sw,n,sw,sw,nw,nw,nw,nw,se,sw,nw,se,sw,sw,n,sw,n,sw,sw,nw,ne,nw,nw,se,nw,nw,nw,se,nw,nw,nw,s,n,nw,sw,n,sw,sw,nw,ne,nw,nw,s,nw,sw,nw,nw,sw,nw,sw,nw,ne,nw,nw,se,se,nw,nw,ne,nw,se,nw,se,nw,nw,nw,nw,s,s,nw,nw,nw,ne,nw,nw,nw,nw,nw,nw,nw,nw,n,nw,nw,nw,nw,nw,nw,se,nw,nw,nw,nw,nw,nw,nw,nw,nw,ne,nw,nw,n,n,nw,n,nw,nw,nw,s,se,nw,n,n,sw,nw,n,nw,nw,nw,nw,s,n,ne,nw,nw,nw,nw,n,ne,se,nw,nw,nw,n,s,n,n,nw,n,nw,n,nw,s,nw,nw,ne,s,nw,n,n,nw,s,nw,n,sw,nw,ne,n,nw,nw,nw,n,n,n,nw,n,nw,sw,n,n,n,n,se,ne,n,se,s,n,se,ne,n,nw,nw,s,nw,n,n,n,sw,n,nw,sw,n,n,n,nw,sw,n,n,sw,n,sw,n,sw,n,se,n,n,n,n,n,n,n,nw,n,n,n,n,ne,sw,n,s,n,n,n,n,se,nw,n,n,n,se,n,n,n,sw,n,n,se,n,ne,n,ne,ne,n,n,n,n,n,n,n,ne,n,ne,n,se,n,n,n,se,ne,n,n,n,s,s,n,n,n,s,se,n,n,n,n,n,n,se,n,ne,n,ne,ne,n,n,n,ne,n,n,n,n,ne,n,ne,n,n,sw,ne,sw,ne,n,n,n,ne,se,ne,sw,n,ne,ne,ne,n,ne,n,se,n,n,n,n,n,sw,nw,ne,ne,sw,n,se,n,n,ne,se,ne,ne,ne,s,ne,ne,n,ne,ne,ne,n,n,nw,ne,n,n,ne,ne,n,s,ne,ne,ne,ne,n,ne,ne,ne,n,ne,ne,sw,ne,n,ne,nw,se,ne,ne,ne,n,s,ne,ne,ne,ne,ne,n,ne,ne,ne,ne,ne,sw,ne,ne,s,n,ne,s,ne,n,ne,ne,ne,ne,ne,ne,se,se,ne,ne,ne,ne,n,n,ne,ne,ne,ne,ne,ne,ne,ne,nw,se,ne,ne,nw,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,se,n,ne,ne,ne,se,se,ne,ne,n,s,ne,ne,ne,ne,s,s,s,ne,ne,ne,se,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,sw,ne,s,ne,nw,ne,nw,ne,ne,nw,se,ne,s,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,nw,ne,nw,se,sw,ne,se,ne,ne,se,se,ne,ne,se,ne,sw,ne,ne,ne,se,ne,se,ne,ne,ne,s,s,ne,ne,se,se,ne,s,ne,se,ne,ne,ne,se,ne,ne,se,s,ne,se,ne,se,nw,ne,se,ne,s,s,ne,se,se,sw,se,ne,s,se,ne,ne,ne,ne,ne,n,se,se,se,ne,se,se,ne,n,nw,se,se,n,sw,ne,ne,ne,ne,s,ne,ne,sw,n,ne,ne,se,n,ne,se,se,ne,se,nw,ne,sw,se,s,ne,se,nw,se,ne,ne,ne,se,se,se,ne,ne,ne,se,ne,ne,sw,sw,nw,se,se,nw,n,ne,ne,ne,se,se,se,nw,se,nw,ne,se,nw,nw,se,se,n,se,se,se,se,se,nw,ne,se,se,se,s,se,se,se,se,se,s,se,se,se,nw,nw,ne,ne,n,ne,ne,se,se,se,se,se,sw,n,se,n,se,ne,se,se,se,se,ne,ne,se,se,ne,ne,nw,n,se,ne,se,se,se,se,se,se,se,se,sw,se,ne,ne,se,se,se,se,se,se,se,nw,se,se,se,ne,se,se,ne,se,se,se,se,se,se,sw,se,se,s,ne,se,nw,nw,se,se,se,se,nw,se,se,ne,se,se,se,nw,se,nw,se,se,se,se,se,se,se,se,se,se,se,nw,sw,sw,nw,se,se,se,se,s,se,nw,nw,s,se,se,n,sw,se,se,n,se,se,se,se,n,se,se,se,s,se,n,se,s,se,n,s,n,sw,nw,se,se,se,se,se,se,se,n,se,ne,se,se,sw,se,se,n,se,s,n,se,se,se,se,se,se,se,se,s,se,se,sw,s,se,se,se,nw,se,se,s,s,se,s,se,se,se,se,se,nw,se,sw,sw,n,se,s,se,se,se,se,n,se,ne,se,se,se,sw,s,se,s,se,se,s,se,se,se,s,se,se,s,s,se,n,s,se,nw,se,se,s,s,se,se,se,se,s,se,se,se,se,s,se,ne,s,sw,s,se,se,s,s,nw,s,se,se,sw,se,n,n,s,se,se,se,s,sw,se,se,s,s,s,s,se,n,se,s,s,s,se,s,nw,s,s,se,s,se,s,s,sw,se,se,s,ne,se,se,s,se,s,sw,s,s,s,s,se,se,s,n,n,se,s,se,se,n,ne,s,s,s,s,s,s,se,n,s,s,se,nw,ne,s,se,nw,se,se,s,s,se,s,se,sw,s,se,se,s,se,s,s,s,n,s,se,n,se,n,s,s,se,sw,se,s,s,s,s,ne,s,se,sw,s,s,s,se,s,ne,s,s,sw,se,s,se,se,s,n,s,s,s,s,sw,s,s,s,ne,s,se,sw,se,s,s,ne,s,se,s,se,se,nw,s,s,s,s,s,se,s,s,s,ne,s,ne,s,s,s,s,s,s,s,s,s,s,s,ne,s,nw,s,s,s,s,n,s,s,s,ne,sw,s,s,s,s,s,s,s,ne,s,s,s,nw,s,s,se,s,s,se,sw,s,s,s,n,s,s,s,s,s,s,s,s,s,s,nw,s,s,s,s,s,s,nw,s,s,s,s,s,se,nw,s,n,s,s,s,s,s,s,s,s,nw,se,s,s,s,s,s,s,s,s,s,s,s,s,s,se,n,s,s,n,sw,sw,ne,s,sw,nw,s,s,s,sw,s,s,s,s,s,ne,sw,s,s,s,s,s,s,s,sw,s,s,ne,s,s,s,s,s,s,nw,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,sw,sw,se,s,sw,s,s,nw,s,sw,s,sw,s,s,nw,n,sw,s,s,sw,se,s,s,s,s,se,sw,s,nw,s,ne,s,n,s,s,se,sw,sw,s,s,sw,s,s,s,se,s,s,s,ne,ne,sw,s,sw,s,s,s,s,s,s,sw,s,s,s,s,s,s,s,sw,sw,s,s,s,s,s,s,sw,s,s,s,se,sw,s,s,nw,s,s,sw,s,s,sw,ne,s,sw,sw,nw,s,s,s,sw,s,s,ne,sw,s,s,s,s,s,s,s,sw,s,s,sw,s,sw,s,s,sw,sw,sw,s,s,se,ne,se,s,s,ne,sw,s,sw,sw,s,sw,se,se,sw,s,s,s,sw,s,s,n,s,n,sw,sw,sw,s,n,se,sw,s,s,s,s,ne,s,sw,s,sw,n,s,s,s,s,s,s,s,s,s,s,s,s,s,sw,n,sw,s,ne,s,sw,sw,s,sw,s,s,sw,s,s,s,s,se,s,sw,s,s,sw,s,n,s,sw,s,s,sw,s,s,s,sw,sw,sw,s,nw,s,sw,sw,sw,s,s,s,sw,sw,sw,nw,sw,nw,nw,sw,sw,sw,nw,sw,sw,sw,s,s,sw,s,sw,s,s,sw,s,sw,sw,nw,sw,sw,ne,nw,nw,s,n,sw,n,s,s,s,sw,sw,sw,s,sw,sw,sw,sw,s,nw,sw,sw,s,sw,sw,nw,ne,sw,nw,sw,sw,sw,sw,sw,s,s,sw,sw,n,sw,n,sw,sw,sw,sw,se,sw,sw,sw,s,s,ne,sw,sw,nw,sw,s,se,sw,s,sw,sw,sw,se,sw,sw,s,sw,sw,sw,s,sw,sw,sw,nw,sw,sw,sw,sw,sw,sw,sw,nw,s,sw,sw,n,sw,s,s,sw,n,nw,sw,n,sw,sw,sw,n,s,sw,sw,sw,s,sw,sw,sw,s,s,sw,sw,sw,s,s,sw,sw,sw,sw,se,sw,sw,nw,sw,se,sw,sw,n,n,sw,s,sw,sw,sw,s,sw,sw,sw,sw,s,sw,sw,sw,ne,sw,sw,nw,nw,sw,sw,n,sw,sw,sw,sw,s,sw,sw,n,sw,sw,s,nw,sw,sw,sw,s,sw,sw,sw,sw,n,sw,sw,s,sw,sw,sw,sw,sw,sw,s,sw,sw,sw,ne,s,sw,sw,n,sw,sw,sw,sw,nw,sw,sw,sw,sw,sw,n,sw,nw,s,sw,sw,sw,sw,sw,ne,ne,sw,sw,sw,sw,sw,sw,sw,sw,ne,sw,sw,sw,sw,sw,s,nw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,s,sw,ne,se,sw,n,sw,s,sw,ne,sw,s,sw,s,sw,nw,nw,sw,n,se,ne,sw,sw,sw,sw,sw,sw,n,sw,sw,sw,sw,sw,s,nw,sw,sw,nw,sw,sw,sw,se,sw,n,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,s,sw,sw,s,sw,ne,ne,sw,sw,se,sw,nw,sw,nw,n,sw,sw,sw,s,sw,sw,sw,sw,sw,sw,sw,sw,n,s,sw,ne,sw,ne,sw,se,n,nw,nw,sw,sw,sw,sw,sw,s,ne,sw,se,sw,sw,sw,sw,sw,sw,ne,nw,se,sw,sw,sw,sw,sw,nw,nw,ne,nw,nw,s,sw,nw,sw,sw,ne,sw,ne,sw,nw,se,nw,n,sw,nw,sw,sw,sw,sw,sw,sw,nw,sw,nw,sw,sw,sw,se,sw,s,sw,sw,sw,sw,sw,sw,sw,sw,se,s,nw,nw,nw,s,n,sw,sw,sw,nw,sw,n,sw,n,s,nw,s,sw,sw,sw,sw,sw,sw,sw,sw,nw,sw,sw,sw,sw,sw,nw,sw,sw,sw,sw,sw,sw,nw,nw,sw,se,se,s,ne,sw,nw,sw,sw,nw,sw,sw,sw,ne,nw,sw,nw,sw,sw,sw,nw,sw,nw,sw,n,nw,ne,sw,sw,nw,sw,sw,sw,s,sw,nw,nw,nw,nw,nw,se,sw,sw,se,nw,se,nw,nw,n,sw,sw,sw,sw,nw,sw,nw,s,nw,sw,sw,nw,se,s,nw,sw,nw,nw,s,sw,sw,n,se,nw,sw,sw,nw,sw,sw,sw,sw,nw,nw,sw,sw,sw,sw,nw,nw,sw,sw,sw,sw,se,sw,nw,sw,sw,sw,nw,nw,se,sw,sw,nw,sw,ne,nw,sw,sw,sw,sw,sw,s,nw,sw,sw,nw,nw,sw,ne,nw,sw,sw,sw,sw,ne,s,nw,sw,sw,sw,nw,n,sw,nw,nw,nw,nw,nw,sw,sw,sw,ne,nw,sw,n,nw,sw,se,sw,sw,nw,nw,n,sw,nw,sw,nw,s,nw,sw,nw,nw,nw,n,nw,sw,s,nw,nw,s,nw,nw,sw,n,se,ne,n,sw,sw,sw,n,sw,sw,sw,s,nw,s,se,sw,sw,sw,ne,sw,sw,nw,sw,n,n,sw,n,nw,sw,s,ne,sw,sw,sw,sw,nw,sw,nw,sw,nw,sw,nw,nw,nw,sw,sw,nw,ne,sw,nw,s,nw,sw,sw,sw,sw,sw,nw,sw,sw,sw,nw,sw,nw,n,nw,sw,sw,nw,nw,nw,sw,sw,se,nw,ne,sw,sw,nw,nw,sw,sw,sw,s,s,sw,sw,ne,s,nw,ne,nw,se,nw,nw,nw,nw,se,sw,nw,sw,nw,nw,sw,sw,nw,sw,sw,sw,nw,sw,nw,nw,nw,sw,se,se,nw,nw,sw,nw,nw,nw,nw,s,sw,sw,nw,s,se,sw,nw,n,nw,sw,nw,se,sw,nw,nw,se,nw,nw,nw,nw,nw,sw,n,nw,ne,n,nw,sw,sw,sw,ne,ne,sw,nw,sw,nw,nw,nw,sw,nw,se,sw,nw,sw,nw,sw,nw,sw,nw,s,nw,se,nw,nw,nw,nw,nw,nw,n,nw,nw,sw,s,se,ne,n,sw,se,s,sw,nw,nw,se,nw,nw,sw,nw,nw,sw,sw,se,nw,sw,n,sw,sw,nw,nw,nw,nw,nw,nw,nw,sw,nw,nw,sw,nw,nw,nw,ne,nw,sw,se,sw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,s,nw,nw,nw,nw,nw,nw,nw,sw,sw,nw,nw,nw,nw,nw,nw,nw,sw,sw,n,nw,sw,nw,nw,nw,nw,nw,nw,sw,nw,nw,ne,nw,s,nw,sw,nw,nw,nw,ne,nw,sw,sw,nw,se,nw,sw,nw,nw,nw,nw,n,nw,nw,sw,nw,nw,nw,nw,sw,nw,nw,nw,nw,nw,n,nw,nw,n,s,nw,nw,nw,sw,nw,nw,se,nw,nw,nw,nw,nw,nw,nw,nw,sw,nw,nw,nw,nw,nw,nw,nw,nw,sw,n,nw,nw,nw,nw,nw,nw,nw,nw,s,nw,nw,sw,nw,nw,nw,nw,nw,s,nw,s,nw,sw,nw,sw,sw,sw,sw,se,nw,s,sw,nw,nw,se,s,nw,sw,sw,nw,nw,nw,nw,nw,nw,nw,nw,nw,ne,se,n,nw,nw,nw,nw,nw,nw,nw,nw,s,se,ne,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,se,nw,se,nw,sw,nw,nw,nw,ne,nw,nw,nw,nw,nw"""
sum_input(input)
distance(sum_input(input))
maxdist = 0
displacement = np.zeros((3,))
for item in input.split(','):
displacement += dirs[item]
maxdist = max(maxdist, distance(displacement))
maxdist
input = """0 <-> 889, 1229, 1736
1 <-> 1, 480, 793, 1361
2 <-> 607
3 <-> 273, 422
4 <-> 965, 1052, 1130, 1591
5 <-> 1998
6 <-> 483, 1628
7 <-> 1012, 1242, 1244, 1491
8 <-> 524
9 <-> 13, 281, 1498
10 <-> 10
11 <-> 1956
12 <-> 598, 621, 1210
13 <-> 9
14 <-> 1728
15 <-> 912, 1461
16 <-> 1489, 1680, 1994
17 <-> 854
18 <-> 1157, 1299
19 <-> 759
20 <-> 1352, 1831
21 <-> 1425
22 <-> 470, 685, 857, 1526
23 <-> 405
24 <-> 43, 536, 1849
25 <-> 1674
26 <-> 26, 1738
27 <-> 558
28 <-> 1863
29 <-> 154, 649, 1818
30 <-> 721, 1366
31 <-> 725
32 <-> 413, 880, 903
33 <-> 414, 442, 1403
34 <-> 489, 1308
35 <-> 385, 1254, 1464
36 <-> 167, 1013, 1860
37 <-> 535
38 <-> 605, 1297
39 <-> 680, 1408, 1982
40 <-> 169, 615, 952, 1547
41 <-> 644, 991, 1319, 1509
42 <-> 453, 1315
43 <-> 24, 200, 805
44 <-> 919, 1083
45 <-> 500
46 <-> 1532, 1550
47 <-> 910, 1837
48 <-> 1849
49 <-> 542, 1945
50 <-> 57, 660
51 <-> 354, 934
52 <-> 1212
53 <-> 569
54 <-> 706
55 <-> 55, 114, 1077
56 <-> 1453
57 <-> 50, 1438
58 <-> 616, 738
59 <-> 1242
60 <-> 312, 523, 648
61 <-> 748, 1780, 1965
62 <-> 1533, 1909
63 <-> 562, 661, 1016
64 <-> 280, 300, 677
65 <-> 661, 698, 1881
66 <-> 283, 440
67 <-> 382, 421
68 <-> 986, 1592, 1824
69 <-> 541, 1363
70 <-> 266, 1855
71 <-> 371, 433, 1055, 1682
72 <-> 793
73 <-> 73
74 <-> 1139
75 <-> 770, 1190, 1409, 1433, 1886
76 <-> 1135
77 <-> 492, 1771
78 <-> 575, 1107, 1596, 1670
79 <-> 1374
80 <-> 1168, 1519
81 <-> 1258
82 <-> 919, 1519, 1768
83 <-> 1463
84 <-> 684
85 <-> 517, 1655
86 <-> 1226
87 <-> 1700
88 <-> 523, 1292, 1939
89 <-> 177, 1695, 1706
90 <-> 400, 1683
91 <-> 194
92 <-> 106, 1546
93 <-> 104
94 <-> 501, 1686
95 <-> 285, 1985
96 <-> 402, 770
97 <-> 196
98 <-> 318, 1827
99 <-> 220, 1272, 1766, 1802
100 <-> 1105
101 <-> 380, 957
102 <-> 1305, 1483
103 <-> 262, 481, 621
104 <-> 93, 708, 1731
105 <-> 282
106 <-> 92, 901
107 <-> 553, 742, 1833
108 <-> 480, 1140
109 <-> 1247
110 <-> 1549
111 <-> 1283
112 <-> 1503, 1963
113 <-> 819, 1601
114 <-> 55, 593, 1020
115 <-> 324
116 <-> 378
117 <-> 1534
118 <-> 1740, 1836
119 <-> 1223, 1283
120 <-> 435, 1063
121 <-> 404, 939
122 <-> 294, 360, 1809
123 <-> 1166
124 <-> 1988
125 <-> 163
126 <-> 126
127 <-> 255, 754
128 <-> 634, 969
129 <-> 563, 1732, 1926
130 <-> 1196
131 <-> 1019, 1429
132 <-> 1287, 1417
133 <-> 1453
134 <-> 184, 786
135 <-> 647
136 <-> 260, 306
137 <-> 1342
138 <-> 292
139 <-> 1265
140 <-> 613
141 <-> 1001, 1217
142 <-> 142, 1901
143 <-> 758, 822, 1533
144 <-> 866, 930, 1197, 1443, 1665
145 <-> 1672
146 <-> 1937
147 <-> 1409, 1697
148 <-> 608, 954, 1624
149 <-> 527, 652, 1938
150 <-> 709
151 <-> 447, 1305, 1314
152 <-> 1741
153 <-> 901, 1997
154 <-> 29, 929
155 <-> 1178, 1976
156 <-> 560
157 <-> 522
158 <-> 541
159 <-> 1212, 1878
160 <-> 1078
161 <-> 1128, 1913
162 <-> 588, 734
163 <-> 125, 1073, 1952
164 <-> 1156
165 <-> 1781
166 <-> 1692
167 <-> 36, 1637
168 <-> 1043, 1085
169 <-> 40, 334, 1257, 1313
170 <-> 170
171 <-> 171
172 <-> 1391
173 <-> 925
174 <-> 1733
175 <-> 175, 1466
176 <-> 726, 1182
177 <-> 89, 1100
178 <-> 611, 1141
179 <-> 1036, 1307
180 <-> 1556
181 <-> 1930
182 <-> 775, 1284
183 <-> 1907
184 <-> 134, 1981
185 <-> 255, 1278
186 <-> 1891
187 <-> 531, 1318
188 <-> 790, 1623
189 <-> 379, 1749, 1865
190 <-> 1103, 1676
191 <-> 534
192 <-> 477
193 <-> 193, 860
194 <-> 91, 710, 1780
195 <-> 290, 1383, 1510
196 <-> 97, 1664
197 <-> 1416
198 <-> 287, 1760
199 <-> 366
200 <-> 43
201 <-> 813, 1882
202 <-> 246, 1175
203 <-> 203, 1007
204 <-> 204, 923
205 <-> 924
206 <-> 1162, 1818
207 <-> 365, 487, 923
208 <-> 1281, 1290
209 <-> 1280
210 <-> 210, 288, 1333
211 <-> 211, 417, 754
212 <-> 1698
213 <-> 1626
214 <-> 1256
215 <-> 215, 1385, 1671
216 <-> 811, 1025
217 <-> 554, 1715
218 <-> 1483
219 <-> 1741
220 <-> 99, 530, 1081, 1319, 1801
221 <-> 804, 1144
222 <-> 1288, 1702
223 <-> 223, 1231
224 <-> 649, 1179
225 <-> 1271, 1776
226 <-> 226, 1991
227 <-> 496, 857, 1004, 1821
228 <-> 371, 500
229 <-> 1162
230 <-> 693, 1081
231 <-> 506, 973
232 <-> 859, 969, 1922
233 <-> 233
234 <-> 875, 1006
235 <-> 1035, 1998
236 <-> 236
237 <-> 289, 569, 1440
238 <-> 1249, 1923
239 <-> 1564, 1775, 1944
240 <-> 1888
241 <-> 951, 1874
242 <-> 825
243 <-> 384, 983, 1838
244 <-> 715, 1501
245 <-> 592, 671
246 <-> 202, 391, 632, 656
247 <-> 663
248 <-> 253, 752
249 <-> 1073, 1558
250 <-> 290
251 <-> 792, 1389
252 <-> 797
253 <-> 248, 771
254 <-> 254, 1047
255 <-> 127, 185, 369
256 <-> 623
257 <-> 1636, 1740
258 <-> 317
259 <-> 1775
260 <-> 136, 561, 1290
261 <-> 359, 1657
262 <-> 103, 697, 1074
263 <-> 1205
264 <-> 1779, 1782
265 <-> 1407
266 <-> 70, 1215, 1306
267 <-> 333, 790
268 <-> 603
269 <-> 269, 1497
270 <-> 270, 1613
271 <-> 1416, 1562, 1923
272 <-> 579, 894
273 <-> 3, 993
274 <-> 333
275 <-> 1188
276 <-> 535, 645, 1166, 1269
277 <-> 1369
278 <-> 744, 1717
279 <-> 349, 695, 985, 1096
280 <-> 64, 1516
281 <-> 9, 427, 768, 1468
282 <-> 105, 867
283 <-> 66, 1235, 1525, 1748
284 <-> 530
285 <-> 95, 800, 1191
286 <-> 339, 611, 1581
287 <-> 198, 1285, 1501
288 <-> 210, 1059
289 <-> 237, 1928
290 <-> 195, 250, 1934
291 <-> 337, 1902
292 <-> 138, 1805, 1849
293 <-> 906
294 <-> 122, 1582
295 <-> 602
296 <-> 778
297 <-> 471, 483
298 <-> 298
299 <-> 402, 729
300 <-> 64, 1002
301 <-> 856
302 <-> 1084, 1538, 1739
303 <-> 892, 1774
304 <-> 1029, 1350
305 <-> 521, 1628, 1902
306 <-> 136, 469, 653, 835
307 <-> 981
308 <-> 1997
309 <-> 1612
310 <-> 1338, 1571
311 <-> 1388
312 <-> 60
313 <-> 1557
314 <-> 886, 1704
315 <-> 672, 779
316 <-> 1062, 1906
317 <-> 258, 1290
318 <-> 98, 318
319 <-> 1974
320 <-> 839
321 <-> 395, 615, 909, 1046
322 <-> 1077, 1390, 1989
323 <-> 323, 773, 1571
324 <-> 115, 493, 511, 650
325 <-> 325
326 <-> 1944, 1972
327 <-> 1489
328 <-> 412, 468
329 <-> 1637
330 <-> 556, 1176
331 <-> 656
332 <-> 564, 1688
333 <-> 267, 274, 421, 1205, 1743
334 <-> 169, 1896
335 <-> 1176
336 <-> 638, 1408, 1633
337 <-> 291, 844, 1549
338 <-> 515
339 <-> 286
340 <-> 340, 1959
341 <-> 943
342 <-> 417, 638, 1116, 1536
343 <-> 1030
344 <-> 584, 1751
345 <-> 345, 1810
346 <-> 346
347 <-> 587
348 <-> 515, 1187
349 <-> 279, 349
350 <-> 1749
351 <-> 1030, 1097
352 <-> 352
353 <-> 353, 683
354 <-> 51, 354, 735
355 <-> 1362
356 <-> 1593
357 <-> 357
358 <-> 441, 501, 899, 1672
359 <-> 261
360 <-> 122, 360, 1234, 1927
361 <-> 736
362 <-> 1169
363 <-> 780
364 <-> 444, 905, 1049, 1911
365 <-> 207
366 <-> 199, 1469
367 <-> 1612
368 <-> 675, 1800
369 <-> 255
370 <-> 370, 873, 962, 1238
371 <-> 71, 228, 456
372 <-> 1912
373 <-> 1318
374 <-> 1018, 1246
375 <-> 898, 1303
376 <-> 376, 573
377 <-> 1080
378 <-> 116, 1140
379 <-> 189, 1984
380 <-> 101
381 <-> 472, 827, 1097
382 <-> 67
383 <-> 383, 582
384 <-> 243, 432, 444, 569, 634
385 <-> 35
386 <-> 1496
387 <-> 637, 737, 756, 1293
388 <-> 1562
389 <-> 633
390 <-> 488
391 <-> 246, 853, 1422
392 <-> 1253, 1331
393 <-> 921, 1567, 1777, 1970
394 <-> 809
395 <-> 321, 798, 1040
396 <-> 746, 1332
397 <-> 400, 953
398 <-> 1958
399 <-> 399
400 <-> 90, 397, 808, 1485
401 <-> 1395
402 <-> 96, 299, 1388
403 <-> 716
404 <-> 121
405 <-> 23, 934, 1221
406 <-> 1007
407 <-> 1391
408 <-> 497, 1090, 1644
409 <-> 1479
410 <-> 793, 1977
411 <-> 1026
412 <-> 328, 581, 806
413 <-> 32, 1354
414 <-> 33, 1920
415 <-> 799, 1207, 1880
416 <-> 1862
417 <-> 211, 342, 589, 1858
418 <-> 556, 1437, 1490
419 <-> 1393
420 <-> 420
421 <-> 67, 333, 1813
422 <-> 3, 706, 1598, 1721
423 <-> 1834
424 <-> 854, 1442
425 <-> 855, 1080
426 <-> 1408, 1469
427 <-> 281
428 <-> 832, 1998
429 <-> 553, 657, 834
430 <-> 1466
431 <-> 1357
432 <-> 384
433 <-> 71
434 <-> 434, 489, 1137
435 <-> 120
436 <-> 972, 1461
437 <-> 550
438 <-> 486, 844
439 <-> 978
440 <-> 66, 705, 1850
441 <-> 358, 589, 783, 804, 1129
442 <-> 33, 497
443 <-> 1806
444 <-> 364, 384, 1698
445 <-> 1208, 1294, 1452
446 <-> 1143, 1452
447 <-> 151, 1072
448 <-> 448
449 <-> 997, 1829
450 <-> 1277
451 <-> 1531, 1866
452 <-> 1175, 1622, 1975
453 <-> 42, 1486
454 <-> 689
455 <-> 1497
456 <-> 371, 1577
457 <-> 702
458 <-> 461, 921, 1279
459 <-> 1004
460 <-> 485, 505, 1211, 1451
461 <-> 458, 541, 916, 1844
462 <-> 1281
463 <-> 856, 1481
464 <-> 602, 1476, 1553
465 <-> 543, 1566
466 <-> 847, 1593
467 <-> 1270
468 <-> 328, 829
469 <-> 306, 667, 720, 1931
470 <-> 22
471 <-> 297
472 <-> 381
473 <-> 473
474 <-> 599, 1146
475 <-> 1570, 1894
476 <-> 1145
477 <-> 192, 1193, 1690
478 <-> 1469, 1840
479 <-> 1684
480 <-> 1, 108
481 <-> 103, 963
482 <-> 1778
483 <-> 6, 297, 1662
484 <-> 1435
485 <-> 460
486 <-> 438
487 <-> 207, 998, 1185
488 <-> 390, 1231, 1668
489 <-> 34, 434, 1341
490 <-> 990, 1203
491 <-> 936
492 <-> 77
493 <-> 324
494 <-> 1984
495 <-> 495, 1954
496 <-> 227
497 <-> 408, 442, 1551
498 <-> 1704, 1788
499 <-> 836
500 <-> 45, 228, 1358, 1798
501 <-> 94, 358, 1559
502 <-> 951
503 <-> 1036
504 <-> 1303
505 <-> 460
506 <-> 231, 606, 1473
507 <-> 1109
508 <-> 1724
509 <-> 1644
510 <-> 848
511 <-> 324, 1036
512 <-> 523
513 <-> 809, 1294
514 <-> 785
515 <-> 338, 348, 1027, 1193, 1226
516 <-> 1988
517 <-> 85, 1482
518 <-> 518
519 <-> 1625
520 <-> 520
521 <-> 305, 1033
522 <-> 157, 1355, 1476, 1588
523 <-> 60, 88, 512
524 <-> 8, 1998
525 <-> 990, 1275
526 <-> 1310, 1552
527 <-> 149, 979, 1805
528 <-> 698
529 <-> 631, 970
530 <-> 220, 284, 1533, 1944
531 <-> 187, 551, 1168, 1574
532 <-> 1484
533 <-> 892
534 <-> 191, 879
535 <-> 37, 276, 1527
536 <-> 24, 1094
537 <-> 747, 952
538 <-> 1620, 1735
539 <-> 858, 1467
540 <-> 1263, 1572
541 <-> 69, 158, 461
542 <-> 49, 1384
543 <-> 465, 639, 873
544 <-> 1338
545 <-> 1967
546 <-> 806, 1239
547 <-> 792, 1039, 1078
548 <-> 548, 1891, 1941
549 <-> 861
550 <-> 437, 1209, 1967
551 <-> 531, 888, 896
552 <-> 798
553 <-> 107, 429, 1330, 1951
554 <-> 217
555 <-> 744, 947, 1246
556 <-> 330, 418, 1070, 1925
557 <-> 1826, 1854
558 <-> 27, 1629
559 <-> 1042, 1150
560 <-> 156, 1472, 1834
561 <-> 260
562 <-> 63
563 <-> 129, 1309
564 <-> 332
565 <-> 1770, 1842
566 <-> 621
567 <-> 1160, 1178, 1642
568 <-> 895
569 <-> 53, 237, 384
570 <-> 641
571 <-> 571, 1261, 1924
572 <-> 882
573 <-> 376
574 <-> 982
575 <-> 78, 1255
576 <-> 887, 1539
577 <-> 603, 1122, 1679
578 <-> 742
579 <-> 272, 1444, 1747
580 <-> 797, 1554, 1718
581 <-> 412, 1926
582 <-> 383
583 <-> 1611
584 <-> 344, 1620
585 <-> 1692
586 <-> 1383
587 <-> 347, 1351
588 <-> 162, 1220
589 <-> 417, 441
590 <-> 1919
591 <-> 884, 992
592 <-> 245, 814
593 <-> 114
594 <-> 1843
595 <-> 1809
596 <-> 837
597 <-> 1563, 1575
598 <-> 12, 605, 984
599 <-> 474, 1218
600 <-> 732, 1237, 1714
601 <-> 1913
602 <-> 295, 464, 1061
603 <-> 268, 577, 720
604 <-> 604
605 <-> 38, 598
606 <-> 506, 686, 1813
607 <-> 2, 1948
608 <-> 148
609 <-> 1571
610 <-> 772, 901
611 <-> 178, 286, 880
612 <-> 1814
613 <-> 140, 883, 1198, 1764, 1942
614 <-> 1352
615 <-> 40, 321
616 <-> 58, 1413
617 <-> 624, 1008, 1591, 1791
618 <-> 1625
619 <-> 871, 1567
620 <-> 1954
621 <-> 12, 103, 566
622 <-> 1895
623 <-> 256, 1767
624 <-> 617
625 <-> 663
626 <-> 626
627 <-> 1650
628 <-> 884
629 <-> 1104, 1421
630 <-> 630, 864
631 <-> 529, 646
632 <-> 246
633 <-> 389, 1847
634 <-> 128, 384
635 <-> 1553, 1817
636 <-> 636
637 <-> 387
638 <-> 336, 342, 646, 1453
639 <-> 543, 815, 1087
640 <-> 1422, 1597
641 <-> 570, 805, 993, 1961
642 <-> 1371
643 <-> 959, 1044, 1444
644 <-> 41
645 <-> 276, 1022, 1184
646 <-> 631, 638, 1790
647 <-> 135, 1286
648 <-> 60
649 <-> 29, 224, 1636
650 <-> 324
651 <-> 863, 1321
652 <-> 149, 687, 1128, 1346
653 <-> 306
654 <-> 1409
655 <-> 1142, 1733
656 <-> 246, 331, 768, 1815
657 <-> 429
658 <-> 1511, 1569
659 <-> 1744
660 <-> 50, 796, 1524
661 <-> 63, 65, 810
662 <-> 995, 1661
663 <-> 247, 625, 1001
664 <-> 664
665 <-> 1305
666 <-> 666, 1817
667 <-> 469, 1003, 1550
668 <-> 1540, 1958
669 <-> 831, 883, 1349, 1719
670 <-> 1531
671 <-> 245, 671, 1693
672 <-> 315, 1088
673 <-> 942, 1381, 1660
674 <-> 880
675 <-> 368
676 <-> 1269, 1699
677 <-> 64, 1654
678 <-> 784
679 <-> 1760
680 <-> 39
681 <-> 681
682 <-> 728, 749, 1995
683 <-> 353
684 <-> 84, 1150
685 <-> 22
686 <-> 606
687 <-> 652, 1687
688 <-> 1878
689 <-> 454, 689
690 <-> 924, 1183
691 <-> 1410, 1413
692 <-> 1702
693 <-> 230, 1658
694 <-> 820, 1282, 1873
695 <-> 279
696 <-> 1168
697 <-> 262, 766, 776
698 <-> 65, 528, 698, 940
699 <-> 1778
700 <-> 743, 1459, 1825
701 <-> 1475
702 <-> 457, 792, 861, 1467
703 <-> 1581
704 <-> 1969
705 <-> 440, 1145
706 <-> 54, 422
707 <-> 1015, 1780
708 <-> 104, 1266
709 <-> 150, 1778
710 <-> 194
711 <-> 751
712 <-> 963
713 <-> 1525, 1762
714 <-> 1713
715 <-> 244, 1293, 1421
716 <-> 403, 1572
717 <-> 1142
718 <-> 1204
719 <-> 1672
720 <-> 469, 603
721 <-> 30, 1268, 1400
722 <-> 1183
723 <-> 1012
724 <-> 1029, 1289, 1368
725 <-> 31, 1039
726 <-> 176, 726
727 <-> 856
728 <-> 682, 1000
729 <-> 299, 1216, 1967
730 <-> 850, 900
731 <-> 1540, 1884
732 <-> 600, 784
733 <-> 1655
734 <-> 162
735 <-> 354, 1955
736 <-> 361, 1084, 1822
737 <-> 387
738 <-> 58, 1573
739 <-> 1119, 1216, 1822
740 <-> 829, 1219
741 <-> 1164
742 <-> 107, 578
743 <-> 700, 1744
744 <-> 278, 555
745 <-> 835, 1903
746 <-> 396
747 <-> 537, 1843
748 <-> 61
749 <-> 682, 1217, 1731
750 <-> 874, 1110, 1724
751 <-> 711, 1767
752 <-> 248, 1011
753 <-> 1327, 1885
754 <-> 127, 211, 1117
755 <-> 755
756 <-> 387
757 <-> 1098, 1169
758 <-> 143, 1689
759 <-> 19, 1517
760 <-> 831, 1915
761 <-> 761, 1195
762 <-> 1634
763 <-> 763
764 <-> 848, 1375
765 <-> 765, 1136
766 <-> 697, 1295, 1887
767 <-> 1906
768 <-> 281, 656, 1031
769 <-> 1457, 1863
770 <-> 75, 96
771 <-> 253, 846, 1375
772 <-> 610
773 <-> 323
774 <-> 1067
775 <-> 182, 1494
776 <-> 697
777 <-> 1136
778 <-> 296, 1057
779 <-> 315, 1631, 1796
780 <-> 363, 780, 1814
781 <-> 928, 1423
782 <-> 1850
783 <-> 441
784 <-> 678, 732, 999, 1988
785 <-> 514, 1248
786 <-> 134, 786, 1009
787 <-> 1348, 1863
788 <-> 891, 1183, 1455
789 <-> 1310, 1420, 1510
790 <-> 188, 267
791 <-> 1276
792 <-> 251, 547, 702
793 <-> 1, 72, 410, 1092
794 <-> 880
795 <-> 1799, 1807
796 <-> 660, 1548
797 <-> 252, 580, 797
798 <-> 395, 552
799 <-> 415, 799
800 <-> 285, 1889
801 <-> 801
802 <-> 802
803 <-> 1188, 1326, 1935
804 <-> 221, 441
805 <-> 43, 641, 1772
806 <-> 412, 546, 918, 1617
807 <-> 876, 1887
808 <-> 400, 1435, 1716
809 <-> 394, 513
810 <-> 661
811 <-> 216, 1259
812 <-> 1883
813 <-> 201, 1692
814 <-> 592
815 <-> 639
816 <-> 1041, 1734
817 <-> 1134, 1432
818 <-> 1575
819 <-> 113, 1063
820 <-> 694
821 <-> 1242
822 <-> 143, 892
823 <-> 1393, 1492
824 <-> 946
825 <-> 242, 999
826 <-> 1594
827 <-> 381, 1079, 1580
828 <-> 1941
829 <-> 468, 740, 1905
830 <-> 977, 1260, 1861
831 <-> 669, 760, 946, 1332
832 <-> 428, 832, 944, 1172
833 <-> 837, 1008, 1470
834 <-> 429, 915
835 <-> 306, 745, 976
836 <-> 499, 967
837 <-> 596, 833, 974
838 <-> 1335
839 <-> 320, 839, 1703
840 <-> 1053, 1398, 1760
841 <-> 1193
842 <-> 842, 1066, 1108
843 <-> 1414, 1697, 1894
844 <-> 337, 438
845 <-> 1506
846 <-> 771
847 <-> 466, 907, 1432
848 <-> 510, 764
849 <-> 1063, 1195, 1701
850 <-> 730, 1551
851 <-> 1112, 1331, 1479
852 <-> 1652
853 <-> 391
854 <-> 17, 424, 906, 1665
855 <-> 425, 1082
856 <-> 301, 463, 727, 1744
857 <-> 22, 227
858 <-> 539, 1252, 1472
859 <-> 232, 1843
860 <-> 193
861 <-> 549, 702, 1709, 1884
862 <-> 1149
863 <-> 651, 955
864 <-> 630
865 <-> 1138
866 <-> 144, 1111, 1114
867 <-> 282, 1487, 1835
868 <-> 1699
869 <-> 869
870 <-> 1487
871 <-> 619
872 <-> 872
873 <-> 370, 543, 1968
874 <-> 750, 874
875 <-> 234, 1202, 1473
876 <-> 807, 933, 1741
877 <-> 1205, 1874
878 <-> 1831
879 <-> 534, 1860
880 <-> 32, 611, 674, 794
881 <-> 1361, 1750
882 <-> 572, 1495
883 <-> 613, 669
884 <-> 591, 628, 1815
885 <-> 996, 1237
886 <-> 314, 1709
887 <-> 576
888 <-> 551
889 <-> 0, 1494
890 <-> 1100, 1966
891 <-> 788, 1312
892 <-> 303, 533, 822, 1334, 1812, 1935
893 <-> 1723
894 <-> 272, 1992
895 <-> 568, 1038
896 <-> 551, 1425
897 <-> 1783
898 <-> 375
899 <-> 358
900 <-> 730
901 <-> 106, 153, 610
902 <-> 1203
903 <-> 32, 1935
904 <-> 1109
905 <-> 364
906 <-> 293, 854, 1565
907 <-> 847, 1139, 1180, 1431, 1563, 1878
908 <-> 1908
909 <-> 321, 943
910 <-> 47, 1067
911 <-> 1468, 1495
912 <-> 15
913 <-> 1692
914 <-> 922, 1445
915 <-> 834, 1002
916 <-> 461
917 <-> 1177, 1924
918 <-> 806, 962, 1058, 1419
919 <-> 44, 82, 1933
920 <-> 1147, 1539
921 <-> 393, 458, 1055, 1951
922 <-> 914, 1271
923 <-> 204, 207, 1201
924 <-> 205, 690
925 <-> 173, 1816
926 <-> 1279
927 <-> 927
928 <-> 781
929 <-> 154
930 <-> 144
931 <-> 972, 1237
932 <-> 1317
933 <-> 876, 1756
934 <-> 51, 405, 1105, 1960
935 <-> 935, 1674
936 <-> 491, 1201, 1247
937 <-> 956, 1576, 1788
938 <-> 1377, 1733
939 <-> 121, 1638
940 <-> 698, 1808
941 <-> 1665, 1957
942 <-> 673
943 <-> 341, 909
944 <-> 832
945 <-> 1087, 1340
946 <-> 824, 831
947 <-> 555
948 <-> 959
949 <-> 1068
950 <-> 1664
951 <-> 241, 502, 1151
952 <-> 40, 537, 1376
953 <-> 397
954 <-> 148, 1075, 1364
955 <-> 863, 1235, 1618, 1724
956 <-> 937
957 <-> 101, 1323
958 <-> 1794, 1972
959 <-> 643, 948, 1023
960 <-> 960, 1417
961 <-> 1278
962 <-> 370, 918
963 <-> 481, 712
964 <-> 1198
965 <-> 4
966 <-> 966
967 <-> 836, 967, 1821
968 <-> 1513
969 <-> 128, 232
970 <-> 529
971 <-> 1471
972 <-> 436, 931
973 <-> 231
974 <-> 837
975 <-> 1390
976 <-> 835
977 <-> 830
978 <-> 439, 1687
979 <-> 527
980 <-> 980, 1609, 1940
981 <-> 307, 1671
982 <-> 574, 1318, 1643
983 <-> 243
984 <-> 598
985 <-> 279
986 <-> 68
987 <-> 1060
988 <-> 1942
989 <-> 1478
990 <-> 490, 525, 1838
991 <-> 41, 1263, 1302
992 <-> 591
993 <-> 273, 641
994 <-> 1026, 1240, 1618
995 <-> 662, 1545
996 <-> 885, 1528
997 <-> 449, 1058
998 <-> 487
999 <-> 784, 825
1000 <-> 728
1001 <-> 141, 663, 1626, 1681
1002 <-> 300, 915
1003 <-> 667
1004 <-> 227, 459
1005 <-> 1780
1006 <-> 234, 1578
1007 <-> 203, 406
1008 <-> 617, 833
1009 <-> 786, 1064
1010 <-> 1010, 1031, 1919
1011 <-> 752, 1754
1012 <-> 7, 723, 1068, 1181
1013 <-> 36
1014 <-> 1594
1015 <-> 707
1016 <-> 63
1017 <-> 1511
1018 <-> 374, 1034
1019 <-> 131, 1155
1020 <-> 114
1021 <-> 1288
1022 <-> 645
1023 <-> 959, 1375
1024 <-> 1024
1025 <-> 216
1026 <-> 411, 994
1027 <-> 515
1028 <-> 1417
1029 <-> 304, 724
1030 <-> 343, 351
1031 <-> 768, 1010
1032 <-> 1032
1033 <-> 521
1034 <-> 1018
1035 <-> 235, 1578
1036 <-> 179, 503, 511, 1036
1037 <-> 1037, 1044
1038 <-> 895, 1125
1039 <-> 547, 725, 1599
1040 <-> 395
1041 <-> 816
1042 <-> 559, 1042
1043 <-> 168, 1873
1044 <-> 643, 1037, 1312
1045 <-> 1232
1046 <-> 321
1047 <-> 254
1048 <-> 1747
1049 <-> 364
1050 <-> 1050, 1947, 1963
1051 <-> 1156
1052 <-> 4, 1201
1053 <-> 840
1054 <-> 1133, 1342, 1537, 1708, 1778
1055 <-> 71, 921, 1786
1056 <-> 1672
1057 <-> 778, 1423, 1787
1058 <-> 918, 997
1059 <-> 288, 1337, 1401
1060 <-> 987, 1781
1061 <-> 602, 1660
1062 <-> 316, 1863
1063 <-> 120, 819, 849
1064 <-> 1009
1065 <-> 1065
1066 <-> 842
1067 <-> 774, 910, 1089
1068 <-> 949, 1012
1069 <-> 1900
1070 <-> 556
1071 <-> 1884
1072 <-> 447, 1122
1073 <-> 163, 249, 1073, 1237
1074 <-> 262
1075 <-> 954, 1075, 1789
1076 <-> 1076, 1680
1077 <-> 55, 322
1078 <-> 160, 547
1079 <-> 827, 1079
1080 <-> 377, 425, 1739
1081 <-> 220, 230
1082 <-> 855, 1638
1083 <-> 44
1084 <-> 302, 736
1085 <-> 168, 1431
1086 <-> 1973
1087 <-> 639, 945
1088 <-> 672
1089 <-> 1067, 1190
1090 <-> 408, 1492
1091 <-> 1674
1092 <-> 793
1093 <-> 1802
1094 <-> 536
1095 <-> 1095, 1204
1096 <-> 279
1097 <-> 351, 381
1098 <-> 757, 1519
1099 <-> 1099, 1752
1100 <-> 177, 890
1101 <-> 1145
1102 <-> 1280
1103 <-> 190, 1200
1104 <-> 629
1105 <-> 100, 934
1106 <-> 1426
1107 <-> 78, 1497
1108 <-> 842
1109 <-> 507, 904, 1109
1110 <-> 750
1111 <-> 866
1112 <-> 851
1113 <-> 1113
1114 <-> 866, 1131, 1861
1115 <-> 1187, 1629
1116 <-> 342
1117 <-> 754
1118 <-> 1637
1119 <-> 739
1120 <-> 1837
1121 <-> 1133, 1758
1122 <-> 577, 1072, 1349
1123 <-> 1359
1124 <-> 1174
1125 <-> 1038, 1789
1126 <-> 1260
1127 <-> 1213
1128 <-> 161, 652
1129 <-> 441
1130 <-> 4
1131 <-> 1114
1132 <-> 1132, 1979
1133 <-> 1054, 1121, 1253
1134 <-> 817
1135 <-> 76, 1606
1136 <-> 765, 777, 1860
1137 <-> 434
1138 <-> 865, 1280, 1471, 1736
1139 <-> 74, 907
1140 <-> 108, 378
1141 <-> 178
1142 <-> 655, 717
1143 <-> 446
1144 <-> 221
1145 <-> 476, 705, 1101, 1271, 1956
1146 <-> 474, 1179, 1936
1147 <-> 920, 1147
1148 <-> 1148, 1795
1149 <-> 862, 1799
1150 <-> 559, 684, 1797
1151 <-> 951
1152 <-> 1229
1153 <-> 1515, 1530
1154 <-> 1154
1155 <-> 1019, 1300
1156 <-> 164, 1051, 1156
1157 <-> 18, 1157
1158 <-> 1208
1159 <-> 1651
1160 <-> 567, 1510, 1710
1161 <-> 1161, 1427, 1590
1162 <-> 206, 229, 1561
1163 <-> 1388
1164 <-> 741, 1494
1165 <-> 1217
1166 <-> 123, 276
1167 <-> 1262, 1547
1168 <-> 80, 531, 696
1169 <-> 362, 757, 1504
1170 <-> 1854
1171 <-> 1171, 1898
1172 <-> 832
1173 <-> 1173, 1315
1174 <-> 1124, 1174, 1831
1175 <-> 202, 452
1176 <-> 330, 335, 1761
1177 <-> 917
1178 <-> 155, 567
1179 <-> 224, 1146
1180 <-> 907, 1661
1181 <-> 1012
1182 <-> 176
1183 <-> 690, 722, 788
1184 <-> 645
1185 <-> 487
1186 <-> 1659
1187 <-> 348, 1115, 1670
1188 <-> 275, 803
1189 <-> 1689
1190 <-> 75, 1089
1191 <-> 285
1192 <-> 1744
1193 <-> 477, 515, 841
1194 <-> 1308
1195 <-> 761, 849
1196 <-> 130, 1993
1197 <-> 144
1198 <-> 613, 964, 1329
1199 <-> 1389
1200 <-> 1103
1201 <-> 923, 936, 1052
1202 <-> 875
1203 <-> 490, 902, 1692
1204 <-> 718, 1095, 1245
1205 <-> 263, 333, 877
1206 <-> 1311
1207 <-> 415, 1883
1208 <-> 445, 1158
1209 <-> 550, 1640
1210 <-> 12, 1210, 1428
1211 <-> 460, 1529
1212 <-> 52, 159, 1493, 1819
1213 <-> 1127, 1213
1214 <-> 1214, 1436
1215 <-> 266, 1758
1216 <-> 729, 739
1217 <-> 141, 749, 1165, 1315
1218 <-> 599, 1595
1219 <-> 740, 1549
1220 <-> 588, 1374
1221 <-> 405
1222 <-> 1966
1223 <-> 119
1224 <-> 1528
1225 <-> 1314
1226 <-> 86, 515
1227 <-> 1681
1228 <-> 1228
1229 <-> 0, 1152, 1374
1230 <-> 1453
1231 <-> 223, 488
1232 <-> 1045, 1261
1233 <-> 1759
1234 <-> 360
1235 <-> 283, 955, 1241, 1783
1236 <-> 1356
1237 <-> 600, 885, 931, 1073
1238 <-> 370, 1602
1239 <-> 546, 1373
1240 <-> 994
1241 <-> 1235, 1392
1242 <-> 7, 59, 821, 1945
1243 <-> 1296
1244 <-> 7, 1300, 1434
1245 <-> 1204, 1347
1246 <-> 374, 555, 1508
1247 <-> 109, 936
1248 <-> 785, 1715
1249 <-> 238
1250 <-> 1600, 1623
1251 <-> 1251
1252 <-> 858
1253 <-> 392, 1133
1254 <-> 35, 1394
1255 <-> 575
1256 <-> 214, 1607, 1685
1257 <-> 169
1258 <-> 81, 1264, 1320
1259 <-> 811, 1425
1260 <-> 830, 1126
1261 <-> 571, 1232
1262 <-> 1167, 1862
1263 <-> 540, 991
1264 <-> 1258, 1651
1265 <-> 139, 1569
1266 <-> 708
1267 <-> 1267
1268 <-> 721
1269 <-> 276, 676, 1759
1270 <-> 467, 1270, 1916
1271 <-> 225, 922, 1145, 1700
1272 <-> 99
1273 <-> 1302
1274 <-> 1966
1275 <-> 525
1276 <-> 791, 1834
1277 <-> 450, 1474, 1645
1278 <-> 185, 961
1279 <-> 458, 926
1280 <-> 209, 1102, 1138
1281 <-> 208, 462, 1943
1282 <-> 694, 1522
1283 <-> 111, 119, 1407
1284 <-> 182, 1996
1285 <-> 287
1286 <-> 647, 1286, 1715
1287 <-> 132
1288 <-> 222, 1021, 1398
1289 <-> 724
1290 <-> 208, 260, 317
1291 <-> 1498
1292 <-> 88
1293 <-> 387, 715, 1322, 1519, 1645
1294 <-> 445, 513, 1504
1295 <-> 766
1296 <-> 1243, 1379, 1964
1297 <-> 38, 1669
1298 <-> 1906
1299 <-> 18, 1804
1300 <-> 1155, 1244
1301 <-> 1371, 1453
1302 <-> 991, 1273
1303 <-> 375, 504, 1948
1304 <-> 1667, 1933
1305 <-> 102, 151, 665
1306 <-> 266
1307 <-> 179
1308 <-> 34, 1194
1309 <-> 563
1310 <-> 526, 789
1311 <-> 1206, 1311, 1769
1312 <-> 891, 1044
1313 <-> 169
1314 <-> 151, 1225
1315 <-> 42, 1173, 1217
1316 <-> 1316
1317 <-> 932, 1805
1318 <-> 187, 373, 982
1319 <-> 41, 220, 1948
1320 <-> 1258, 1859
1321 <-> 651
1322 <-> 1293
1323 <-> 957, 1472
1324 <-> 1324
1325 <-> 1325
1326 <-> 803, 1846
1327 <-> 753
1328 <-> 1879
1329 <-> 1198
1330 <-> 553, 1330
1331 <-> 392, 851
1332 <-> 396, 831
1333 <-> 210
1334 <-> 892
1335 <-> 838, 1552, 1568
1336 <-> 1336
1337 <-> 1059
1338 <-> 310, 544
1339 <-> 1897
1340 <-> 945
1341 <-> 489
1342 <-> 137, 1054
1343 <-> 1343
1344 <-> 1946
1345 <-> 1345
1346 <-> 652
1347 <-> 1245, 1914, 1930
1348 <-> 787, 1591
1349 <-> 669, 1122
1350 <-> 304, 1790
1351 <-> 587, 1997
1352 <-> 20, 614
1353 <-> 1738
1354 <-> 413, 1608
1355 <-> 522, 1816, 1917
1356 <-> 1236, 1450
1357 <-> 431, 1575
1358 <-> 500
1359 <-> 1123, 1599
1360 <-> 1370, 1385
1361 <-> 1, 881
1362 <-> 355, 1611, 1952
1363 <-> 69
1364 <-> 954
1365 <-> 1948
1366 <-> 30, 1470
1367 <-> 1527
1368 <-> 724
1369 <-> 277, 1482
1370 <-> 1360
1371 <-> 642, 1301, 1478, 1485
1372 <-> 1372, 1594
1373 <-> 1239
1374 <-> 79, 1220, 1229
1375 <-> 764, 771, 1023
1376 <-> 952
1377 <-> 938, 1520, 1730
1378 <-> 1378, 1411, 1823
1379 <-> 1296, 1832
1380 <-> 1380
1381 <-> 673
1382 <-> 1382
1383 <-> 195, 586
1384 <-> 542
1385 <-> 215, 1360
1386 <-> 1386
1387 <-> 1536
1388 <-> 311, 402, 1163
1389 <-> 251, 1199
1390 <-> 322, 975
1391 <-> 172, 407, 1453
1392 <-> 1241, 1587
1393 <-> 419, 823, 1636
1394 <-> 1254, 1588, 1699
1395 <-> 401, 1621
1396 <-> 1396, 1870
1397 <-> 1629
1398 <-> 840, 1288
1399 <-> 1399, 1932
1400 <-> 721
1401 <-> 1059
1402 <-> 1402
1403 <-> 33
1404 <-> 1449, 1632, 1832
1405 <-> 1634
1406 <-> 1726
1407 <-> 265, 1283, 1999
1408 <-> 39, 336, 426
1409 <-> 75, 147, 654
1410 <-> 691, 1780
1411 <-> 1378
1412 <-> 1447, 1759
1413 <-> 616, 691
1414 <-> 843
1415 <-> 1415
1416 <-> 197, 271
1417 <-> 132, 960, 1028
1418 <-> 1418, 1426
1419 <-> 918, 1560
1420 <-> 789
1421 <-> 629, 715
1422 <-> 391, 640
1423 <-> 781, 1057
1424 <-> 1614
1425 <-> 21, 896, 1259
1426 <-> 1106, 1418
1427 <-> 1161
1428 <-> 1210, 1677
1429 <-> 131
1430 <-> 1822
1431 <-> 907, 1085, 1846
1432 <-> 817, 847
1433 <-> 75
1434 <-> 1244
1435 <-> 484, 808
1436 <-> 1214
1437 <-> 418
1438 <-> 57
1439 <-> 1469, 1824
1440 <-> 237
1441 <-> 1722
1442 <-> 424, 1678
1443 <-> 144
1444 <-> 579, 643, 1869
1445 <-> 914
1446 <-> 1524, 1728
1447 <-> 1412, 1962
1448 <-> 1485
1449 <-> 1404
1450 <-> 1356, 1647
1451 <-> 460, 1907, 1967
1452 <-> 445, 446
1453 <-> 56, 133, 638, 1230, 1301, 1391
1454 <-> 1994
1455 <-> 788
1456 <-> 1914
1457 <-> 769
1458 <-> 1458
1459 <-> 700, 1796
1460 <-> 1799
1461 <-> 15, 436
1462 <-> 1678
1463 <-> 83, 1553, 1684
1464 <-> 35
1465 <-> 1471
1466 <-> 175, 430
1467 <-> 539, 702
1468 <-> 281, 911, 1475
1469 <-> 366, 426, 478, 1439, 1524
1470 <-> 833, 1366
1471 <-> 971, 1138, 1465
1472 <-> 560, 858, 1323, 1937
1473 <-> 506, 875
1474 <-> 1277, 1937
1475 <-> 701, 1468
1476 <-> 464, 522
1477 <-> 1785
1478 <-> 989, 1371
1479 <-> 409, 851
1480 <-> 1677
1481 <-> 463
1482 <-> 517, 1369, 1482
1483 <-> 102, 218
1484 <-> 532, 1531, 1735
1485 <-> 400, 1371, 1448
1486 <-> 453
1487 <-> 867, 870, 1577, 1584
1488 <-> 1488
1489 <-> 16, 327
1490 <-> 418
1491 <-> 7, 1589
1492 <-> 823, 1090
1493 <-> 1212, 1519, 1675
1494 <-> 775, 889, 1164
1495 <-> 882, 911
1496 <-> 386, 1496
1497 <-> 269, 455, 1107
1498 <-> 9, 1291, 1758
1499 <-> 1685, 1893
1500 <-> 1657
1501 <-> 244, 287
1502 <-> 1951
1503 <-> 112
1504 <-> 1169, 1294
1505 <-> 1987
1506 <-> 845, 1905
1507 <-> 1507
1508 <-> 1246
1509 <-> 41
1510 <-> 195, 789, 1160, 1980
1511 <-> 658, 1017
1512 <-> 1990
1513 <-> 968, 1513, 1612
1514 <-> 1514
1515 <-> 1153, 1632
1516 <-> 280
1517 <-> 759
1518 <-> 1837
1519 <-> 80, 82, 1098, 1293, 1493
1520 <-> 1377, 1978
1521 <-> 1521
1522 <-> 1282
1523 <-> 1749, 1876
1524 <-> 660, 1446, 1469, 1535, 1729
1525 <-> 283, 713
1526 <-> 22, 1767
1527 <-> 535, 1367, 1889
1528 <-> 996, 1224
1529 <-> 1211, 1736
1530 <-> 1153
1531 <-> 451, 670, 1484
1532 <-> 46
1533 <-> 62, 143, 530
1534 <-> 117, 1992
1535 <-> 1524
1536 <-> 342, 1387
1537 <-> 1054
1538 <-> 302, 1589
1539 <-> 576, 920
1540 <-> 668, 731
1541 <-> 1639
1542 <-> 1542
1543 <-> 1702
1544 <-> 1927
1545 <-> 995
1546 <-> 92, 1890
1547 <-> 40, 1167
1548 <-> 796
1549 <-> 110, 337, 1219
1550 <-> 46, 667
1551 <-> 497, 850
1552 <-> 526, 1335
1553 <-> 464, 635, 1463
1554 <-> 580, 1696
1555 <-> 1556, 1648, 1867
1556 <-> 180, 1555, 1676
1557 <-> 313, 1831
1558 <-> 249
1559 <-> 501
1560 <-> 1419
1561 <-> 1162
1562 <-> 271, 388
1563 <-> 597, 907
1564 <-> 239
1565 <-> 906, 1854
1566 <-> 465
1567 <-> 393, 619
1568 <-> 1335, 1745
1569 <-> 658, 1265, 1651
1570 <-> 475
1571 <-> 310, 323, 609
1572 <-> 540, 716
1573 <-> 738
1574 <-> 531
1575 <-> 597, 818, 1357
1576 <-> 937
1577 <-> 456, 1487, 1630
1578 <-> 1006, 1035
1579 <-> 1704
1580 <-> 827
1581 <-> 286, 703, 1888
1582 <-> 294
1583 <-> 1907
1584 <-> 1487
1585 <-> 1955
1586 <-> 1586, 1641
1587 <-> 1392
1588 <-> 522, 1394
1589 <-> 1491, 1538, 1589
1590 <-> 1161, 1642, 1946
1591 <-> 4, 617, 1348
1592 <-> 68
1593 <-> 356, 466
1594 <-> 826, 1014, 1372
1595 <-> 1218
1596 <-> 78
1597 <-> 640
1598 <-> 422
1599 <-> 1039, 1359
1600 <-> 1250
1601 <-> 113, 1631
1602 <-> 1238
1603 <-> 1603
1604 <-> 1604
1605 <-> 1980
1606 <-> 1135, 1828
1607 <-> 1256, 1607
1608 <-> 1354
1609 <-> 980, 1864
1610 <-> 1610
1611 <-> 583, 1362
1612 <-> 309, 367, 1513
1613 <-> 270, 1620
1614 <-> 1424, 1688
1615 <-> 1615
1616 <-> 1884
1617 <-> 806, 1763
1618 <-> 955, 994, 1897
1619 <-> 1622
1620 <-> 538, 584, 1613
1621 <-> 1395, 1621
1622 <-> 452, 1619
1623 <-> 188, 1250
1624 <-> 148
1625 <-> 519, 618, 1625, 1765
1626 <-> 213, 1001
1627 <-> 1929
1628 <-> 6, 305
1629 <-> 558, 1115, 1397
1630 <-> 1577
1631 <-> 779, 1601
1632 <-> 1404, 1515
1633 <-> 336
1634 <-> 762, 1405, 1734
1635 <-> 1635
1636 <-> 257, 649, 1393
1637 <-> 167, 329, 1118
1638 <-> 939, 1082
1639 <-> 1541, 1639
1640 <-> 1209
1641 <-> 1586
1642 <-> 567, 1590
1643 <-> 982
1644 <-> 408, 509
1645 <-> 1277, 1293
1646 <-> 1836, 1875
1647 <-> 1450, 1772
1648 <-> 1555, 1946
1649 <-> 1743
1650 <-> 627, 1720
1651 <-> 1159, 1264, 1569
1652 <-> 852, 1930
1653 <-> 1653
1654 <-> 677
1655 <-> 85, 733
1656 <-> 1875
1657 <-> 261, 1500, 1703
1658 <-> 693, 1679
1659 <-> 1186, 1659
1660 <-> 673, 1061
1661 <-> 662, 1180
1662 <-> 483
1663 <-> 1663, 1904
1664 <-> 196, 950, 1664
1665 <-> 144, 854, 941
1666 <-> 1666
1667 <-> 1304, 1890
1668 <-> 488
1669 <-> 1297
1670 <-> 78, 1187
1671 <-> 215, 981
1672 <-> 145, 358, 719, 1056
1673 <-> 1673
1674 <-> 25, 935, 1091
1675 <-> 1493
1676 <-> 190, 1556
1677 <-> 1428, 1480
1678 <-> 1442, 1462, 1987
1679 <-> 577, 1658
1680 <-> 16, 1076
1681 <-> 1001, 1227
1682 <-> 71
1683 <-> 90
1684 <-> 479, 1463, 1852
1685 <-> 1256, 1499
1686 <-> 94
1687 <-> 687, 978, 1787
1688 <-> 332, 1614, 1688
1689 <-> 758, 1189, 1779
1690 <-> 477
1691 <-> 1691, 1986
1692 <-> 166, 585, 813, 913, 1203, 1913
1693 <-> 671
1694 <-> 1711
1695 <-> 89, 1795
1696 <-> 1554
1697 <-> 147, 843, 1900
1698 <-> 212, 444, 1793
1699 <-> 676, 868, 1394, 1705
1700 <-> 87, 1271
1701 <-> 849
1702 <-> 222, 692, 1543
1703 <-> 839, 1657
1704 <-> 314, 498, 1579
1705 <-> 1699
1706 <-> 89, 1993
1707 <-> 1990, 1994
1708 <-> 1054, 1892
1709 <-> 861, 886
1710 <-> 1160
1711 <-> 1694, 1737
1712 <-> 1712
1713 <-> 714, 1935
1714 <-> 600
1715 <-> 217, 1248, 1286
1716 <-> 808
1717 <-> 278, 1914
1718 <-> 580
1719 <-> 669
1720 <-> 1650, 1762, 1856
1721 <-> 422, 1918
1722 <-> 1441, 1722
1723 <-> 893, 1915
1724 <-> 508, 750, 955
1725 <-> 1725
1726 <-> 1406, 1959
1727 <-> 1797
1728 <-> 14, 1446
1729 <-> 1524
1730 <-> 1377, 1737
1731 <-> 104, 749
1732 <-> 129, 1908
1733 <-> 174, 655, 938
1734 <-> 816, 1634, 1734
1735 <-> 538, 1484
1736 <-> 0, 1138, 1529
1737 <-> 1711, 1730
1738 <-> 26, 1353, 1757
1739 <-> 302, 1080
1740 <-> 118, 257
1741 <-> 152, 219, 876
1742 <-> 1841, 1945
1743 <-> 333, 1649
1744 <-> 659, 743, 856, 1192
1745 <-> 1568
1746 <-> 1746
1747 <-> 579, 1048
1748 <-> 283
1749 <-> 189, 350, 1523, 1848, 1894
1750 <-> 881
1751 <-> 344
1752 <-> 1099
1753 <-> 1753
1754 <-> 1011
1755 <-> 1755, 1939
1756 <-> 933
1757 <-> 1738
1758 <-> 1121, 1215, 1498
1759 <-> 1233, 1269, 1412
1760 <-> 198, 679, 840
1761 <-> 1176
1762 <-> 713, 1720
1763 <-> 1617
1764 <-> 613
1765 <-> 1625
1766 <-> 99
1767 <-> 623, 751, 1526
1768 <-> 82
1769 <-> 1311, 1921
1770 <-> 565, 1995
1771 <-> 77, 1771
1772 <-> 805, 1647, 1772
1773 <-> 1773, 1826
1774 <-> 303
1775 <-> 239, 259
1776 <-> 225
1777 <-> 393
1778 <-> 482, 699, 709, 1054
1779 <-> 264, 1689
1780 <-> 61, 194, 707, 1005, 1410, 1999
1781 <-> 165, 1060, 1978
1782 <-> 264
1783 <-> 897, 1235, 1845
1784 <-> 1784
1785 <-> 1477, 1915
1786 <-> 1055
1787 <-> 1057, 1687, 1899
1788 <-> 498, 937, 1859
1789 <-> 1075, 1125
1790 <-> 646, 1350
1791 <-> 617
1792 <-> 1855
1793 <-> 1698
1794 <-> 958
1795 <-> 1148, 1695
1796 <-> 779, 1459, 1857
1797 <-> 1150, 1727
1798 <-> 500
1799 <-> 795, 1149, 1460
1800 <-> 368, 1800
1801 <-> 220
1802 <-> 99, 1093
1803 <-> 1810
1804 <-> 1299
1805 <-> 292, 527, 1317
1806 <-> 443, 1865
1807 <-> 795, 1911
1808 <-> 940
1809 <-> 122, 595
1810 <-> 345, 1803
1811 <-> 1980
1812 <-> 892
1813 <-> 421, 606
1814 <-> 612, 780
1815 <-> 656, 884
1816 <-> 925, 1355
1817 <-> 635, 666
1818 <-> 29, 206
1819 <-> 1212
1820 <-> 1874
1821 <-> 227, 967
1822 <-> 736, 739, 1430
1823 <-> 1378
1824 <-> 68, 1439
1825 <-> 700
1826 <-> 557, 1773
1827 <-> 98, 1971
1828 <-> 1606, 1865
1829 <-> 449
1830 <-> 1830
1831 <-> 20, 878, 1174, 1557
1832 <-> 1379, 1404, 1832
1833 <-> 107
1834 <-> 423, 560, 1276
1835 <-> 867
1836 <-> 118, 1646
1837 <-> 47, 1120, 1518
1838 <-> 243, 990
1839 <-> 1839
1840 <-> 478
1841 <-> 1742
1842 <-> 565
1843 <-> 594, 747, 859
1844 <-> 461
1845 <-> 1783
1846 <-> 1326, 1431
1847 <-> 633, 1888
1848 <-> 1749
1849 <-> 24, 48, 292, 1851
1850 <-> 440, 782
1851 <-> 1849
1852 <-> 1684
1853 <-> 1853
1854 <-> 557, 1170, 1565
1855 <-> 70, 1792
1856 <-> 1720
1857 <-> 1796
1858 <-> 417
1859 <-> 1320, 1788
1860 <-> 36, 879, 1136
1861 <-> 830, 1114
1862 <-> 416, 1262
1863 <-> 28, 769, 787, 1062
1864 <-> 1609, 1920, 1953
1865 <-> 189, 1806, 1828, 1969
1866 <-> 451
1867 <-> 1555
1868 <-> 1868
1869 <-> 1444
1870 <-> 1396
1871 <-> 1939
1872 <-> 1914
1873 <-> 694, 1043
1874 <-> 241, 877, 1820
1875 <-> 1646, 1656
1876 <-> 1523
1877 <-> 1877
1878 <-> 159, 688, 907
1879 <-> 1328, 1879
1880 <-> 415
1881 <-> 65
1882 <-> 201
1883 <-> 812, 1207
1884 <-> 731, 861, 1071, 1616
1885 <-> 753, 1885
1886 <-> 75
1887 <-> 766, 807
1888 <-> 240, 1581, 1847
1889 <-> 800, 1527
1890 <-> 1546, 1667
1891 <-> 186, 548
1892 <-> 1708
1893 <-> 1499
1894 <-> 475, 843, 1749
1895 <-> 622, 1895, 1978
1896 <-> 334
1897 <-> 1339, 1618, 1949
1898 <-> 1171
1899 <-> 1787
1900 <-> 1069, 1697
1901 <-> 142
1902 <-> 291, 305
1903 <-> 745
1904 <-> 1663
1905 <-> 829, 1506
1906 <-> 316, 767, 1298, 1999
1907 <-> 183, 1451, 1583
1908 <-> 908, 1732
1909 <-> 62
1910 <-> 1999
1911 <-> 364, 1807
1912 <-> 372, 1912
1913 <-> 161, 601, 1692
1914 <-> 1347, 1456, 1717, 1872
1915 <-> 760, 1723, 1785
1916 <-> 1270
1917 <-> 1355
1918 <-> 1721
1919 <-> 590, 1010
1920 <-> 414, 1864
1921 <-> 1769
1922 <-> 232
1923 <-> 238, 271, 1923
1924 <-> 571, 917
1925 <-> 556, 1925
1926 <-> 129, 581
1927 <-> 360, 1544
1928 <-> 289
1929 <-> 1627, 1929
1930 <-> 181, 1347, 1652
1931 <-> 469, 1931
1932 <-> 1399
1933 <-> 919, 1304
1934 <-> 290
1935 <-> 803, 892, 903, 1713
1936 <-> 1146
1937 <-> 146, 1472, 1474
1938 <-> 149
1939 <-> 88, 1755, 1871
1940 <-> 980
1941 <-> 548, 828
1942 <-> 613, 988
1943 <-> 1281
1944 <-> 239, 326, 530
1945 <-> 49, 1242, 1742
1946 <-> 1344, 1590, 1648
1947 <-> 1050
1948 <-> 607, 1303, 1319, 1365
1949 <-> 1897
1950 <-> 1950
1951 <-> 553, 921, 1502
1952 <-> 163, 1362
1953 <-> 1864
1954 <-> 495, 620
1955 <-> 735, 1585
1956 <-> 11, 1145
1957 <-> 941
1958 <-> 398, 668
1959 <-> 340, 1726
1960 <-> 934
1961 <-> 641
1962 <-> 1447
1963 <-> 112, 1050
1964 <-> 1296
1965 <-> 61
1966 <-> 890, 1222, 1274
1967 <-> 545, 550, 729, 1451
1968 <-> 873
1969 <-> 704, 1865
1970 <-> 393
1971 <-> 1827
1972 <-> 326, 958
1973 <-> 1086, 1973
1974 <-> 319, 1974
1975 <-> 452
1976 <-> 155
1977 <-> 410
1978 <-> 1520, 1781, 1895
1979 <-> 1132
1980 <-> 1510, 1605, 1811
1981 <-> 184
1982 <-> 39
1983 <-> 1983
1984 <-> 379, 494
1985 <-> 95
1986 <-> 1691
1987 <-> 1505, 1678
1988 <-> 124, 516, 784
1989 <-> 322
1990 <-> 1512, 1707
1991 <-> 226
1992 <-> 894, 1534
1993 <-> 1196, 1706
1994 <-> 16, 1454, 1707
1995 <-> 682, 1770
1996 <-> 1284
1997 <-> 153, 308, 1351
1998 <-> 5, 235, 428, 524
1999 <-> 1407, 1780, 1906, 1910"""
test_input = """0 <-> 2
1 <-> 1
2 <-> 0, 3, 4
3 <-> 2, 4
4 <-> 2, 3, 6
5 <-> 6
6 <-> 4, 5"""
def make_children(input):
children = {}
for row in input.split("\n"):
left, right = row.split(' <-> ')
children[left] = right.split(', ')
return children
children = make_children(test_input)
children
def make_tree(start, children):
finished = False
current = 0
group = [start]
while True:
for child in children[group[current]]:
if child not in group:
group.append(child)
current += 1
if current >= len(group):
break
return group
group = make_tree('0', children)
group
len(group)
children = make_children(input)
group = make_tree('0', children)
len(group)
len(children.keys())
groups = []
for start in children.keys():
groups.append(sorted(make_tree(start, children)))
len(set([",".join(group) for group in groups]))
input = """0: 3
1: 2
2: 4
4: 4
6: 5
8: 8
10: 6
12: 6
14: 6
16: 6
18: 8
20: 8
22: 12
24: 10
26: 9
28: 8
30: 8
32: 12
34: 12
36: 12
38: 12
40: 8
42: 12
44: 14
46: 14
48: 10
50: 12
52: 12
54: 14
56: 14
58: 14
62: 12
64: 14
66: 14
68: 14
70: 12
74: 14
76: 14
78: 14
80: 18
82: 17
84: 30
88: 14"""
test_input = """0: 3
1: 2
4: 4
6: 4"""
def parse_input(input):
layers = {}
for row in input.split("\n"):
layer, rng = row.split(': ')
layers[int(layer)] = int(rng)
max_layer = max(list(layers.keys()))
levels = []
for level in range(max_layer + 1):
if level in layers:
levels.append(layers[level])
else:
levels.append(0)
return levels
levels = parse_input(test_input)
levels
def compute_severity(levels, delay=0, debug=False):
severity = 0
t = 0
while t < len(levels):
rng = levels[t]
if rng > 0:
positions = list(range(rng)) + list(reversed(range(1, rng-1)))
pos = positions[(t + delay) % len(positions)]
if debug:
print(t, rng, pos)
if pos == 0:
severity += t * rng
t += 1
return severity
compute_severity(levels)
levels = parse_input(input)
compute_severity(levels)
Let's set the delay to 10.
def gets_caught(levels, delay=0, debug=False):
t = 0
while t < len(levels):
rng = levels[t]
if rng > 0:
positions = list(range(rng)) + list(reversed(range(1, rng-1)))
pos = positions[(t + delay) % len(positions)]
if debug:
print(t, rng, pos)
if pos == 0:
return True
t += 1
return False
levels = parse_input(test_input)
levels
delay = 10
gets_caught(levels, 10)
from ipywidgets import interact, fixed
interact(gets_caught, levels=fixed(levels), delay=(0, 10), debug=fixed(True))
delay = 0
while gets_caught(levels, delay):
delay += 1
delay
levels = parse_input(input)
delay = 0
while gets_caught(levels, delay):
delay += 1
delay
Restarting this:
from functools import reduce
def to_ASCII(number_list_as_str):
return list(ord(item) for item in number_list_as_str) + [17, 31, 73, 47, 23]
def transform_number_list2(number_list, lengths):
current = 0
skip = 0
for _ in range(64):
for length in lengths:
start, stop = current, current + length
if stop < len(number_list):
number_list[current: current + length] = number_list[current: current + length][::-1]
else:
# selecting
stop1 = len(number_list)
stop2 = stop - stop1
selection = number_list[start:stop1] + number_list[:stop2]
# reversing
reversed_selection = selection[::-1]
# modifying list in-place
number_list[start:stop1] = reversed_selection[:stop1 - start]
number_list[:stop2] = reversed_selection[stop1 - start:]
current = (current + length + skip) % len(number_list)
skip += 1
return number_list
to_hex = lambda sequence: "".join([format(item, '02x') for item in sequence])
def knot_hash(input_str):
sparse_hash = transform_number_list2(list(range(256)), to_ASCII(input_str))
dense_hash = [reduce(lambda x,y: x^y, sparse_hash[16*start:16*start+16]) for start in range(16)]
return to_hex(dense_hash)
knot_hash("AoC 2017")
knot_hash('')
for i in range(8):
key = "flqrgnkx-{}".format(i)
sequence = knot_hash(key)
print(key, sequence)
Now converting to bits.
def to_bits(hex_iterable):
"""Converts list of hex numbers to bits."""
return [bin(int(val, 16))[2:].zfill(4) for val in hex_iterable]
for val in '0123456789abcdef':
print("".join(to_bits(val)))
for i in range(8):
key = "flqrgnkx-{}".format(i)
sequence = knot_hash(key)
bits = "".join(to_bits(sequence))
print(key, bits[:8].replace('1', "#").replace('0', '.'))
sequence
set(sequence)
Let's compute the unit test.
summed = 0
for i in range(128):
key = "flqrgnkx-{}".format(i)
sequence = knot_hash(key)
bits = "".join(to_bits(sequence))
for bit in bits:
summed += int(bit)
summed
Now the real one:
summed = 0
for i in range(128):
key = "jxqlasbh-{}".format(i)
sequence = knot_hash(key)
bits = "".join(to_bits(sequence))
for bit in bits:
summed += int(bit)
summed
Let's build the array and then label it.
import numpy as np
arr = np.empty((128, 128), dtype=np.int)
for i in range(128):
key = "flqrgnkx-{}".format(i)
sequence = knot_hash(key)
bits = "".join(to_bits(sequence))
arr[i, :] = [int(val) for val in bits]
arr
from skimage.morphology import label
label(arr, connectivity=1).max()
arr = np.empty((128, 128), dtype=np.int)
for i in range(128):
key = "jxqlasbh-{}".format(i)
sequence = knot_hash(key)
bits = "".join(to_bits(sequence))
arr[i, :] = [int(val) for val in bits]
label(arr, connectivity=1).max()
def make_generator(start_value, factor):
current = factor * start_value % 2147483647
yield current
while True:
current = factor * current % 2147483647
yield current
Let's see if our computations are correct so far.
genA = make_generator(65, 16807)
genB = make_generator(8921, 48271)
for _ in range(5):
print(next(genA), next(genB))
to_bin = lambda i: format(i, '016b')[-16:]
to_bin(1092455)
genA = make_generator(65, 16807)
genB = make_generator(8921, 48271)
for _ in range(5):
print(to_bin(next(genA)), to_bin(next(genB)), sep='\n')
print()
What's the count after 40 million?
from itertools import islice
n = 40000000
total = 0
genA = make_generator(65, 16807)
genB = make_generator(8921, 48271)
for a, b in zip(islice(genA, n), islice(genB, n)):
if to_bin(a) == to_bin(b):
total += 1
total
Now the real input.
n = 40000000
total = 0
genA = make_generator(289, 16807)
genB = make_generator(629, 48271)
for a, b in zip(islice(genA, n), islice(genB, n)):
if to_bin(a) == to_bin(b):
total += 1
total
def make_picky_generator(start_value, factor, mod):
current = start_value
while True:
current = factor * current % 2147483647
while not current % mod == 0:
current = factor * current % 2147483647
yield current
genA = make_picky_generator(65, 16807, 4)
genB = make_picky_generator(8921, 48271, 8)
for _ in range(5):
print(next(genA), next(genB))
Unit test.
n = 5000000
total = 0
genA = make_picky_generator(65, 16807, 4)
genB = make_picky_generator(8921, 48271, 8)
for a, b in zip(islice(genA, n), islice(genB, n)):
if to_bin(a) == to_bin(b):
total += 1
total
Real test.
n = 5000000
total = 0
genA = make_picky_generator(289, 16807, 4)
genB = make_picky_generator(629, 48271, 8)
for a, b in zip(islice(genA, n), islice(genB, n)):
if to_bin(a) == to_bin(b):
total += 1
total
input = """x12/6,pk/e,s1,x5/7,s6,x15/4,pn/j,x10/3,s3,x4/9,s11,x10/7,s8,x4/15,pa/p,x5/1,pk/f,x15/3,pd/e,x14/12,s15,x6/8,pp/o,x4/7,pg/d,x5/14,s15,x2/7,pc/i,x0/4,pj/e,x1/2,ph/b,x6/7,pe/l,x9/4,pa/f,x11/6,pn/e,s5,x8/12,pb/a,s7,x13/10,pk/f,x12/1,s14,x2/7,s7,pd/a,x8/15,s9,pp/e,s4,x4/3,po/g,x7/5,s6,x13/4,s10,x11/10,s13,x6/8,pj/m,x4/9,s1,x13/6,pc/k,x4/15,pn/f,x13/12,pl/i,x3/2,pg/k,x6/13,s5,x7/0,s10,x9/12,s15,x13/5,pi/l,x14/8,s6,x12/10,s8,x0/14,s4,x8/11,s15,x15/10,s15,pn/e,x9/0,s9,x10/15,pm/c,x9/2,pa/i,x10/13,s4,x14/9,s13,x6/3,s3,x15/14,s4,x4/11,po/l,s14,x5/0,s8,x11/12,pm/h,x1/3,s4,x10/8,s13,x1/0,s15,x9/7,pd/a,x11/10,pe/l,s6,x2/0,s2,x11/3,s2,x1/2,s4,x14/6,pn/d,x11/9,s6,x0/5,pb/c,x4/12,s10,x15/2,pd/g,x11/9,pj/p,s3,x4/8,pd/a,x0/1,s10,x3/4,pe/g,x10/9,pc/a,x5/13,s13,x14/2,s12,x15/12,s11,x4/11,pj/n,s10,x0/8,s2,x5/2,s10,x0/15,s11,pk/c,x6/1,s8,x11/0,s14,x3/2,s7,x4/10,s8,x1/13,pa/h,s5,x4/5,s3,x10/8,s13,x4/11,s6,x0/3,s5,x13/12,pd/o,x3/1,pp/f,x11/13,s5,x10/6,s4,x1/3,pn/l,x7/4,s15,x9/12,pa/j,x5/3,s1,x15/9,s6,x4/7,pn/k,x15/5,s14,x2/10,s4,x9/5,s3,x2/10,s15,pi/p,x3/11,s2,x10/1,pg/m,x12/2,s13,x8/9,pi/b,x14/10,s1,x9/6,pe/k,x7/4,s10,x15/2,s2,pf/a,x13/14,s11,x15/10,pi/h,x6/2,pa/e,x14/5,s3,x2/7,pj/l,x14/6,pp/h,x13/15,pg/b,s4,pd/e,x8/3,po/k,x15/6,pj/b,x5/3,pk/e,x12/15,s10,x14/1,s9,x0/7,s1,x6/4,s2,pn/g,x8/0,s9,x3/10,s3,x7/2,pl/f,x8/6,pj/p,x4/12,pe/h,s13,x3/13,pk/i,x9/1,s12,x11/5,s11,x1/7,pj/f,x4/2,pi/m,x9/3,s4,x5/8,pd/a,x2/1,pc/f,x9/8,s3,x1/2,pn/o,x0/15,s5,x11/6,pj/l,x4/0,s4,x9/12,s13,x11/13,po/n,x14/6,pa/h,x5/13,s12,pp/j,x15/10,s13,x3/1,s11,x0/6,pi/f,s1,x8/1,pe/c,x7/12,s1,x5/3,s3,x10/0,pb/k,s14,x3/4,s2,x9/15,s12,x3/14,s14,x0/1,s10,x14/9,s6,x12/0,s9,x13/10,ph/c,x11/12,s6,x5/4,s9,pg/k,s11,x1/9,pa/i,x6/3,s14,x4/15,s11,x10/12,s3,x7/5,pn/e,x13/0,pk/h,s6,x2/7,s11,x10/0,pl/d,x3/14,s14,x9/10,s9,x5/0,ph/a,x8/7,s15,x5/13,s5,x8/0,pk/g,x12/13,s5,x15/0,s5,x6/11,s9,x2/5,ph/i,x6/15,s2,x9/7,pa/l,x3/10,s6,x0/8,pn/i,s7,x10/4,s9,x15/13,s11,x3/8,s7,x12/7,s8,x13/5,pg/b,x15/10,s14,pi/n,x1/14,pa/g,x15/0,s7,x14/1,s14,x13/0,pm/n,x9/1,pi/f,x0/6,pe/b,x3/2,pj/a,x10/13,s13,x9/5,pg/m,x11/13,s6,x6/15,s10,po/d,s14,x8/7,s6,x11/3,ph/c,x10/6,s13,x9/14,s4,x7/1,pm/k,x11/13,pl/a,x2/8,ph/f,x7/15,s11,x12/14,s1,x1/5,s14,x10/7,s6,x5/6,pk/l,x1/7,pp/b,s4,x12/3,pc/l,x4/5,pn/g,x1/11,s4,x14/3,s15,x12/13,pi/d,x0/10,s9,x12/5,s2,x9/7,s14,x14/3,s8,x1/15,s15,pb/n,x10/13,pa/j,x3/4,s7,x12/1,s4,x9/11,pm/d,x0/7,s15,x13/1,pe/c,x5/7,s14,x0/12,s14,x5/7,s5,x12/1,pm/h,s3,pl/p,x6/3,pc/f,x15/11,pe/l,x5/12,s13,x13/7,s3,x9/1,s11,x4/5,s6,x11/12,pm/c,x13/1,pn/j,x5/11,pc/i,x15/14,s10,x2/0,ph/m,x15/1,pe/b,x7/8,s4,x14/4,ph/f,x10/11,pp/j,x1/9,pn/a,x0/4,s4,x11/12,s9,pb/d,x8/4,s2,x11/5,s6,x14/0,pk/a,s2,x1/6,pn/i,x9/13,s11,x7/5,pa/k,x0/8,s15,x7/2,s13,x8/10,s14,x9/15,pn/f,x4/6,s3,x13/3,pe/g,x1/4,s13,x10/13,pj/i,x5/6,s10,x0/12,pc/f,x5/1,s7,x7/4,s1,x5/3,s1,x8/1,s2,x12/14,pe/i,x2/13,s1,x1/14,po/f,x6/10,s15,x5/3,pn/j,x9/6,ph/b,x2/14,s7,x8/9,s10,x10/4,pk/g,x11/14,pf/l,x10/13,s13,x6/7,s6,x3/4,pj/h,s7,x1/15,pf/d,x13/3,pn/c,x1/12,s8,x13/2,s10,x9/11,s1,x5/14,s4,x15/11,pl/e,x13/3,s8,x0/6,po/a,x14/7,pe/j,x10/3,pi/k,x8/9,s12,x14/6,s7,x12/9,s15,x7/4,s11,x2/3,pb/a,x8/14,s14,x12/0,s1,x13/1,s7,x3/2,s5,x7/10,pd/f,x8/6,pa/n,x10/9,s5,x5/1,s12,x14/6,s14,x8/9,ph/e,x10/7,s12,x5/9,s10,x8/2,s4,x0/14,s6,pj/n,x9/10,pd/l,s3,x8/2,s13,x0/9,s10,x1/15,pa/n,x12/6,s10,x14/11,pe/g,x8/13,s15,x14/10,s6,x9/12,s8,x5/2,pn/o,s3,x3/15,s4,pg/d,x1/11,pk/i,x14/9,s10,x6/13,s5,x15/2,pp/f,s14,x0/3,s1,x7/1,s10,x3/12,ph/j,x4/10,s15,x2/7,pm/n,x0/1,s4,pp/a,x8/13,s15,x4/3,ph/d,x9/2,pe/f,x4/12,pl/c,x11/10,s8,x8/9,s9,x2/7,s8,x10/9,pd/a,x5/3,pg/j,s4,x15/8,s8,x12/3,s2,x15/14,s12,x6/1,s4,x4/14,pd/h,x13/3,pc/j,x11/9,pf/g,x0/6,s15,x1/7,pe/l,x3/12,pm/k,x14/15,s4,x6/12,s11,pn/p,x7/14,s14,x10/3,pj/a,x4/5,pm/k,s6,x9/6,s9,x11/2,s2,x10/13,s9,x4/14,s2,x5/2,s3,x8/15,s15,x3/5,s5,x10/14,s5,x2/3,pf/p,x11/6,s3,pb/d,x10/9,pn/m,x12/13,s3,po/k,x14/6,pf/n,x2/11,pj/d,x3/13,pp/g,s14,x14/0,s2,x4/7,s8,x2/14,pf/a,x3/12,s4,x5/13,pp/k,x7/6,s6,x12/5,s12,x2/0,pi/o,x6/8,s2,x5/14,s3,x15/10,s13,x3/0,s1,x15/8,s8,pm/l,x5/0,pa/c,s8,po/h,x2/15,pp/e,x4/11,s5,x3/10,s6,x1/9,ph/k,x6/2,s9,x13/11,pl/f,x3/8,s6,x6/0,s4,x13/2,pk/h,x9/5,pp/d,x1/10,pf/c,x3/14,pi/m,x13/9,ph/a,x10/11,s12,x13/6,s1,x14/10,s13,x12/9,pi/g,x4/11,pc/k,s13,x9/14,s15,x3/11,s5,x14/6,pa/f,x1/2,s14,x14/5,s8,x8/6,pd/l,x4/11,s7,x1/15,s3,x14/4,pj/g,x9/5,pd/a,x13/0,s5,po/g,x6/1,pn/p,x13/14,s10,x3/11,pc/f,x8/10,pg/h,x6/12,pf/i,x0/3,po/n,x8/7,s3,x14/11,pe/l,x6/0,pb/j,x11/13,pl/h,s12,x7/6,s13,x5/2,s3,x7/0,s3,x10/11,s4,x1/9,s11,x0/10,s7,x7/6,s9,x5/12,s14,x2/11,s8,x4/15,pi/m,x6/3,pj/l,x13/14,s12,x7/10,pb/d,x15/2,s14,x9/8,s12,x10/15,pe/g,x6/14,pa/c,x10/2,pd/g,x0/6,s1,x9/3,s2,x5/13,s1,x10/15,pc/j,x0/6,s8,x3/9,s11,x8/14,pe/a,x15/7,s14,pc/l,x6/5,pa/i,x2/15,pe/d,x6/1,s4,pc/h,x13/3,pg/d,s13,x5/2,s10,x15/12,pe/c,x8/4,s14,x5/6,s14,ph/p,x10/15,s1,x7/9,pk/o,x3/0,pm/j,x8/10,s7,x14/15,pa/n,x12/5,s4,x11/3,s8,x14/7,s5,ph/b,x2/11,pc/a,x4/14,po/b,x2/13,s2,x3/4,pj/f,s5,x13/7,po/d,x10/1,pe/c,x13/7,pl/m,x14/4,s5,x7/8,pk/g,x2/14,s15,x5/13,s11,po/j,s15,x4/1,pb/g,x15/5,s7,x2/13,s14,pl/i,s11,pc/j,x10/15,s2,x13/4,pi/l,x11/15,s4,x3/14,s9,x11/2,s9,x6/12,s15,x11/14,pe/m,x1/9,s15,x6/7,pl/a,x14/2,s4,x1/13,pk/f,x0/14,s6,pp/n,x7/1,s12,x0/6,s2,x3/10,s5,x11/8,s13,x14/1,s7,x3/6,s6,x14/11,pe/d,s12,pf/b,x3/13,s6,x14/4,pk/g,x10/8,pb/i,x14/6,ph/k,x15/8,s2,x1/7,pb/l,x9/5,s8,x10/13,s8,x11/14,s6,x12/4,s14,x3/14,pp/e,x15/12,s1,x11/7,pk/a,x15/0,s10,x1/8,pb/c,x10/5,s2,x11/1,pl/e,x5/6,pa/o,x12/3,pf/n,s7,x10/14,s15,x9/2,s5,po/j,x10/14,s2,pc/k,x9/11,s10,pp/a,x14/2,pi/e,x3/6,s5,x13/11,s1,x6/3,s15,x8/12,pc/g,x10/11,s14,x7/1,s14,x5/3,s4,x15/14,po/h,x0/7,s11,pd/j,x13/6,s1,x12/9,s12,x4/10,s14,x6/8,s3,x14/10,pe/m,x2/13,pb/f,s15,x6/8,ph/p,x10/15,s4,x8/5,s11,x7/2,s6,x0/9,s7,x2/7,pc/o,x1/13,s3,x12/6,pj/a,x14/8,s10,x10/1,s3,x2/14,s10,x11/9,s1,x10/15,s14,x0/2,pd/l,s13,pj/o,x1/8,pb/d,s8,x2/6,s14,x14/13,po/g,s8,x8/2,s12,x3/15,s8,x14/8,pc/i,x2/4,pm/n,s15,x0/13,pl/i,x3/14,s9,x13/5,s7,pk/h,x9/4,s8,x8/14,s1,x7/9,pn/b,x6/2,pl/h,x10/13,s14,x5/15,s15,x14/2,pd/c,x7/15,s13,x5/13,s8,x1/12,s2,x2/5,pe/o,x12/6,s1,x13/5,s10,x10/11,pn/a,x4/12,s13,x3/5,s6,x2/10,s12,x14/12,pe/h,s9,x8/13,s15,x11/7,s8,x14/1,s11,x9/12,pk/c,x2/10,pe/d,s6,x13/12,s2,x4/2,s14,x0/8,pg/m,x14/5,s11,x15/3,s15,x11/6,s4,x7/13,s14,x15/10,s1,x0/7,s10,x4/12,s7,x13/2,s4,x4/0,pb/a,x6/10,s10,x7/8,s5,pp/c,x13/10,s9,x11/9,s4,x8/6,pd/n,x10/1,s11,x7/5,pg/m,x13/9,s6,pa/f,x0/12,s3,x2/1,pp/l,x12/7,s2,x1/13,pe/c,x5/10,pk/m,x8/3,po/i,s7,x6/14,pb/d,x11/3,po/m,x2/15,ph/c,x5/10,s12,x6/4,s15,x5/7,s5,x0/10,pa/i,x6/7,s12,x15/0,s5,x7/9,s12,pb/p,x0/8,s2,x12/7,pa/c,x5/9,pm/p,x3/8,s12,x1/5,pn/l,x13/4,ph/o,x6/1,s5,x7/11,s1,pm/f,s15,x6/3,pi/c,x14/13,s3,x10/5,pa/b,x7/6,po/j,x11/5,pe/k,x15/1,pd/b,x9/10,pn/h,x3/12,s1,x6/4,s5,x14/11,s3,x0/5,s5,x12/10,s9,x1/6,s13,x14/15,s13,x4/13,pp/m,x7/10,pi/o,x6/2,s12,x9/14,pb/l,x10/5,s4,x9/2,s11,x11/8,pc/d,x4/12,pl/j,x2/3,s4,x1/4,s4,x8/14,po/b,x9/11,s10,x6/12,s1,x13/14,pk/f,x10/7,ph/b,x6/9,pj/c,x12/0,pf/l,s12,x1/7,s4,pg/k,x5/15,s6,x11/2,s4,x13/12,pi/j,x14/4,s11,x13/7,s14,x3/8,s8,x0/2,s1,x10/3,s14,pg/k,x0/5,s12,x12/8,s7,x0/13,po/i,x6/12,s3,x11/8,s15,x7/2,s15,x8/5,s13,x14/0,s15,x11/9,s10,pe/k,x0/1,pm/n,s8,x9/13,s7,x6/4,s3,x3/1,s2,x4/13,s2,x9/14,s11,x2/0,pg/h,x11/9,s13,x0/7,s11,x11/3,pc/p,x10/14,s9,x9/3,ph/g,x14/5,pl/j,x2/8,s11,x5/12,pe/k,x7/2,s3,x10/13,s13,x5/6,pg/a,x10/14,pf/i,x6/7,s10,x5/8,pp/a,x11/3,s11,x7/2,s15,x8/4,ph/n,x9/13,pl/j,x4/5,pa/b,s11,x11/1,s9,x14/6,pk/h,x11/10,s6,pb/l,x14/0,s3,x11/1,s12,x12/7,s14,x3/13,s5,x14/12,s2,x5/6,s1,x3/14,s11,x9/11,pk/m,x0/15,pb/e,x10/12,ph/f,x9/2,s4,pj/a,x4/6,pd/o,x14/10,pe/n,x7/5,s5,x2/1,s3,pg/o,x6/3,s2,x9/13,pk/p,x11/10,s12,x0/13,s3,x11/2,s13,pd/o,x7/8,s1,x14/10,s3,x0/2,s11,x8/13,ph/a,x5/14,s2,x2/4,pk/m,x15/8,s9,x10/6,s14,x9/0,pe/l,s3,x7/3,pc/f,x10/15,pg/p,x5/8,s9,x13/15,pa/f,x7/10,pj/d,x8/4,pc/k,x1/14,s1,x11/2,pd/i,x0/14,s15,x15/5,s14,pa/e,x1/10,s3,x12/0,po/h,x8/6,s7,x9/7,s2,pn/f,x14/12,pd/p,x9/7,s9,x0/14,pa/k,x5/13,s5,x11/2,s14,x12/5,s1,x14/11,pi/e,x0/7,s7,x15/11,pb/g,x13/6,s1,x11/7,s8,x8/3,s4,x11/15,pp/h,x7/14,pj/d,x8/3,s10,x0/15,s5,x7/2,pc/f,x13/3,s11,x2/12,ph/g,x5/9,s2,x12/0,pi/n,x14/10,s12,x0/6,s11,x1/4,s7,x3/13,s4,x11/0,pe/g,x6/3,pf/i,x9/13,pd/o,s12,x4/5,pg/b,x15/2,pe/i,x14/5,pc/o,x6/10,s7,x2/14,s7,x13/1,pi/g,x2/11,pk/m,s1,x1/9,pe/l,x6/4,po/n,x12/0,s2,x11/5,s12,x8/12,s10,x5/1,s2,x8/10,s14,pk/l,s1,pd/c,x7/11,pg/a,x10/13,s6,x6/2,s6,x12/10,s8,x5/2,pn/i,x12/3,pa/l,s2,x9/11,s8,x2/1,s15,x11/14,pc/g,x2/9,s11,x15/10,pn/a,x9/8,s13,pp/e,x13/14,s14,x9/1,pi/j,s2,x4/15,s13,x10/14,ph/n,x5/8,pe/l,s15,x3/4,pn/p,x0/1,s8,x15/3,s7,x14/5,pj/b,x15/9,s4,x2/13,pe/n,x3/10,s10,x15/5,pa/l,x11/9,po/k,x10/8,s4,x11/3,s15,x8/14,s12,x10/9,s11,x3/12,pm/c,x15/7,po/h,x8/9,s4,x1/2,s3,x6/10,pb/c,x3/12,pj/o,x13/9,s10,x2/3,s4,x9/1,pa/m,x12/8,pg/d,x11/2,pf/e,x5/3,s15,x7/8,s15,x4/12,s9,x11/7,pj/h,x6/0,pi/g,x3/10,s13,x15/13,s12,x7/6,s1,x2/12,s4,x4/0,s10,x12/8,po/p,x15/0,s10,pj/l,x13/1,s6,x6/7,pf/p,s5,x15/1,pi/o,x2/12,s5,x9/8,s5,x6/3,pg/h,x14/15,s12,x0/10,pa/e,s15,x5/15,pc/f,x8/4,s12,x2/3,s12,x5/12,pk/g,x10/14,pb/e,x3/2,pi/p,x13/14,s10,x4/5,pk/n,x10/0,s7,x7/3,pd/i,x4/9,s14,x5/3,s15,x13/1,s5,ph/o,x11/3,s4,pf/d,x15/10,s10,x1/12,ph/p,x11/10,s5,x7/0,pc/e,x12/2,pd/g,s10,pp/e,x11/1,s1,x12/3,pi/m,x10/0,s4,ph/o,x13/2,s12,x9/11,s5,x4/6,pn/b,x5/11,s15,x12/2,s5,pk/f,x1/14,pl/g,x4/6,s14,x8/9,pp/a,x14/2,s12,x7/0,s2,x14/3,s12,x8/13,s12,x12/7,pk/c,x13/4,pa/m,x9/8,s7,x10/11,s1,x2/9,pi/j,x0/4,s1,x9/5,s11,x11/8,s12,x12/7,po/m,x11/15,pn/p,x5/4,s10,x3/14,s10,x6/12,s1,x5/9,pg/i,x15/8,pc/k,x9/11,s4,x6/8,pn/g,x14/7,s5,x6/9,pk/b,x5/10,s11,x3/7,s8,x14/13,s11,x15/0,pp/n,s3,x1/7,pl/j,s10,x10/0,pc/h,s14,x1/15,s15,pm/d,x12/14,pc/e,x1/5,s15,x7/4,s11,x14/8,ph/n,x2/10,s15,pk/p,x8/15,pn/g,x14/6,s5,x2/5,pj/e,x12/0,s5,x6/14,s6,x10/8,s13,x9/12,s14,x6/15,s6,x3/0,pd/o,s14,x2/10,pa/k,x4/0,s14,x8/11,s7,x5/15,s12,pi/l,x6/0,s11,x1/10,pk/e,x12/9,s14,x15/3,pi/j,s12,x6/14,s15,x15/1,s3,x9/14,s6,x10/4,s9,x2/6,pb/h,x8/15,s3,x13/10,pj/k,x11/3,s5,x5/1,s13,x10/0,s13,x4/5,pe/m,s13,x7/15,po/h,x2/13,s4,x5/3,s11,x11/4,s11,x10/12,s13,x14/0,pl/k,x12/11,s14,ph/e,x1/14,s7,x6/7,s6,pf/d,x8/11,s6,x0/14,pg/e,s9,x2/11,s15,x3/5,pf/b,s6,x7/8,s2,x12/14,s13,x7/3,pj/c,x6/11,s6,x4/12,pe/p,x8/6,pd/g,x7/5,s9,x14/13,s7,x6/9,s3,x14/3,pp/l,s14,x5/13,pe/b,x7/8,s2,x11/5,pm/p,x13/2,s10,x0/6,s14,x9/10,pf/k,x1/2,s9,x0/6,s5,x2/7,s8,x12/13,s9,x4/1,s14,x8/10,s1,x12/13,s13,x3/2,s11,pl/i,s13,x0/5,pd/h,x14/12,s11,x0/13,s13,x2/4,s15,x12/0,s8,x11/13,pe/o,x2/12,s13,x3/8,s8,x12/6,pn/m,x13/9,s8,x4/10,pf/k,x6/0,pj/l,x9/10,s3,x11/7,pn/a,x3/6,pb/i,s7,x2/14,s9,x11/6,s7,x10/0,pa/e,x7/13,s4,x14/10,s8,x0/5,po/j,x4/10,pl/m,x3/0,pa/k,x14/1,s6,x8/3,pf/i,x14/4,pa/j,x12/11,s11,x15/4,s3,x9/2,s5,x1/5,s2,x4/10,s10,x12/7,s3,pb/h,x3/6,pj/e,x8/10,s13,x12/6,s8,po/i,x5/2,s10,x7/14,s2,x12/15,s12,x5/0,s4,x1/12,s13,x7/6,pj/m,x5/4,s13,x12/2,s2,x1/15,s11,x10/8,s15,x7/6,pg/l,x2/1,s10,x4/0,s7,x14/15,s8,x8/10,s2,x3/11,s6,x10/12,s15,x4/6,pk/f,x15/7,s9,x5/4,s1,pj/a,x13/0,s2,x10/1,s1,x14/7,ph/d,x12/9,pg/j,x10/5,s15,x11/14,pc/o,x4/1,s13,x10/12,s6,x7/5,s6,x2/12,s8,x8/6,pf/a,x4/2,s11,x11/15,po/j,x5/6,s7,x1/11,pk/i,x12/2,pc/n,x9/13,pf/b,x14/7,s11,x15/10,s9,x9/8,s10,x5/2,s6,pm/e,x10/15,s1,x5/11,s6,x8/15,s6,x2/1,s11,x4/8,ph/a,x3/15,pk/b,s12,x11/4,s8,x12/7,pp/l,x1/2,s8,x0/9,s4,x15/10,s13,x5/14,s1,x12/2,pg/o,x10/13,ph/m,x2/9,s1,x8/15,s2,x14/7,s2,x13/10,pb/p,x9/2,s8,ph/o,x0/10,pm/g,x3/5,po/l,s13,x12/9,pi/j,x4/0,s4,x8/15,pn/e,x0/12,s6,x13/7,s1,x3/5,s2,pm/o,s15,x13/14,pf/n,s5,x10/8,s13,x9/1,po/e,x0/7,s15,x14/9,s13,x8/15,s4,x9/1,pd/c,x5/11,s7,x0/8,pf/k,x10/9,s2,pg/d,x0/11,s4,x1/3,pb/o,x6/13,s11,x10/7,s14,x9/8,pg/e,x5/11,s3,x14/8,pm/p,x7/4,pl/h,s1,x14/0,s8,x11/13,s5,x2/9,pd/e,x11/14,pb/m,x3/7,pl/f,x9/13,s5,x8/5,pn/p,x1/12,pk/e,x5/10,pl/o,x1/13,s9,x7/4,s5,x10/9,pb/c,x7/15,po/l,x11/13,s7,pa/i,s8,x7/15,ph/k,s15,x1/13,pm/j,x9/8,s1,x7/3,s8,x1/5,s1,x10/3,pn/k,x12/13,s15,x0/9,pa/c,x10/11,s11,x5/7,s15,pi/k,x6/4,s5,x3/15,s5,x8/0,s9,x13/11,s13,x2/4,s1,x0/6,s12,x2/1,ph/f,x9/6,po/m,x5/1,pc/d,x6/12,s12,x3/11,pg/e,x5/9,s7,x11/4,pd/c,x15/2,pe/b,x7/5,s2,x8/12,ph/j,x9/1,s10,x12/4,pc/f,x15/5,s13,x3/9,pk/j,x6/12,s9,x11/15,s6,x1/14,ph/d,x0/13,s8,x15/4,pc/n,x13/0,s13,x6/10,s8,x15/9,s6,x12/7,s11,pj/k,x6/11,s3,pm/e,s3,pa/i,s7,x14/15,pf/n,x7/0,ph/o,x4/3,pd/n,x5/10,s4,x4/3,s1,x8/6,s14,x12/10,ph/k,x1/13,pb/p,x0/11,s5,x6/10,ph/e,x0/8,s5,x5/15,s13,x10/2,s6,x6/7,pk/m,s6,x5/10,s8,x12/1,s1,x6/2,s1,x12/7,s8,x10/15,pp/o,x4/6,s12,pi/c,x7/15,pb/o,s5,x2/4,s9,x6/9,pd/h,s4,x1/7,pe/g,x10/11,s11,x15/7,pk/o,x8/9,s4,x2/10,s3,x7/8,pa/m,x1/14,pb/h,x5/3,pl/d,x6/15,s5,x7/4,s3,x8/13,s5,pi/h,x7/4,s5,x1/15,pg/a,x9/0,s1,x12/2,pl/h,s5,x0/15,pm/b,x10/4,s4,x7/8,s11,x0/9,pi/h,x14/5,s10,x13/2,s3,x12/5,pc/k,x15/14,pp/j,x12/6,s15,x5/2,s15,x1/15,pe/f,x2/11,s13,x7/0,pi/b,x11/5,pf/p,x2/8,pd/g,s2,x3/12,pj/c,x1/11,s9,po/m,x6/12,pf/p,x14/0,pj/b,x8/15,s7,x1/2,pf/i,x10/5,pe/p,x14/7,s7,x9/12,s3,x6/0,pl/d,x8/3,pa/p,x7/2,s4,x8/15,pm/o,s6,x7/6,s8,x9/13,pc/n,x15/8,pf/k,x2/11,pn/b,s5,x9/15,pe/k,x13/2,s11,x6/8,s4,x14/4,s3,x11/6,s1,x8/15,s14,pp/i,x0/12,s13,x11/6,ph/a,x15/5,s15,x11/2,s3,x4/13,s1,x15/9,pb/c,x14/8,s12,x1/11,pm/d,x3/12,pb/c,x4/7,pa/k,s7,x6/14,s3,x7/1,pf/l,x2/8,s4,x3/0,pk/c,x11/4,s8,x1/13,s6,x0/7,s3,x15/10,s3,x12/7,s13,x2/8,ph/o,x4/6,s7,x8/12,s6,x15/14,pe/b,s8,x1/6,s14,x4/5,s15,x11/2,s8,x5/1,s15,x6/7,s4,x12/9,s1,x13/8,s8,x5/11,pk/p,x2/15,s10,x13/6,s6,x11/5,s10,x2/13,s12,x5/0,pf/h,x11/15,s1,x3/12,s2,x11/8,s14,x12/7,pb/k,x13/9,s6,x14/0,s14,x12/2,s14,x14/1,s3,x7/2,po/e,x5/0,pm/g,x12/10,s1,x9/15,s2,x8/5,po/c,s12,x12/6,s5,x11/10,s10,x4/9,s2,x11/7,s9,x2/1,pm/i,x7/10,pd/l,x4/15,pb/i,x10/7,pc/o,x11/14,s6,x10/0,pi/n,x9/6,pa/k,x8/1,s5,x3/4,pi/e,x6/13,pl/p,x9/0,s6,pc/h,x14/11,s3,x0/1,s13,x15/13,po/m,x11/7,pc/e,x10/2,po/h,x14/4,s8,x0/1,pd/a,s1,x5/15,s11,x3/14,s12,x0/8,s10,x6/11,s9,x13/7,s5,x15/14,pe/n,x2/12,s8,pi/d,x5/10,s10,x9/0,pj/b,x4/15,ph/l,x10/2,s8,x9/6,pp/g,x12/10,s4,pd/k,s7,x6/11,s8,x8/13,s8,x15/7,s2,x0/14,pl/a,x7/3,s9,x4/5,s9,x11/1,s11,x2/14,pp/h,x13/0,s4,x1/7,pg/f,x15/10,s5,x9/6,s7,x13/10,s7,x2/5,s4,x1/0,s13,x4/5,s2,x15/6,s4,x0/12,s15,x2/4,pn/o,x13/7,s9,x4/12,s11,x14/9,pi/b,s13,pm/c,x0/6,s11,x2/3,s3,x11/10,pg/j,s10,x5/12,s6,x9/2,pc/p,x5/1,s2,x2/11,pe/d,x0/12,s7,x3/6,s2,x0/5,pc/b,x3/12,pp/d,s11,x1/7,s14,x2/5,pk/h,x1/7,pg/o,x4/2,s11,pm/l,x10/15,s11,x14/7,s13,pg/k,x8/1,s10,x2/12,ph/a,x10/8,s8,x4/9,s3,x10/13,s8,x11/4,pf/o,x8/13,pa/h,x5/14,pl/i,x0/7,pf/m,x6/13,pb/p,x5/12,s4,x4/15,s4,x10/11,po/i,x5/1,pj/e,x10/9,s14,x6/1,pp/n,x13/0,pf/g,x6/8,s2,x9/2,s14,x7/3,s12,x6/15,s3,x1/5,s4,x15/3,s7,x10/7,s13,x4/2,pc/e,x14/12,pi/d,x15/0,s9,pf/p,x9/4,pi/j,x10/1,s14,x2/5,pd/e,x10/8,s4,x11/13,pp/k,x15/4,s5,x9/14,pj/g,x13/7,pk/n,s9,x8/14,s11,x10/11,s5,x7/12,s15,x9/8,s14,x2/12,s4,x14/1,s6,x10/6,pa/g,s8,pi/f,x13/3,s9,x12/6,s14,x7/15,pj/h,s9,x6/0,pn/l,x13/7,pk/o,x1/0,s13,x9/8,s3,x14/10,pl/g,x3/2,s4,x9/15,s1,x4/10,po/k,s15,x14/13,pg/l,x8/6,pb/n,x11/9,pe/d,x13/7,ph/l,x8/2,s2,x15/11,s8,x1/12,s11,x2/8,s7,x12/5,pd/a,x10/8,pi/n,s12,x7/2,s4,x11/5,s13,x10/4,ph/g,x9/7,s5,pm/b,x1/8,s8,x11/12,s5,x0/8,po/g,x11/9,pc/a,s8,x4/7,pd/g,x2/14,s4,x10/9,s1,x5/4,pa/p,x3/9,po/d,x10/15,s10,x7/11,s13,x1/5,pe/f,x10/3,s2,x14/8,pj/p,x2/15,s10,x6/5,s7,x9/11,po/g,x1/8,s6,x6/2,s12,x4/7,ph/a,x9/2,s1,x11/0,s4,x5/15,pf/d,x2/10,s2,x1/5,pe/a,s7,x3/6,s12,x7/8,ph/f,x12/6,s13,x10/1,s1,x14/5,pk/b,x13/15,pa/g,x9/7,s9,x6/8,s13,x12/10,s12,x3/15,s9,x0/10,pf/c,x15/9,s13,pj/l,x0/1,s15,x12/10,s5,x0/11,s12,pg/b,x14/5,pe/l,x4/9,pd/m,s11,x11/15,s15,x13/3,s12,x10/14,s9,x0/11,pc/o,x7/10,s7,x2/13,pf/m,x4/1,pa/l,x2/11,pi/k,x0/7,s13,x14/8,pm/j,x2/4,s9,x9/13,s13,pi/k,x10/15,s7,x6/11,s3,x13/3,pp/m,x2/4,s13,x14/10,pf/b,x7/0,s5,x3/2,s9,x1/5,pm/o,x14/4,s4,x15/0,s12,x12/13,s8,x6/14,pl/i,x8/11,s4,x6/4,s12,x8/1,s1,x14/0,s14,x8/9,s9,po/c,s8,x12/2,s11,x0/10,s7,x11/9,pl/e,x15/14,s12,x6/2,s12,x12/4,s3,x10/9,po/p,x11/6,pf/e,x15/0,s14,x6/2,pl/n,x7/9,s8,x13/3,ph/f,x8/9,s14,x1/14,pd/e,x0/10,s12,x3/11,pn/f,x2/10,po/m,x4/0,s11,x14/11,pj/b,s8,x13/10,s3,x15/5,s5,x12/9,s5,x3/2,s13,x9/12,pa/i,x13/6,ph/e,x3/7,s2,pc/o,x11/6,pg/l,x15/8,s14,x6/5,s5,x0/10,s5,x9/15,pf/p,x1/10,po/h,s14,x0/6,s3,x3/5,pb/j,x9/15,s8,x8/4,pe/o,s10,x9/5,pk/n,x3/8,s2,x2/7,s7,x12/15,pm/h,x8/13,pp/g,s14,x4/7,s1,x6/12,s2,x13/9,pa/m,x8/0,s7,x4/5,s9,x7/8,s13,x15/4,s5,x11/0,pb/k,x6/2,s12,x12/11,pm/j,x9/6,s2,x8/15,po/n,s15,x5/11,pj/b,x12/3,s7,x13/10,s13,x9/5,s7,x7/3,s5,x2/4,s13,x9/14,s14,x2/3,s9,x9/12,pk/d,x0/4,s5,x5/6,s12,x12/10,s1,x2/5,pa/m,x9/7,pe/f,x0/8,s7,x5/15,pl/o,x3/0,s8,x11/10,s7,ph/c,x2/0,pk/e,x1/13,s15,po/i,x3/7,s5,x6/10,s3,x0/14,s13,x2/13,s15,x7/3,pd/c,x5/8,s3,x1/15,pf/g,x5/8,pk/l,x1/10,pn/p,x0/11,s8,pd/f,x2/8,s10,x9/13,s10,x3/11,pj/l,x15/2,s2,x10/9,pm/b,x2/0,s3,pa/i,x14/12,s7,x9/10,s6,x15/13,pg/n,x6/7,s14,x14/3,pd/b,x0/6,pf/i,s13,x7/4,s14,x13/8,s13,x4/11,pc/l,s14,x12/15,pa/h,x13/1,pd/c,x8/15,s8,pk/j,s2,x1/9,pa/b,x14/0,s10,x5/8,s9,x4/15,s6,x12/3,pg/e,x9/2,s2,x7/1,s6,x0/9,s7,x1/10,po/f,x8/5,pj/g,x14/1,s7,x10/12,s3,x0/3,s3,x15/14,s6,x11/5,pm/p,x15/0,s9,x14/7,pg/k,x2/4,pd/b,x10/11,pe/c,x7/2,pd/h,x13/10,pm/n,x11/5,s7,x12/8,s5,pb/d,x14/3,s14,x5/10,pe/f,x13/1,s15,x9/3,s4,x10/7,pn/l,x6/13,pf/d,x9/7,s4,pc/g,x10/4,s2,x6/1,s8,x9/15,s3,x3/6,pp/h,x8/2,s1,x1/12,pm/k,x4/8,ph/l,x14/2,s4,x10/7,pc/k,s2,x0/3,pn/j,x2/4,s2,x11/8,s11,x6/0,pl/e,x8/1,s14,x0/15,s7,x8/5,s11,x14/10,s4,x15/6,pk/d,x7/5,pp/m,x0/14,s6,x10/1,s3,x15/11,pc/d,x1/5,s11,x2/0,s3,x11/8,s13,x5/6,pn/a,x2/15,s3,x6/11,s3,x7/10,s5,x3/5,s5,x1/13,s11,x10/6,s4,x14/5,s10,x1/12,s2,x5/8,s11,pi/c,x1/0,s9,x9/12,s2,x14/7,pd/j,x12/4,s14,x9/6,s9,pe/p,x8/3,s5,x12/5,pm/g,x10/7,s2,pn/h,x9/1,s6,x3/10,s9,x14/2,s15,x12/10,s14,x14/11,s4,x3/2,pp/l,x13/4,s7,x12/15,ph/f,s10,x0/10,pc/g,x15/13,s7,x1/9,s9,x11/14,s3,x2/7,pf/n,x3/14,pg/j,x15/4,pl/k,x14/12,pd/b,x15/7,pi/j,x8/2,s2,x11/4,s9,x14/12,pf/a,s5,ph/j,x4/0,s3,x14/8,s14,x13/7,pn/k,x2/15,s13,x12/3,pi/o,x15/2,s15,x7/0,s9,x5/4,s10,x6/15,s14,x0/11,pl/j,s3,x14/6,s5,ph/p,x3/2,s6,x7/15,s5,x4/5,s10,x3/7,po/d,x0/12,pi/c,x1/13,pl/h,x0/15,pp/a,x4/6,s13,x13/3,s14,x4/5,pc/h,s12,x15/0,pa/i,s15,x9/11,po/f,x1/0,pl/h,x13/3,pj/c,x0/12,s5,x2/7,pl/g,x0/10,pc/b,x8/3,s13,x13/7,po/a,x1/2,s2,x7/0,pk/b,x10/4,pl/j,x3/5,s6,x14/9,s12,x4/13,po/h,x0/6,pd/k,x10/7,s2,x4/12,s8,x13/8,pi/h,x2/14,pk/j,x6/7,s2,x1/4,pl/a,x11/6,pp/i,x13/14,pf/c,x12/10,s9,x9/2,s5,x14/1,pm/a,x2/3,s4,x10/11,pn/c,x5/1,s9,x6/10,s1,x15/4,pe/k,x13/3,po/g,x12/1,pd/l,x0/8,s2,x4/14,s1,x10/7,pn/c,x12/3,s8,x6/11,s4,x12/7,s6,pj/h,x13/9,s13,x5/8,s2,x6/13,s12,x4/15,s12,x13/1,pn/e,x3/2,pg/k,x11/1,s6,x12/4,s5,x13/1,s4,x11/7,pl/f,x3/2,s1,x14/4,s12,x9/7,s15,x2/8,pd/p,x9/12,pc/k,x4/0,s4,x11/5,s6,x0/12,pe/b,x13/14,pn/c,x7/1,po/a,x10/3,s5,x14/2,s15,x12/9,s10,x1/11,pd/j,x9/0,s11,x13/3,pn/i,x4/11,s3,x8/2,s3,pp/o,x15/12,pa/h,x10/2,s15,x12/8,s5,x9/2,pc/b,x12/3,s6,x11/2,s6,x15/8,pn/d,x14/9,pa/g,x13/10,s15,x14/4,pe/b,x13/3,s10,x9/0,s5,x3/5,pp/a,x12/11,pf/o,x0/6,s12,x4/14,s6,x8/15,s15,x4/13,s10,x7/11,s12,pm/n,x12/3,s6,x10/2,pi/o,x15/11,ph/e,x12/14,pm/d,x3/5,s8,x2/9,s7,x10/11,s7,x9/15,s9,pj/k,x6/5,s6,x15/11,s9,x5/13,pl/a,x9/4,s5,x13/0,pe/c,x9/10,pg/m,x12/11,s4,x15/9,s13,pa/l,x4/12,pc/g,x7/6,s6,x4/5,pa/o,x6/14,pj/n,x3/7,pm/i,x6/11,s7,x0/2,s1,x3/7,s11,x8/5,pa/g,s12,x12/9,pl/m,x8/15,s15,pc/f,s2,x9/2,pk/p,x1/5,s7,x15/0,pa/c,x9/6,s12,x15/3,s9,x14/7,s6,pp/i,x10/1,ph/e,x4/12,pm/k,x1/6,pb/e,x14/3,pp/m,x7/9,s13,x14/4,s1,x3/13,pi/d,x1/5,s4,x13/12,ph/a,x15/2,s2,x14/3,pe/c,x0/4,pa/n,x6/2,pe/o,x0/7,s2,x6/14,s11,x3/11,pd/m,x5/2,s4,x1/9,pn/k,x6/0,pe/j,x7/11,s14,x9/0,s2,x5/2,ph/l,x8/0,s6,x4/11,s9,x1/2,s10,x13/3,s3,pb/o,x15/12,pj/m,x13/4,s10,x0/3,pn/d,x6/7,s15,pf/b,x8/9,s10,x1/2,s8,x14/12,s13,x2/13,s2,pi/g,x9/5,pj/p,x15/14,s4,x12/2,s3,x14/13,pd/n,x6/11,pa/i,x14/0,pj/n,s15,x3/9,pp/i,x2/1,po/g,x4/12,s6,x13/6,s15,x5/2,pi/e,x10/0,s5,x7/15,pp/l,s14,x4/0,s5,x1/7,s4,x9/3,s14,x7/0,pn/k,x13/5,pb/a,x0/15,pe/m,x13/2,s3,x9/12,ph/j,x14/3,s13,x4/12,s4,pd/l,x10/6,pn/p,x4/14,pd/o,s5,x10/2,s12,x14/9,s11,x1/13,s6,x2/10,pm/g,s9,x4/15,pf/h,s15,x2/14,s12,x7/10,pe/o,x8/13,s4,x0/15,s4,x6/10,pc/k,x14/2,s8,x4/3,pd/f,x13/5,pp/g,x0/12,s2,pa/l,x15/7,s9,x2/11,s5,x9/1,s7,x8/13,s9,x4/0,s7,x2/5,s11,pn/f,x12/9,pe/i,x7/0,s12,x6/14,pd/h,x9/13,s12,x1/10,pb/l,x5/13,s12,x9/1,s8,x2/6,pj/k,x13/10,s7,x15/11,s10,x7/3,s11,x14/11,s6,x0/4,s2,x3/8,pb/i,x2/0,s4,x12/5,pl/d,x3/0,s9,x11/4,pf/i,x14/15,pc/j,x2/7,s14,x3/5,pa/m,x9/13,ph/k,x4/0,pp/o,s3,x7/9,s3,x3/0,s10,x5/15,ph/g,x10/8,s11,x1/14,s3,x8/13,s4,x15/10,pb/l,x8/0,pm/g,x3/15,po/e,x0/8,s15,x1/15,s10,pm/b,x12/7,pn/h,x11/5,pl/e,x12/10,s4,x1/14,s14,x9/15,s2,x3/5,ph/d,s6,x0/8,s14,x7/6,pc/p,s15,x1/15,s5,x7/14,s14,x11/0,pk/i,x3/1,s10,x14/8,s5,x7/3,s15,x4/13,s14,x0/10,pl/a,x4/6,s15,x12/7,pd/e,s2,x1/15,pk/j,x13/3,s15,pc/l,x5/0,pk/m,x3/2,s12,pl/p,x14/1,s2,x13/8,pb/a,x14/15,s11,x8/11,pi/c,x7/0,s2,x12/4,s15,x13/1,pn/d,x12/5,pk/h,x6/11,pf/b,x8/15,s2,x5/14,pm/c,s3,x2/3,s9,x6/14,po/d,x0/15,s14,x6/12,pl/c,x14/10,pj/f,x13/7,s4,x5/10,s14,x6/4,pg/c,x10/7,s5,x3/9,s11,x6/7,pm/o,x2/4,s5,x5/11,pk/a,x4/8,pg/n,x3/14,ph/i,s15,x0/11,pg/e,x8/4,s9,x11/0,pb/d,x5/14,s7,x12/8,s4,x6/9,s5,x2/11,pg/h,s10,x14/15,pp/n,x13/2,s5,x9/6,s12,pb/a,x13/11,s10,x12/0,pe/j,x11/5,po/l,x6/1,pa/b,x3/8,s11,x0/9,pp/l,x1/12,s2,x10/6,s5,x13/14,s4,x8/15,pf/g,s3,x2/4,pk/i,x12/5,s7,x14/7,s12,x8/2,s3,x3/12,pl/j,x9/11,po/m,x13/3,pk/c,x14/6,ph/p,x4/3,pd/b,x8/14,pa/c,x13/7,pm/g,x5/4,pd/e,s1,x15/13,s6,x3/6,s6,pi/h,x7/2,s5,x4/11,s8,x1/8,po/m,s7,x2/3,s3,x14/0,s9,x6/10,s15,x4/14,s7,pi/l,x7/12,s1,x15/3,pp/c,x13/2,pk/l,x5/8,s12,x4/0,pg/p,x8/12,s11,x10/13,s8,x0/11,s15,x5/2,s7,x6/8,s13,x5/11,pm/f,s3,x10/2,pk/n,x3/5,pj/a,x13/12,s6,x0/7,s14,x14/1,pb/n,x5/10,s12,x15/7,s6,x9/1,pc/j,x14/10,pd/l,x15/6,pe/a,x8/3,s9,x10/14,s2,ph/j,x15/7,s13,x5/9,pf/c,x3/11,pg/a,x13/10,pe/d,s4,x5/4,s13,x7/10,s13,x11/9,s7,x14/1,pm/j,x6/13,s9,x8/15,pk/i,x7/6,ph/j,x1/12,po/i,x4/10,s14,pm/n,s10,x9/3,s11,x13/8,s15,x1/10,s4,x7/2,s5,x4/3,s3,x10/8,pl/h,x11/12,pb/n,x9/7,s8,x0/10,s1,pj/i,x9/5,s9,x10/14,pf/b,x15/1,s1,pk/a,x3/5,s7,x9/12,s14,x11/7,pi/l,x0/14,pm/j,s9,x1/5,pb/p,x7/9,pc/e,x13/10,s6,x7/3,s8,x5/0,s11,x8/9,ph/p,x6/11,pd/c,x8/9,s9,x12/10,s12,x11/1,pn/e,x14/13,s7,x8/2,pl/h,x9/10,pp/j,x6/11,s2,x12/14,pc/i,x8/2,pf/e,x5/15,s5,x4/8,s7,x2/15,s10,x1/10,pg/j,s6,x2/7,pe/c,x13/6,po/b,s12,x15/9,s13,x0/4,pa/l,s9,pp/g,x8/2,pn/m,x13/1,s1,x11/4,pg/a,x10/1,pm/d,x12/15,s14,x8/6,s13,x12/1,pn/g,x5/2,pi/e,s3,x13/7,s14,x5/14,s5,x3/10,pc/l,x15/14,s7,x2/10,s15,pj/f,s11,x12/5,s7,x0/14,s8,x2/11,s13,x10/6,s11,x11/7,s3,x14/1,pk/m,x7/12,s15,x4/11,pp/o,x0/2,s13,x14/9,pg/d,s12,x10/1,pi/m,x0/7,s1,x1/4,s12,x14/7,s2,x3/4,s3,x12/14,s4,x7/6,s1,x4/8,s9,x6/0,s13,x9/5,pd/f,x15/14,po/b,x7/11,s11,x2/12,s10,x9/11,s9,x5/3,s13,x0/12,pc/n,x10/2,s5,x8/12,pk/f,x2/4,s1,x13/1,s3,x8/12,s3,x15/0,po/h,x14/6,pm/a,x15/9,s3,x12/13,pf/p,x10/9,s5,x6/8,po/d,x9/5,pm/h,x10/0,s12,x14/1,pg/b,x4/8,s1,x6/11,s3,x2/12,s12,x3/5,s11,x9/7,s14,x14/5,s7,x13/7,s12,x3/5,pd/n,x4/2,pe/a,x15/12,pg/b,x3/10,s13,x2/0,s13,x1/3,pa/h,x14/13,pm/p,x5/2,s14,x1/12,pb/f,x10/8,s12,x0/2,pg/c,x5/3,pm/l,s6,x13/6,ph/a,x1/3,s14,x8/5,s7,x7/4,pd/l,x8/12,pb/a,s12,x5/14,po/f,x9/6,s9,x7/12,s11,x3/6,s5,x1/10,s10,x0/14,s9,x6/5,s3,x13/4,pi/e,x3/10,s3,x4/8,pn/o,x5/12,pe/i,x1/2,pb/n,x4/3,s11,x9/7,pa/d,s2,x15/11,s15,x7/0,pm/f,x15/8,ph/k,x5/7,s4,x0/12,s10,x5/3,s4,x11/13,s10,x14/7,pg/b,x10/12,pk/o,x9/3,s6,x2/4,s9,x11/14,s7,x5/1,s8,pn/l,x6/2,pd/b,x1/13,ph/f,x4/15,pn/j,x14/5,s2,x6/15,s3,x9/2,s15,x3/4,s7,x9/14,ph/l,x0/10,pj/g,x6/13,pf/b,x11/8,pe/c,x6/9,pd/b,x0/13,s3,x9/7,pi/g,x1/2,pf/h,x9/13,s3,x10/2,pe/c,x13/3,s12,x15/7,s8,x5/13,s14,x10/8,s2,x13/6,s10,x0/8,s1,x9/11,s4,pp/n,x3/0,pm/g,x4/1,pl/h,x5/12,s12,x10/6,s5,x4/3,po/b,x7/5,pl/c,x2/10,s7,x5/12,pa/n,x6/0,s9,x14/12,s3,x4/15,s9,x3/11,s1,x1/4,s5,x13/3,s4,x12/15,s11,x6/2,s5,x5/8,s11,x10/3,s2,x6/1,s1,x8/15,s7,x13/2,pi/c,x9/10,s13,x14/0,s13,x4/5,s4,pe/j,x1/13,s5,pp/f,x8/5,s12,x1/4,s4,pk/i,x2/0,s11,x5/13,pe/f,x9/14,s5,x2/3,s12,pl/n,x6/0,s11,pc/k,x14/3,s5,x9/4,s13,x8/3,pl/f,x1/0,pb/i,x7/2,s11,x4/1,s10,x2/10,po/p,x11/12,pn/m,x15/5,s12,x1/9,pk/g,x3/4,pn/j,x15/8,pb/k,x4/2,pf/o,x9/15,pa/p,x13/4,s10,x10/8,s3,x15/7,s5,x4/10,s14,x11/14,s14,x15/10,s3,x8/4,s12,x2/1,s15,x10/7,pb/l,x3/13,s4,x7/8,s11,x14/9,pn/a,x0/7,s10,x6/9,pc/m,x1/8,s3,x11/7,pi/l,x4/9,s7,ph/k,s10,x11/13,s9,pc/n,x1/7,pl/m,x6/3,s11,x0/2,s5,x9/14,pg/h,x1/2,po/k,x8/0,pb/l,x10/5,ph/k,s3,x8/15,pg/e,x7/3,s13,x6/14,po/p,x13/5,s2,x10/9,s11,x0/11,s15,x3/7,pn/g,s7,x9/10,pl/i,x14/3,pk/j,x10/13,s10,x0/6,s15,x9/14,s11,x12/4,pi/g,x10/8,po/m,x4/11,s1,x14/7,s2,x8/10,s11,x1/15,s9,x2/6,s7,ph/k,x10/3,pl/n,x2/12,pi/f,x7/0,s1,x8/12,pk/g,x1/9,pf/m,x13/15,pb/j,x7/0,po/p,x12/5,pc/i,s4,x2/8,pf/j,x5/9,s12,x13/2,s1,x5/14,s13,x0/11,pk/e,x1/4,s15,pi/f,x3/12,pb/g,x7/13,pn/d,x11/0,s11,x13/14,s6,x7/1,s5,x11/0,pf/e,x10/15,pm/n,x9/5,pa/p,x0/14,pf/l,s13,x7/13,s2,x2/9,pp/e,x13/10,s4,x15/7,s3,x14/1,s6,x7/2,pf/n,x8/11,s1,x5/4,pk/a,x2/0,s9,x7/14,pg/l,x13/10,pc/k,x3/12,s11,pm/g,x13/10,pa/p,x5/7,pi/f,x3/0,s11,x5/11,s11,x13/15,ph/o,s11,x0/14,s6,pp/m,x9/8,s8,x2/12,pa/l,x6/10,s6,x5/8,pf/h,s3,x3/11,s13,x14/4,s14,x8/6,s8,x1/7,s7,x6/3,pk/m,x2/15,s10,pi/p,x10/12,s8,x2/15,s6,x14/13,s10,x1/0,pg/f,x6/9,pj/i,x15/4,pd/e,s14,x11/8,s1,pl/j,x9/6,s3,x10/0,po/d,x9/13,s7,x5/2,pa/l,x7/0,s10,x3/1,s7,x0/11,pb/n,s7,x2/12,pm/a,x5/4,s9,x10/3,s11,x12/0,s15,pf/l,x6/1,po/h,x7/5,s8,x15/8,pa/n,s9,x12/4,s2,x3/8,s7,x4/10,s2,x2/5,s4,x13/0,s9,x6/5,pg/o,x13/11,s1,x10/9,s15,x8/15,s11,x0/9,pc/l,x1/11,pd/g,x13/10,pk/o,x7/2,pp/h,x14/4,pi/k,x5/0,s12,x4/9,pn/d,x13/3,s8,x12/8,s1,x13/5,s11,x15/11,ph/j,x1/2,s6,x5/3,pl/p,x14/1,s14,x0/5,s15,x9/10,s12,x3/4,pd/m,x0/5,ph/j,s13,x15/7,s2,pm/o,s6,x2/12,s5,x10/7,s14,x15/4,pe/k,x7/14,po/m,x2/4,s5,x5/10,s13,x4/15,s6,x1/8,pn/c,x12/14,s9,x8/1,pb/p,x2/15,s4,x10/14,s7,x0/2,pc/a,x5/6,ph/e,x7/12,s11,x5/9,s7,x7/3,s5,x9/2,pd/c,x5/7,pk/a,x8/3,pn/f,x11/12,pc/b,s9,x6/5,pm/a,x9/15,pb/e,x7/11,s12,x2/15,s7,x5/6,s5,x1/8,s10,x7/15,po/l,s15,x0/10,s1,x5/11,s11,x8/15,pa/m,x11/4,s3,x5/0,s11,x13/14,s4,x8/2,pc/h,x0/7,s6,x13/1,s8,x0/9,pg/e,x2/1,s6,x13/0,pj/o,x7/12,pi/l,x6/11,s10,x8/10,s15,x4/7,s11,x15/0,pe/d,x12/8,pp/j,s1,pa/l,x14/7,s10,pe/b,x15/8,s6,x5/6,s2,x9/4,pn/h,x10/8,s15,x7/0,s14,x11/4,pm/d,s7,x6/10,pn/a,x3/0,s9,x14/4,pk/b,x5/6,pj/d,x4/2,ph/i,x14/6,pg/j,x7/2,pa/l,x5/3,s11,x6/8,s15,x11/10,pn/m,x3/9,s3,x12/2,pc/f,x0/8,po/i,x14/5,pf/e,x10/12,pl/p,s11,x2/3,pf/k,x1/12,s14,x4/3,s11,x11/14,s7,pb/e,x5/10,s7,x13/8,s15,x3/10,po/p,x9/2,pd/h,x13/6,s6,x1/15,s8,x5/14,pa/n,x10/7,s9,x15/6,s2,x0/10,s4,x6/15,s8,x3/9,s2,x11/0,s10,x14/5,pp/c,x12/0,pk/b,x13/10,pc/h,s15,x5/4,s6,x1/2,s12,x3/14,pk/g,x4/15,pd/e,s15,x9/3,s10,x7/15,pc/b,x2/0,pp/m,x15/12,s3,x3/11,pe/o,x13/10,pp/g,x5/6,s9,x1/9,s13,x13/12,pb/n,x5/3,s13,pe/c,x10/9,s4,x1/15,pp/j,x8/13,pd/i,x2/3,pm/h,s14,x15/8,pe/f,x3/13,po/i,x14/4,s13,x15/9,s11,pb/k,x13/6,s12,x11/3,pe/g,x8/5,s13,x3/1,s11,x5/9,s13,pc/i,x4/14,pk/m,s14,x3/9,s2,x10/14,s8,x5/0,s5,x2/12,s10,x9/7,s13,x13/15,pn/i,x7/5,s8,x2/14,pb/h,x3/8,s9,x14/6,s4,x3/10,s11,pd/j,x7/11,pa/l,x12/3,pd/h,x4/11,s14,x2/13,s10,x4/6,pi/o,x7/0,s12,x14/2,s5,x1/11,s12,x2/4,pe/p,x13/7,s11,x12/9,pf/a,x0/7,s6,x14/2,s7,x7/12,pm/c,x11/4,s1,x14/9,s3,x7/13,ph/p,x1/12,pn/k,s12,x2/10,pa/b,x3/15,s9,x1/8,ph/k,x9/0,pd/i,x10/11,pc/p,s12,x5/9,s13,x2/12,s15,pk/m,x15/13,s13,x11/2,pi/j,x6/7,s5,x11/0,pe/d,x5/15,s7,pp/l,s4,x3/0,s9,x1/4,s15,x12/5,po/g,x10/15,pb/d,x12/4,s12,x8/6,ph/o,s9,x15/7,pg/j,x3/1,s1,x8/13,s5,x2/15,s14,x9/10,ph/b,s13,x5/6,s7,x9/10,s4,x2/14,s10,x9/10,s8,x11/6,pi/k,x8/4,s4,x15/3,s10,x13/2,s1,x0/7,pd/e,x10/13,pa/c,x0/8,s3,x4/9,s9,pi/j,x15/12,pp/b,x11/7,s4,x4/0,s13,x10/6,pn/l,x12/3,pa/k,x2/13,s8,pb/j,x3/7,s15,x6/15,pg/m,x3/5,s12,x11/13,pl/k,s13,x6/7,s7,x14/11,s1,x4/7,s4,x2/1,s13,pm/a,x0/15,pp/e,x10/3,ph/a,x11/13,pe/i,x8/7,s14,x4/2,s7,x12/7,s14,x13/0,s15,x6/9,ph/n,x2/0,s1,x15/1,s1,x14/13,pe/l,x0/12,pn/o,x8/9,s14,x1/2,s13,x12/6,pf/e,x15/11,pp/o,x0/1,s6,x4/9,s11,x15/14,pe/c,s2,x3/13,pm/n,x4/11,s6,x14/9,s15,x5/6,ph/d,x10/1,pk/l,x9/8,s4,pn/p,x14/4,pg/i,s2,x13/7,s8,pc/n,x2/15,pa/k,x8/14,s1,x2/1,s4,x7/15,po/j,x0/2,pk/m,x13/12,s15,pl/j,x1/3,s13,x2/14,pb/e,x7/0,s8,pl/k,x1/14,s11,pc/o,x10/0,s12,x14/6,pl/h,x3/15,s9,pm/a,x6/1,s6,x10/3,s14,x11/15,s3,x9/13,s13,x7/1,pf/i,x15/10,s14,x7/14,s12,x5/3,pk/j,x15/12,s11,x8/3,pn/c,x15/5,s8,x13/4,pp/b,x11/14,pc/g,x6/5,s9,x8/9,pk/m,x11/10,s1,x14/13,s11,x5/3,po/j,x0/10,pg/c,x11/5,ph/b,x10/7,s7,x12/9,pk/p,x13/5,s1,x0/4,pd/n,x10/8,pp/k,x6/13,pe/i,x12/4,pf/m,s12,x11/2,s14,pd/p,x9/3,pl/m,x13/7,s2,x4/10,s5,x9/13,s6,x5/14,pa/f,x3/4,s6,pn/p,x12/10,s4,pm/c,x15/1,pb/e,x5/14,s10,x10/3,pm/h,x9/5,s8,x7/8,s3,x6/0,pg/f,x12/15,pd/h,x11/13,pm/l,s12,x4/10,s10,x2/8,s10,x15/6,po/d,x11/1,s8,x3/4,s11,x2/8,pp/h,x3/10,pg/n,x6/7,s14,x11/1,s6,x2/4,pe/o,x0/11,pk/b,x2/13,pj/f,x9/6,s14,x1/5,pa/g,s10,x6/10,s1,pf/h,s6,x1/2,pm/i,x3/6,pk/n,x14/8,s15,x4/2,s1,x14/5,s6,x9/11,s2,x7/8,pa/p,x12/5,s8,x1/0,pc/n,x9/7,s5,pa/k,x1/4,pp/h,x15/5,po/n,x3/0,pb/c,x10/11,pf/j,x7/14,s2,x6/15,s2,ph/d,x7/2,pg/n,x11/5,s11,x2/6,s10,x4/13,s13,x12/11,pa/f,x5/6,s9,x9/3,s5,x15/5,s14,x4/12,s14,x6/15,s12,x11/10,s7,x6/14,s6,pb/m,x0/3,ph/a,s12,x11/13,s12,x0/10,s1,pf/m,x14/1,s8,x5/0,pn/c,x15/11,pe/m,x2/7,pk/h,s3,x8/11,pa/d,x4/15,s1,x11/14,s8,x7/13,pb/j,x2/1,s1,x11/12,pa/m,s3,x8/7,s13,x10/1,s11,x2/15,pk/d,x6/3,pa/j,x4/0,pg/o,s14,x14/15,pp/h,x10/12,s1,x14/11,s5,pa/o,x8/3,s15,x15/10,s12,x12/9,s15,x15/1,pi/c,x6/12,s5,x2/10,s9,x13/9,pa/p,x0/4,s11,x6/12,pe/c,s13,x8/13,pb/p,x12/15,ph/g,s8,x0/2,pm/e,x6/4,s4,x12/2,po/h,x4/13,pf/l,x5/11,s15,x6/0,ph/p,x8/4,s8,x1/14,pa/k,x6/10,pb/h,x14/13,s8,x6/12,s9,x9/7,s6,x0/11,s14,pp/i,x6/5,s2,x0/2,s11,x14/4,s10,x7/9,pb/c,x13/4,po/k,x15/5,pp/b,x6/2,s12,x1/8,s13,x4/13,s6,x15/10,pn/m,x9/7,s10,x13/10,pa/b,x6/4,pl/p,x5/14,s10,x3/12,pk/b,x6/9,pg/m,x8/2,s4,x3/15,pj/l,x6/7,s8,x4/10,s7,x1/8,s2,x6/14,s6,x0/13,s13,pg/b,x14/9,s13,x13/6,pa/i,x15/4,s5,x0/2,pm/f,x12/7,s15,x5/15,s7,x4/12,s8,x14/6,s6,x1/0,s10,x10/9,s2,x8/1,po/g,s5,pd/j,x5/0,pf/a,x1/8,s15,pg/i,x4/0,s9,x11/15,s7,x9/5,pk/b,x6/7,pi/d,x10/11,s12,x2/1,pf/a,x3/11,s6,x1/4,pg/h,x7/5,pk/m,x3/10,ph/n,x14/2,s13,x9/15,s2,x6/14,s13,pp/b,x8/2,s9,x1/4,pe/g,x3/2,s12,x4/6,s9,x8/13,s9,x4/11,s15,x15/2,s8,x12/3,s7,pl/p,x4/1,pa/j,x0/13,pf/i,x7/9,pk/a,s11,x3/5,s13,x2/7,pi/h,x8/13,s15,x9/3,s14,x10/5,s2,x9/8,s8,x0/3,pm/o,x8/6,pc/j,s10,x12/4,pa/p,x6/14,s9,po/k,x5/13,pl/h,s13,x4/0,s10,x3/13,s12,x2/10,po/d,x13/8,s15,x0/5,s5,x13/4,s13,x15/10,s14,x9/11,ph/m,x7/2,s4,x15/1,s6,x13/11,pi/b,s14,x10/1,s12,x2/8,pf/c,x5/0,s15,x15/3,s8,x9/6,pg/i,x2/11,pe/d,x9/5,s14,pb/p,x14/2,pg/h,x1/0,s8,x5/14,s12,x0/10,pn/o,x8/5,pe/c,x9/7,s2,x2/5,pf/n,x15/13,pl/d,x10/9,s8,pg/k,s15,x0/15,pn/d,x4/3,pf/h,x6/12,s15,x2/14,pi/e,x3/0,s15,x15/4,s12,x0/5,s5,x9/14,s15,x6/7,s14,x11/10,s9,x3/6,s12,x5/9,pf/n,x6/14,pd/m,x3/13,pi/g,s5,x1/0,pe/p,x8/12,pa/i,x2/13,s6,x5/9,s11,pj/c,x3/6,po/m,x15/13,s14,x3/6,s1,x5/15,pe/k,s10,x2/9,pd/b,x11/13,s15,x7/4,s1,x14/8,s11,x6/15,po/k,s14,x12/2,s1,x10/15,s9,x6/11,pe/l,x9/7,s8,pd/o,x8/14,pn/g,x7/10,s9,x4/13,s13,x1/6,s5,x3/8,pm/d,x4/2,pj/f,x3/8,s1,x10/13,pp/d,x15/6,pa/k,x11/13,s9,x14/5,s4,x1/7,s7,x5/8,s10,x14/4,pg/j,x0/12,s7,x7/6,pc/d,s9,x10/5,s5,x13/7,pg/m,x2/6,pn/c,s1,x1/5,pm/b,x12/7,pd/e,s10,x1/8,s10,x0/6,pl/n,x13/2,s8,x10/14,s11,x9/0,s5,pf/c,x6/7,s7,pd/e,x15/5,pm/n,s8,pe/l,x10/6,s7,x11/4,s5,x7/3,s1,x10/1,pi/f,x9/5,s11,x7/2,pb/g,x15/12,s2,x9/5,s6,x10/14,s6,x4/3,s6,x10/9,pc/h,x3/0,s9,x11/4,s10,x3/14,s6,x4/8,s1,pk/o,s11,x2/5,s11,x12/8,s9,x11/2,s9,x4/1,pj/g,x15/7,s1,x2/0,s13,x11/6,s15,x12/10,s8,x6/15,pb/l,x14/7,s14,x11/2,s10,x9/15,s3,x8/2,s14,x15/3,s4,x11/2,s11,x4/12,s10,pp/c,x9/2,po/j,x0/14,s7,x12/3,s3,x15/9,s6,x5/4,pn/d,x7/9,s3,x14/0,po/f,x1/4,s14,x5/9,pi/l,x2/8,pd/b,x4/13,s10,x6/15,pk/n,x13/9,s7,x3/8,pg/p,x1/13,s15,x5/6,pj/e,x11/10,s3,x9/5,s6,x12/13,s5,x6/4,ph/a,x0/10,s1,x8/14,s12,x9/13,s1,pb/d,x4/6,pg/i,x10/2,pj/a,x14/5,pm/p,x7/15,s1,pl/i,x13/0,s4,x3/14,s11,x1/7,pb/f,x8/15,s7,x4/11,pg/j,x2/6,s7,x10/1,s4,x11/4,pl/m,x15/14,s3,x1/9,pd/k,x3/4,pg/i,x0/2,s14,x9/4,pj/d,x1/12,pe/l,x8/10,s14,x15/3,pg/p,x12/6,pe/b,x10/0,ph/l,s11,x1/11,s3,pd/a,x3/7,pl/g,x5/14,pb/n,s5,x0/4,s6,x13/2,pf/c,x11/6,s11,x12/15,s13,x10/9,pm/k,x8/15,pg/h,s8,pb/p,x3/10,pf/n,x7/14,pe/g,x10/3,s10,x9/13,pm/b,x7/2,pp/g,x0/12,pe/k,x10/14,s5,x13/1,pj/o,x8/12,s15,x3/13,pm/f,x9/1,s7,x8/12,ph/l,x6/14,pa/c,x13/2,s5,pd/m,x7/12,pb/h,x2/8,s12,x14/3,pj/f,x12/15,pp/i,x4/10,s7,x12/3,pn/a,x5/9,s15,x11/8,s5,x1/3,s10,x14/6,s5,x1/0,pd/c,x4/14,s7,x9/7,s10,x10/2,pp/h,x3/12,s12,x0/14,pn/l,x15/9,s9,x13/4,s1,pi/c,x5/2,s9,x15/6,s12,x7/11,s2,x13/3,s3,x1/15,pf/m,x3/7,s13,x15/10,s8,po/n,x2/13,s1,x9/15,pi/g,x0/5,s1,x3/13,pp/n,x1/6,s12,x13/10,s14,x0/11,pe/h,s15,x10/13,pl/b,x12/1,pg/d,s6,x15/13,s5,x9/3,s1,x0/12,pj/b,s7,x1/3,s3,x2/15,s15,x5/13,s13,x3/6,pk/o,x4/13,s12,x3/15,pp/i,x2/10,s12,x5/1,pc/g,x3/0,s1,x10/4,s8,x15/14,s7,x4/1,s3,x0/13,s7,x1/2,ph/f,s9,x6/5,s13,pl/e,s9,x4/11,s2,x10/6,s3,x9/1,s11,x11/2,ph/f,x15/13,pp/k,s4,x5/11,pa/n,x13/15,s5,x9/4,s8,x11/15,pi/p,x7/14,s8,x1/13,pe/m,x0/11,s8,x6/9,pa/o,x10/13,s7,x12/5,s2,x4/13,pg/c,x12/2,pj/h,x9/3,s3,x2/14,s4,x15/10,s13,x8/11,pd/e,x15/4,s4,x2/9,pj/g,x14/5,pl/k,x6/13,s10,x11/3,ph/c,x6/0,pb/f,x2/14,s1,x12/13,s3,x14/4,ph/c,x11/15,s5,x9/8,pm/a,x13/10,s2,x6/8,pf/h,s7,x9/10,pm/k,x14/0,s6,x3/8,pi/l,x11/12,s5,pm/b,x13/3,s11,po/a,s7,x8/10,s2,x7/12,s2,x0/1,s13,x7/3,s10,x12/2,s14,x3/7,s1,x12/13,pf/b,x5/3,pa/l,x10/4,po/h,x5/3,pi/n,x6/1,s5,x15/14,s6,pd/a,x3/0,s12,x12/6,pp/f,x11/4,s7,pa/d,x3/12,s15,x9/8,pb/e,x0/1,s13,pj/o,x5/8,pn/f,x10/7,po/i,x14/12,pe/g,x4/15,s2,x7/2,po/d,x0/9,s3,x8/2,ph/l,x15/3,s8,x12/9,pf/g,x4/14,pi/c,x12/15,pa/h,x6/3,pk/e,x1/15,s14,x5/10,s13,x13/6,s9,x15/10,pd/g,x1/12,s8,x10/15,s11,x8/0,pp/h,x1/6,pb/l,x3/9,s7,x15/0,s11,x9/4,s3,x2/7,ph/p,x11/12,s9,x2/5,s10,x3/12,pj/n,x4/6,pa/o,x13/5,s2,pf/c,s4,x1/10,s1,x15/7,s14,x4/0,s5,x3/15,pi/m,x11/13,s13,x5/12,pl/o,s10,x9/3,pm/d,s4,x10/12,pj/a,x4/5,pp/b,x7/11,s1,x1/3,s8,x5/10,s10,x1/2,s4,x5/8,pk/d,x1/9,pe/f,s10,x5/4,s13,x0/12,ph/b,x3/5,s11,pc/l,x15/1,s11,x4/7,s6,x11/2,pd/f,x4/0,pe/b,x2/12,s6,x9/7,s3,x11/12,pa/g,x6/10,s1,pp/i,x11/12,pe/b,x13/10,pf/i,x8/14,s15,x1/11,pm/p,x12/3,s7,x0/5,s4,x11/3,s13,x6/5,pd/b,x12/7,pk/o,s13,x0/2,s9,x13/9,s10,pe/a,x7/3,s1,x11/13,pd/n,x3/5,s4,x0/6,s2,x4/14,s4,x6/2,pb/e,s3,pj/m,x13/7,s12,x8/5,pb/f,x10/6,s5,x5/3,pe/a,x0/2,pc/b,x3/11,s8,x14/5,s4,x3/9,ph/g,x0/11,pp/k,x4/5,pc/h,s15,x6/9,pl/p,x0/10,pc/a,x13/9,s13,x8/7,pm/k,x10/4,po/c,x6/5,s13,x8/9,pe/h,x12/6,s8,x7/15,s14,x3/6,s1,x13/4,pb/a,x7/9,pi/c,x1/5,s6,x2/13,pk/p,x0/7,pg/l,x5/2,s11,pp/e,x12/6,s1,x3/2,s6,x10/9,s10,x11/13,s12,x15/6,pi/l,x11/9,s1,x10/6,s9,x11/15,s5,x6/0,s7,x5/10,s3,x2/6,s2,x9/15,pn/o,x10/4,s14,x5/7,ph/a,s3,x4/15,pl/k,x12/6,s12,x7/8,s6,x13/4,s13,x11/3,pa/b,x12/14,s5,x6/8,s4,x0/10,s2,x11/9,pe/l,s1,x14/7,s5,x0/10,pi/n,x9/5,pm/o,x13/3,s6,x2/11,s15,x3/9,s3,x1/6,pb/e,x5/9,s10,x0/11,s14,pc/p,s1,x15/14,s11,x9/13,pg/j,s6,x6/8,ph/e,x3/2,s5,x13/7,s3,po/i,x3/10,s13,pm/a,x2/13,pp/f,x7/15,pi/n,x14/13,pp/a,x15/4,s4,x7/6,s15,x14/11,s5,x12/15,s11,x13/7,pf/j,x8/9,s7,po/a,x2/6,s2,x13/3,s6,x14/6,s2,x5/11,pi/b,x1/0,s11,x13/12,pc/m,s12,pb/d,x14/8,s11,x15/3,s13,x8/5,s12,x12/0,pa/c,x3/15,pi/k,s3,x14/13,s12,x5/4,s6,x9/6,pj/c,x8/4,pf/n,x9/1,s3,x12/3,pp/e,x13/5,s9,x15/10,pl/m,x13/9,pa/i,x10/7,s6,x0/15,ph/l,x3/4,s11,pf/i,s1,x12/1,s4,x4/2,pj/d,x11/13,pf/g,s1,x14/7,ph/d,s4,pg/i,x12/5,pa/p,s1,x10/13,s4,x3/1,pd/c,x6/7,s3,x13/11,pk/f,x9/8,pb/p,x2/4,pi/f,x0/12,s7,x7/15,s15,x13/10,s1,x5/9,s12,x4/7,pp/d,x8/10,s3,pe/n,x3/7,pc/k,x11/14,pi/g,s11,pm/a,s4,x0/9,s8,x10/5,pf/o,s4,pk/m,x2/0,pa/n,x11/9,s3,x2/7,s1,x4/6,s6,x8/13,s1,x14/5,pg/i,x10/9,pe/a,s1,x2/0,pp/d,s11,x10/13,s14,x3/7,pl/a,s11,pb/i,x4/14,pc/j,x8/11,s15,x9/10,s4,x8/6,ph/n,x4/7,s8,x14/11,s15,x4/15,pc/i,x10/13,pn/m,s13,x1/3,s7,x5/4,s9,x10/8,s3,x5/9,pp/b,x8/13,pn/g,x7/10,s7,x13/1,pi/e,x14/4,pc/p,x9/1,s6,x12/11,s2,x4/14,pj/h,x13/5,s1,x1/7,pb/d,x11/9,pi/c,x10/8,s13,x9/5,s4,x3/15,s2,x6/0,s3,x14/2,s11,x12/1,s7,x10/15,s9,x13/3,s1,x7/5,pa/k,x14/1,pj/b,x10/7,s8,x4/1,pi/l,x14/7,s15,ph/m,x13/9,s13,x2/1,pk/f,x12/4,s11,x9/15,pb/d,s4,x1/14,pm/e,x2/10,s8,x13/15,s5,x12/5,s2,x2/14,s12,x15/5,s10,x11/13,pn/o,x0/7,s3,x15/13,s5,x4/14,s9,x12/7,pb/m,x15/5,pc/e,x6/7,pa/l,x15/10,pm/f,x1/11,s12,x12/7,s14,x9/14,s7,x11/3,pd/n,x9/1,s10,x10/14,pa/b,x3/15,pc/i,x4/2,pd/m,x7/5,s3,x11/2,pb/p,x14/9,pn/j,x10/5,s12,x15/12,s5,x8/9,s9,x3/12,s7,x7/0,s11,x5/15,s8,x14/3,ph/f,x12/10,s15,x13/15,pk/l,x11/10,s13,x9/6,s14,x14/5,s11,x15/8,s4,x9/4,pa/i,s2,x7/6,pn/g,x15/0,pi/l,x11/8,s10,pf/o,x5/1,s8,x9/0,s5,x10/12,s9,pj/k,x8/2,s11,x13/9,s9,x14/4,pg/d,x11/13,pj/f,x9/1,s4,x5/3,s1,x2/7,s12,x10/14,pl/o,x7/15,s14,x13/9,s1,x7/14,s9,x6/8,s5,x5/9,s11,x1/8,s7,x6/15,s14,x7/11,s10,x12/0,pb/d,x15/13,s6,pc/a,s10,x9/8,s12,x15/14,s7,x6/10,pd/f,x12/7,s3,x11/2,pk/p,x0/8,s11,x13/12,s9,x14/10,s15,x8/1,pf/l,x6/0,s8,pm/n,x13/9,pg/p,x10/14,s9,x11/1,s12,x4/10,pf/i,x1/12,s9,x3/8,s10,x9/4,s1,x14/10,pa/m,x7/13,s9,x0/9,pj/e,s5,x8/4,s3,x13/11,s7,x10/8,s2,x13/3,s12,x0/7,pm/l,x4/1,s4,x9/8,pf/a,x11/5,s5,x3/10,s4,x6/1,s8,x11/13,s2,x14/12,pb/h,x3/9,pn/j,x10/0,s11,x15/7,pb/a,x2/13,pp/j,s12,x1/9,s12,x2/6,s5,x12/10,s6,x4/9,pg/n,x14/5,s8,x15/9,pd/h,s5,x13/7,s8,x11/6,s4,x3/4,s9,x12/8,s10,x2/14,pj/o,x5/15,pg/e,x14/4,s14,x10/15,s9,x3/0,pi/o,x6/8,s14,x1/12,s7,x15/2,pn/h,x6/13,s5,pj/m,x2/15,pb/g,x8/12,pa/p,x1/5,pg/n,x8/0,pm/c,x6/1,s3,x11/15,s13,x1/0,s12,x8/15,pb/o,x0/10,pm/p,x2/13,pc/h,s9,po/n,s5,pk/c,x8/1,pd/g,x3/12,s2,pa/i,x2/7,s6,x4/9,s12,x6/10,s8,x2/1,s14,x8/15,s9,x3/10,pp/f,x5/6,s3,x9/1,pj/n,x2/7,pf/p,s6,x12/1,s3,x8/13,pm/e,x2/7,s10,x14/12,s11,x3/1,s5,x11/12,s5,x13/9,s13,x3/11,pl/k,s12,x12/10,pp/j,s14,x13/15,s4,x0/1,pg/e,s11,x5/3,s5,x11/8,s1,x1/6,s14,x10/5,s15,x9/15,s15,x2/11,pk/a,s14,x6/9,pf/e,x10/0,pa/h,x15/6,po/b,x1/4,pg/e,x12/9,s2,x8/11,pl/k,s4,x2/7,s15,x15/11,pf/d,x14/5,s3,x3/7,s3,x10/2,pc/k,s6,x1/12,pj/b,x11/5,po/n,x12/10,pi/h,x7/9,pb/j,x6/15,s4,x5/11,s3,x10/1,pp/o,s5,x8/2,s8,x3/12,s5,x2/15,s5,pf/e,x7/4,s12,x15/0,s13,x5/4,s5,x8/14,s5,pl/p,x2/10,pc/o,x15/6,s15,x4/5,s12,x10/14,s8,x11/13,s3,x12/6,s13,x9/8,pk/f,x7/4,pa/j,x6/1,pn/l,x15/8,s10,x11/1,s15,x4/7,s8,pc/a,x10/14,pl/f,x11/4,pd/j,x1/0,s6,x5/13,pg/f,x14/10,pe/c,x12/7,pn/h,x2/4,pk/j,x5/9,pb/m,x2/14,s10,x1/6,s9,x15/9,pg/d,x8/11,s6,x7/10,s8,x14/2,po/f,x6/13,pm/n,x4/11,pf/p,x0/5,pg/a,x11/4,pb/i,x9/12,s2,pk/n,x2/6,s12,x0/10,s4,x4/15,pc/m,s11,x10/0,pe/i,x9/4,pm/j,x11/5,pc/i,x4/10,s4,x2/12,s11,x3/9,s13,x8/2,pf/d,x9/7,s1,x15/3,s3,x12/10,pk/m,s6,x3/11,s7,x10/0,s3,x5/2,pj/l,x1/10,s12,x12/3,s1,x6/8,s10,pd/e,x13/7,po/l,x14/6,s6,x8/1,pc/p,s2,x3/10,s3,x7/4,s10,x1/9,s3,x4/12,s14,x2/14,s10,x1/9,s4,x11/5,s12,pd/a,x13/8,pb/g,x3/7,s11,x9/6,pm/n,x10/12,pl/c,x8/13,s6,x4/6,s1,po/p,x7/11,s15,x9/12,s2,x3/14,s15,x6/5,s8,x4/7,s1,x15/5,s5,x6/10,s12,x12/5,s13,x10/4,s5,x15/6,s5,x1/13,pf/c,x14/5,s3,x13/8,pk/m,x11/2,s6,x7/13,s9,x4/8,s1,x1/11,pf/l,s7,pk/g,x3/5,s5,x13/11,s13,x1/7,pc/b,x12/10,s3,x1/11,pp/o,x3/2,s7,x14/11,s10,x9/3,pd/m,x0/6,s4,x7/10,s6,x9/1,s8,x3/14,s8,ph/i,x0/4,s4,x14/9,s10,x11/6,s9,pd/m,x13/8,s14,x6/3,s14,x8/4,pf/n,x15/0,pc/m,x2/13,s3,pl/j,x6/12,s5,x4/2,pc/i,s10,x12/1,ph/p,x14/9,s8,x3/2,pd/e,x1/10,pb/o,x6/3,s12,x14/0,s2,pd/j,x12/5,s11,pl/f,s13,x10/14,s7,x7/6,s3,x13/10,pi/c,x9/14,s10,x13/8,s5,x5/10,s3,x7/6,s10,x0/8,pe/l,x5/14,s3,x12/13,s2,x4/8,s6,x13/3,s11,x15/10,s15,x6/11,s1,pk/h,x4/2,pa/e,x6/3,pi/o,s1,x8/2,pl/n,x13/9,pf/o,x0/14,s2,x4/10,s4,x6/13,s15,pg/l,x8/1,s2,x4/10,pd/m,x11/7,s6,x0/3,s3,x10/8,s5,x15/12,s1,x11/9,s1,x8/5,pe/f,x7/6,po/a,x5/9,s9,x10/12,s7,x4/6,pi/d,x2/8,s12,x9/6,s12,x15/13,s3,x1/9,pf/h,s2,x2/0,s12,x15/13,s7,x8/10,po/e,x0/9,pn/d,x3/2,pp/l,x9/11,pf/i,x2/8,s8,x11/4,s12,pl/a,x7/1,pn/d,s5,pi/l,x0/10,pk/m,x3/8,s3,x14/12,s5,pp/h,x0/1,s15,x15/2,pl/b,x4/3,pe/g,x12/8,s6,x10/7,s5,x1/2,s3,pp/n,x15/14,pc/l,x1/11,s2,x3/15,s6,x2/14,s1,x6/7,s15,x15/13,pd/m,x9/0,s9,x14/4,pc/g,x7/6,s4,x5/14,pk/l,x6/4,s3,x2/10,s12,x12/4,pj/p,x3/7,s5,x10/9,pe/d,x1/6,pc/j,x7/5,s5,x13/10,pa/m,x4/15,s12,pb/f,x13/1,pd/k,x8/0,pc/n,x13/7,po/l,s14,x4/15,pa/b,x8/10,s5,x15/12,s10,x0/6,s3,x10/11,s1,x3/6,pi/d,x8/5,s6,pp/g,x10/6,pa/e,x15/7,s12,x2/13,s6,x7/4,s10,x10/1,pk/p,x8/2,s15,x4/12,pa/e,x15/0,s3,pm/g,x2/6,s12,x4/5,pe/d,x7/2,s1,x0/10,s14,x14/13,s4,x9/12,pi/p,x10/4,s7,x11/12,s14,x4/6,s6,x11/3,pm/g,x9/4,s2,x1/10,pc/i,x2/3,s13,x7/10,pd/o,x0/9,s15,x10/4,s8,x9/14,pi/h,x13/1,pk/d,x3/0,pi/h,x10/9,s13,pp/e,x11/14,s15,x13/1,pk/a,s15,x11/8,s12,x14/10,pp/m,x11/15,s12,pf/j,x14/12,s3,x4/6,s3,x7/3,ph/p,x11/14,s1,x7/12,s8,x8/4,pi/a,x1/7,s6,x6/13,pc/b,x12/10,pp/m,x4/3,pc/f,x7/12,s10,pi/p,x13/15,s2,x2/7,s6,x5/13,s4,x1/6,pn/j,x9/13,pf/a,x8/2,s12,x13/3,s10,x4/7,s14,x10/2,s11,pi/h,x11/0,pa/d,x7/14,s14,x13/4,pm/k,x0/7,s9,x8/10,s8,x12/7,pl/o,x14/11,s9,pk/a,x8/13,pe/d,s8,x4/12,pi/m,x8/2,s13,ph/a,x12/6,pe/k,s12,x5/14,s8,x9/8,ph/o,s14,x5/15,pn/g,x4/6,s1,x3/8,s3,x15/11,pp/l,x10/8,pj/b,x9/5,pn/h,x8/6,pd/i,x5/4,s11,x8/12,s6,x11/1,s12,x14/0,s3,x12/7,pe/p,x6/1,pd/j,x15/0,s8,x9/8,pl/f,x4/13,s12,x2/0,pa/m,x12/9,s5,x8/3,pn/c,x12/10,s12,x6/0,s7,x9/7,pm/a,x12/0,s13,po/c,x2/8,s9,pi/e,s12,x9/14,s1,x12/7,s7,x10/5,pn/k,x0/6,s7,pg/m,x15/2,pb/c,x0/9,pe/j,s10,x8/2,s9,x0/14,pg/f,x6/12,pb/i,x15/7,pg/f,x12/14,s2,pn/a,x1/15,pg/p,x7/9,pj/h,x0/10,pd/f,x14/6,s1,x15/8,s15,x11/0,pg/p,x1/5,pi/k,x9/4,pc/l,s14,x8/13,s1,x7/2,s3,x4/8,pb/a,x2/3,s5,pl/e,x5/14,s9,x1/15,s13,x11/4,s9,x1/10,pi/j,s2,x6/4,pc/b,x15/8,s10,x2/6,pm/l,x11/1,s3,x14/10,s10,x0/9,s4,x4/6,s9,x2/8,s5,x3/15,pf/b,x12/4,po/c,x3/11,pf/g,x13/5,s12,x9/10,pn/b,x8/2,s10,x5/12,s6,x1/4,pi/a,x6/11,s14,x13/12,s1,x14/15,pl/g,x11/9,pk/i,x0/13,pc/n,s14,x6/8,pd/l,x10/1,s12,x4/11,s3,x8/6,pc/b,x12/4,s11,x10/11,s14,x3/13,pf/o,x10/1,pa/k,x0/4,s6,x13/11,s5,x3/6,pm/p,x9/4,s6,x11/14,s8,x12/3,pf/a,s11,x8/4,s7,x9/14,s2,x0/10,s11,x9/13,pl/n,x2/10,s6,x3/6,s9,x5/4,s9,x0/6,pb/k,x3/12,s7,x7/14,s1,x0/10,s7,x5/7,pg/j,x2/9,pl/k,x12/1,s13,x13/5,s3,x2/11,s2,x10/5,s13,x15/3,s13,x10/11,s8,x6/1,s13,pp/c,x11/15,ph/l,x1/5,pj/k,x0/13,s10,x12/15,s13,x14/10,s9,x7/13,s10,x14/8,pl/o,x5/0,pa/g,s11,x3/1,s11,x9/2,pi/e,x4/5,pb/k,x1/8,pn/m,x12/6,s1,x8/3,pe/d,x5/2,s13,x13/8,s9,x12/15,pk/n,x8/13,s3,x2/14,s2,x13/11,pd/e,x15/6,s14,x14/0,s7,x8/10,s15,po/p,x2/12,s14,pa/f,x5/11,s12,x10/3,s13,x6/9,pl/n,x10/7,po/b,x12/9,s13,x15/11,s5,x2/13,pl/k,x6/9,s3,x3/4,s5,x11/0,pi/m,x14/7,pf/j,x3/8,s13,x0/2,s8,x12/11,pn/d,s4,x2/14,s7,x10/7,pl/a,x3/6,s1,x2/0,s12,pd/p,s6,x5/14,pe/b,x1/4,pd/h,x3/10,pn/k,x11/9,po/f,x14/2,s15,x13/8,pb/c,x5/1,s5,x2/8,pp/g,x11/4,pj/h,s13,x15/14,pd/i,x4/8,s3,x6/10,pp/n,x14/1,s12,x11/15,s8,x0/10,s10,x12/15,s9,pg/c,x4/5,s14,x9/2,s7,pn/a,x3/7,pp/l,x9/10,s7,x5/11,pm/k,x0/10,pi/o,x15/6,s13,pa/e,x1/0,s10,x8/11,s14,x15/12,s5,pm/g,x5/9,pk/h,x6/12,pd/m,x11/4,s9,x5/8,pk/j,x4/2,s3,x5/11,pd/m,x0/6,s5,x1/4,s14,x8/0,s3,x15/6,s5,x0/11,pl/k,x3/1,pj/m,x6/14,s8,x13/0,s2,x6/15,s5,x0/12,s9,x9/4,s1,x8/1,ph/k,x15/4,pb/l,x9/14,pe/f,x4/1,s5,x5/11,pn/j,x4/15,pe/o,s2,x7/1,pi/a,x2/13,pg/b,x14/8,s14,x13/7,s10,x0/11,s11,x3/15,s6,x4/5,s8,x10/12,s7,x3/2,pp/n,s5,x7/1,pb/d,s3,x14/9,pl/h,x4/1,pc/i,s1,x2/12,pk/b,x9/13,s11,x8/0,ph/c,x9/3,s10,x2/6,s4,x1/14,s7,x12/15,s13,x4/1,s7,x0/5,pn/k,x12/2,s5,x10/9,s14,x0/2,s15,x14/7,pf/d,x15/6,s12,x5/7,s4,x2/12,s13,x15/10,s1,x5/14,s10,pc/k,x12/1,s6,x2/4,pg/l,x12/0,s15,x13/3,s4,x2/0,s7,x9/12,pd/c,x7/11,s3,x3/15,pn/l,x10/0,s13,x8/4,pk/j,x0/13,pi/c,x14/1,s11,x8/12,s10,x5/10,s7,x15/11,s14,x10/13,pd/e,x3/1,pc/p,x6/0,s15,x5/4,pl/k,x10/0,pe/j,x9/2,s5,x10/11,s14,x2/8,s8,x10/1,pc/n,x12/9,s2,x0/4,pl/o,x6/12,s14,x1/11,s8,x0/3,s11,x6/11,s1,x9/5,pi/p,x1/13,pj/n,x5/7,pl/e,x13/12,pd/c,x15/10,s7,x4/7,pm/h,s3,x2/9,pn/j,x1/0,pl/h,s6,x5/12,pi/g,x15/6,s3,x3/11,pf/k,x14/1,pi/c,x5/10,pp/d,x12/4,s15,x1/2,s15,x5/11,po/f,x13/7,pk/m,x12/11,s4,x6/4,s9,x15/5,s13,x0/10,ph/j,x11/8,s7,x3/2,s1,x5/14,pi/e,x1/12,s3,x2/5,pn/d,x3/11,s14,x5/12,pi/m,x10/0,s4,x15/13,pk/l,x10/8,s2,x5/12,s10,x1/10,s14,x5/12,s15,x6/15,s11,x0/1,s10,x2/15,pm/d,x0/14,s2,x1/13,pc/k,x9/4,s2,x13/8,s5,x15/14,pm/g,x2/7,pl/c,s10,x14/6,pp/i,x9/3,pl/e,x10/11,pk/d,x6/12,pj/l,x14/15,s12,x8/13,pg/a,s1,x4/9,pl/h,x14/2,s1,x7/8,po/g,x1/4,s12,x3/12,s12,x9/2,s3,x0/1,s7,x3/7,pp/i,x13/1,s6,pa/f,x2/12,s6,x1/3,s3,x11/4,s14,x12/5,pp/c,x6/4,ph/o,x3/0,pn/c,x2/13,pg/k,x11/5,s14,x12/4,pn/i,x8/5,s11,pp/b,x9/1,pn/m,s12,x4/13,s6,x7/1,pl/h,x11/12,s11,pm/a,s15,x2/6,s14,x12/0,s9,x5/3,pe/g,x1/10,pl/j,x5/4,s5,pk/p,x13/8,s7,x0/4,pb/g,x5/8,s7,x6/3,s12,x12/14,s9,x5/0,s6,x13/15,s2,x12/4,s6,x6/1,s10,x8/14,s14,x0/1,pk/d,x12/5,s5,x10/9,pm/h,s12,x15/2,po/p,x6/3,s14,x9/7,s5,x1/4,s13,x10/7,s2,x4/8,s12,x13/6,s10,x3/5,s15,x14/11,s13,x12/7,s2,x4/8,s9,x9/14,pf/e,x4/12,pp/m,x1/10,s14,x12/11,s12,pc/o,x5/3,s4,x0/8,s15,x9/13,pm/i,s7,x14/8,pn/p,x5/0,pk/a,x1/13,s6,x15/2,pe/n,s6,x9/6,s12,x14/3,pd/m,x1/8,s10,x6/10,s12,pg/a,x0/15,s3,x7/14,pn/i,s11,x15/4,s8,x9/7,pf/c,x5/0,s15,x12/14,s12,x3/8,s11,x1/11,pk/m,x5/14,s9,pi/g,x4/12,pc/l,x10/0,s13,x1/7,s12,x5/11,pm/g,x1/9,pn/j,x7/4,pi/p,x13/12,ph/l,x11/1,pb/n,x3/5,pa/m,x7/4,s11,x13/11,s14,pp/b,x6/7,s1,x5/12,pd/k,x3/14,s14,x2/11,pe/a,x10/6,s9,x11/8,s4,x7/6,s13,x8/15,s14,x0/10,s13,x3/1,pk/n,x6/0,s12,x5/9,pg/p,x2/12,s3,x9/0,s10,x4/7,s10,x8/10,s13,pd/i,s5,x11/15,s12,x13/14,s9,pk/f,s3,x2/3,s13,x10/9,ph/j,x13/8,pn/a,x3/2,s6,x12/8,s12,x9/3,pe/h,x10/11,pb/d,x13/12,pk/c,x15/6,s9,x7/10,pp/l,s9,pe/d,x9/12,s8,x8/13,s6,x9/1,s2,pk/l,x11/14,s10,x3/1,pp/i,s8,x4/14,s9,x2/15,s7,x13/0,pa/f,x3/6,s1,ph/m,x15/10,s9,x3/2,s1,x6/12,s14,x5/7,s8,x2/3,pp/a,x13/9,s8,x2/0,pb/f,x9/13,s13,x1/0,po/c,x5/14,s13,x4/2,s15,x13/10,s15,x4/3,s7,x6/0,s7,x1/12,pp/j,x9/7,s6,pd/f,x13/3,pb/k,x2/12,pl/n,x3/8,pm/h,x6/14,pk/f,x11/1,s11,x15/4,pc/l,s9,x3/5,s8,x4/7,s13,x6/13,po/b,x5/1,pf/k,s9,x11/3,s6,x15/6,s9,x11/8,s12,x12/1,pa/n,x9/8,pj/m,x0/2,pe/h,x5/15,pn/d,x1/10,s10,pp/m,s5,x14/9,pj/d,x2/5,pi/g,x0/7,s5,x2/15,s10,x12/11,s13,x1/4,s5,x8/6,s9,x12/1,s14,x2/13,s14,pp/b,x4/6,po/f,x15/8,pg/m,s13,x13/4,s3,x9/14,s15,x13/0,pk/b,x2/4,pe/f,s10,x6/1,pg/c,x4/5,s12,x0/10,s15,x11/5,s1,x15/3,s1,x12/1,pk/p,x5/0,s5,x7/10,s7,x1/3,pa/f,x4/13,s11,x1/2,po/i,x3/14,s9,x5/10,s12,x1/12,s6,x9/13,s5,pm/h,x2/5,pf/p,s4,x13/9,pn/i,x2/10,s11,x0/1,pf/k,x3/6,s2,x10/7,s3,x13/11,s11,x1/9,po/i,x11/4,pb/n,s7,x5/2,pa/f,x10/9,s6,x6/5,s15,x12/13,pc/p,x10/5,s7,x13/4,pk/i,s12,x8/1,s14,x3/13,pb/g,x0/1,s4,x4/15,s2,x1/0,pf/h,x9/7,pp/i,x12/15,pn/o,x11/13,s5,x14/9,s6,x11/12,pk/f,x4/3,po/e,x7/12,s1,x8/3,s3,pf/i,x4/7,pk/d,x12/10,s4,x1/14,pn/g,x9/6,pl/h,x1/5,s7,x4/11,pc/o,s2,x12/6,pn/b,x2/8,pm/e,s12,x3/14,pb/h,x5/4,pl/a,x6/2,pe/m,x9/7,s11,x4/14,s11,x0/13,pc/p,x3/15,pa/j,x1/13,pc/i,x14/11,s8,x3/9,pp/k,x15/1,s4,x11/7,pm/l,x14/3,pd/p,x1/8,s8,x10/12,pm/n,x14/7,s1,x11/8,s1,x10/12,s15,x2/4,pb/o,x13/8,pj/l,x3/9,pi/e,s5,x0/13,s12,x4/9,pk/l,s6,x3/10,pf/g,x2/6,s9,x3/11,s6,x7/5,pm/n,x12/9,s8,x8/15,s1,pc/h,s6,x14/9,s11,x4/10,pe/j,x0/12,s15,x4/14,s7,x11/15,s3,x5/14,pa/f,x4/9,pb/m,x5/10,s10,x12/3,po/g,x6/5,pk/n,x11/13,po/p,s1,x10/1,s5,pj/e,x13/0,s5,x6/11,s2,x10/7,s10,x14/3,s6,x10/11,pk/l,x7/15,s11,pb/o,x9/8,s9,x2/10,pf/p,x13/1,s11,x8/12,s4,x10/0,s13,x14/3,s13,x5/4,s8,x7/1,s6,pi/g,s11,x11/0,s4,x6/15,s7,x1/4,s5,x8/3,s13,x2/0,s2,pe/f,x7/14,s2,x4/13,pb/m,x14/15,s4,x9/12,s2,x14/11,s15,x6/15,s8,pk/i,s2,x13/4,pb/m,x2/12,pa/d,x1/14,pc/o,x6/13,pb/j,x1/8,s13,x15/10,pi/n,x2/9,s2,x10/15,s6,x8/4,s3,x2/5,pd/j,s15,x15/7,ph/e,x14/11,s5,x9/6,s10,x10/13,pa/g,x8/3,s7,x7/6,s5,x0/3,s6,x1/12,pe/c,x14/13,s3,x4/5,s1,x12/10,s6,x7/1,pi/f,x12/5,s5,x11/14,pn/o,x13/6,s3,x8/1,pl/d,s14,x13/7,s7,x6/8,pf/o,x2/11,s11,x1/10,s10,x12/9,pa/g,s7,x10/11,pn/l,x12/1,s15,x13/10,s11,x2/11,s6,x0/1,s13,x11/8,po/j,x0/5,pk/l,s14,x2/12,s13,pg/b,x8/13,pf/m,x1/6,s3,x14/12,s15,x5/9,s1,pn/o,x7/12,s6,x10/11,pl/e,x4/9,s10,pa/i,x15/5,s15,x6/4,pe/j,x5/0,s2,x7/6,s14,x9/8,pd/o,s8,x6/13,s5,x0/3,s6,x9/13,s8,x2/3,ph/m,x9/0,s13,x6/12,pe/o,x5/14,pn/j,x0/3,s1,x6/2,s9,x8/1,s15,x10/12,s1,x1/14,pd/h,x15/7,s6,x14/9,s7,x15/7,pp/n,x4/6,s12,x5/2,s2,pk/c,x14/0,s9,x9/10,s11,x13/2,s7,x15/6,s15,x14/1,s14,x11/12,s2,x15/13,pa/l,s11,x10/12,s13,x4/13,s7,x11/12,pc/g,x1/10,pd/e,x13/11,ph/l,x1/5,s5,x8/13,s10,x2/0,pd/j,x1/15,pe/p,x12/5,s11,pn/j,x0/15,po/b,x9/2,pg/a,x1/15,pj/e,x8/11,s8,x15/13,s8,x7/9,pd/i,x3/4,s2,x10/7,pf/p,x3/1,s14,x14/7,pk/n,s1,x13/8,s14,ph/f,x10/7,s13,x0/6,s5,x8/10,pg/j,x5/6,s3,pk/b,x4/14,s13,x9/0,pn/c,x4/15,po/e,x6/5,s1,x13/0,s15,x5/10,pl/i,x7/8,s5,x2/1,s10,x7/9,pm/a,x14/11,s13,x6/8,pd/j,x10/12,s10,x0/3,s8,x11/6,s3,x10/15,s8,x5/8,s2,x13/6,s9,pp/e,x9/10,s7,x11/14,pd/b,x13/5,pp/h,x3/4,s14,x1/14,pc/d,x9/10,pe/o,s4,x4/12,s3,x8/2,pi/p,x9/0,s10,x12/14,pk/j,x3/9,po/i,x0/12,s8,x9/11,pj/d,x8/14,s11,x15/4,po/l,s13,x2/9,s4,x11/15,s14,x2/5,s9,x15/4,pk/m,x13/10,pj/p,x0/8,pg/a,x10/13,pb/h,x2/0,s6,pl/m,x8/7,ph/f,x3/4,s6,x13/5,s10,x14/1,s5,x10/6,s15,x3/9,s1,x10/13,s11,pm/b,x7/3,s14,x15/13,pl/a,x2/10,pm/i,x13/8,pa/h,x15/11,s1,x10/8,pi/c,x7/2,pb/g,x15/9,pe/c,x1/3,s1,x11/14,pl/d,x0/10,s15,x3/1,s2,x6/15,ph/b,x7/12,pl/e,s11,x3/1,s10,x9/10,pf/o,x11/5,s7,x8/15,pc/k,x2/13,pa/h,x5/15,s15,x11/8,pc/b,x10/0,s9,x7/1,pg/h,x6/12,s10,x11/13,po/a,x12/1,s12,x9/11,pm/e,s2,x6/0,pa/g,x9/3,pb/n,s5,x7/1,pl/h,x11/2,s3,x5/3,pf/b,x15/0,s9,pn/e,x3/13,s10,x8/15,s15,x2/7,s15,x9/14,s11,x2/15,s12,x5/4,s5,x9/3,s5,x4/11,ph/a,x3/0,s5,x14/9,s15,pi/e,x12/13,s7,x3/0,pm/k,x12/2,s7,x6/7,s10,x2/8,po/p,x11/6,pf/h,s11,po/a,x12/13,pb/e,x14/0,s1,x13/15,pk/i,x1/9,pf/b,x13/11,s14,x14/2,pd/o,x5/15,s11,x3/1,pg/m,x10/13,s6,x14/6,pk/n,x5/9,s11,x1/13,s15,x10/15,pg/m,x3/6,s9,x15/4,s12,pn/f,x0/12,s13,x11/15,s11,x6/0,s6,pk/c,s10,x15/3,pp/n,x5/14,pb/m,x12/3,s1,x13/6,pp/c,x12/8,s10,x3/14,pa/l,x0/1,s2,x10/14,s15,x6/8,s14,x4/12,s5,x13/3,s3,x8/6,s1,x10/2,s11,x0/1,s14,x13/5,s4,x11/2,s12,x13/8,s10,x14/1,s1,x3/6,pn/j,x1/10,s7,x8/9,pc/b,x11/14,pk/p,s5,x2/10,ph/j,s2,x8/0,s6,x2/13,s3,pb/l,x7/4,po/c,x8/14,s14,x0/13,pl/h,x15/1,po/m,x9/12,ph/d,x1/4"""
test_input = "s1,x3/4,pe/b"
from functools import lru_cache
@lru_cache(maxsize=None)
def parse_moves(input, programs, debug=False):
"""Parse moves and returns final position."""
for action in input.split(','):
if action.startswith('s'):
spin = int(action[1:])
programs = programs[-spin:] + programs[:-spin]
if debug:
print(programs)
elif action.startswith('x'):
left, right = action[1:].split('/')
left, right = int(left), int(right)
first, second = programs[left], programs[right]
programs = list(programs)
programs[left], programs[right] = second, first
programs = "".join(programs)
if debug:
print(programs)
elif action.startswith('p'):
left, right = action[1:].split('/')
first, second = programs.index(left), programs.index(right)
programs = list(programs)
programs[first], programs[second] = programs[second], programs[first]
programs = "".join(programs)
if debug:
print(programs)
return programs
parse_moves(test_input, 'abcde')
parse_moves("x12/6,pk/e,s1,x5/7,s6", 'abcdefghijklmnop', debug=True)
parse_moves(input, 'abcdefghijklmnop')
Here comes brute force memoized.
len('pabcdmfkhijelgno')
import tqdm
current = 'abcdefghijklmnop'
for _ in tqdm.tqdm_notebook(range(1000000)):
current = parse_moves(input, current)
current
Noter to self: the brute-force method is dumb. It would have been easier to just see how the inputs and outputs are related and then to apply the sequence 1 -> 14, 2->3 etc. Repeatedly.
first = 'abcdefghijklmnop'
second = parse_moves(input, first)
second
mapping = {}
for ind, item in enumerate(first):
mapping[second.index(item)] = ind
mapping
mapping_tuple = list([mapping[key] for key in range(16)])
mapping_tuple
How long does the Python version take?
def apply_mapping_py(programs):
mapping = [3, 2, 12, 11, 7, 4, 9, 13, 8, 5, 15, 14, 10, 6, 1, 0]
return "".join([programs[index] for index in mapping])
apply_mapping_py(first) == second
%timeit apply_mapping_py(first)
What about numpy?
import numpy as np
We convert the string to an array of strings.
arr = np.array(list(first))
arr
%timeit arr[mapping_tuple]
With an array of the mapping?
mapping_arr = np.array(mapping_tuple)
%timeit arr[mapping_arr]
Okay this is really fast.
current = np.array(list(first))
for _ in tqdm.tqdm(range(100000000)):
current = arr[mapping_arr]
Cython maybe?
%load_ext cython
%%cython -a
from cpython cimport array
import array
def apply_mapping_cy(str programs):
cdef array.array mapping = array.array('i', [3, 2, 12, 11, 7, 4, 9, 13, 8, 5, 15, 14, 10, 6, 1, 0])
cdef str out = ""
for index in range(len(mapping)):
out += programs[mapping[index]]
#return "".join([programs[index] for index in mapping])
return out
%timeit apply_mapping_cy(first)
step = 3
spinlock = [0]
index = 0
for val in range(1, 2018):
index += step
index = index % len(spinlock)
spinlock.insert(index + 1, val)
index = index + 1
spinlock[index+1]
638
spinlock[index-3:index+4]
[1512, 1134, 151, 2017, 638, 1513, 851]
Let's try again with my own value:
step = 316
spinlock = [0]
index = 0
for val in range(1, 2018):
index += step
index = index % len(spinlock)
spinlock.insert(index + 1, val)
index = index + 1
spinlock[index+1]
180
import tqdm
step = 316
spinlock = [0]
spinlock_len = 1
index = 0
next_to_zero = None
for val in tqdm.tqdm_notebook(range(1, 50000001)):
index += step
index = index % spinlock_len
if index + 1 == 1:
next_to_zero = val
index = index + 1
spinlock_len += 1
next_to_zero
Failed to display Jupyter Widget of type HBox
.
If you're reading this message in the Jupyter Notebook or JupyterLab Notebook, it may mean that the widgets JavaScript is still loading. If this message persists, it likely means that the widgets JavaScript library is either not installed or not enabled. See the Jupyter Widgets Documentation for setup instructions.
If you're reading this message in another frontend (for example, a static rendering on GitHub or NBViewer), it may mean that your frontend doesn't currently support widgets.
13326437
input = """set i 31
set a 1
mul p 17
jgz p p
mul a 2
add i -1
jgz i -2
add a -1
set i 127
set p 826
mul p 8505
mod p a
mul p 129749
add p 12345
mod p a
set b p
mod b 10000
snd b
add i -1
jgz i -9
jgz a 3
rcv b
jgz b -1
set f 0
set i 126
rcv a
rcv b
set p a
mul p -1
add p b
jgz p 4
snd a
set a b
jgz 1 3
snd b
set f 1
add i -1
jgz i -11
snd a
jgz f -16
jgz a -19"""
test_input = """set a 1
add a 2
mul a a
mod a 5
snd a
set a 0
rcv a
jgz a -1
set a 1
jgz a -2"""
import re
from ipywidgets import interact
lines = test_input.split('\n')
@interact
def p(index=(0, len(lines) - 1)):
m = re.match("(set|add|mul|mod|snd|rcv|jgz) (\w)\s?([-\w\d]+)?", lines[index])
if m is not None:
print(lines[index])
print(m.groups())
else:
print("not parsed:", lines[index])
Failed to display Jupyter Widget of type interactive
.
If you're reading this message in the Jupyter Notebook or JupyterLab Notebook, it may mean that the widgets JavaScript is still loading. If this message persists, it likely means that the widgets JavaScript library is either not installed or not enabled. See the Jupyter Widgets Documentation for setup instructions.
If you're reading this message in another frontend (for example, a static rendering on GitHub or NBViewer), it may mean that your frontend doesn't currently support widgets.
def isdigit(s):
try:
int(s)
is_dig = True
except ValueError:
is_dig = False
return is_dig
isdigit("-1")
True
"-1".isdigit()
False
"-1".isnumeric()
False
from collections import defaultdict
def until_recovered(assembly, debug=False):
get_val = lambda s, registers: int(s) if isdigit(s) else registers[s]
registers = defaultdict(int)
played = []
lines = assembly.split('\n')
index = 0
while index > -1 and index < len(lines):
jump = False
line = lines[index]
m = re.match("(set|add|mul|mod|snd|rcv|jgz) (\w)\s?([-\w\d]+)?", line)
assert m is not None
instruction, arg1, arg2 = m.groups()
if instruction == 'set':
registers[arg1] = get_val(arg2, registers)
elif instruction == 'add':
registers[arg1] += get_val(arg2, registers)
elif instruction == 'mul':
registers[arg1] *= get_val(arg2, registers)
elif instruction == 'mod':
registers[arg1] = get_val(arg1, registers) % get_val(arg2, registers)
elif instruction == 'snd':
played.append(get_val(arg1, registers))
elif instruction == 'rcv':
if get_val(arg1, registers) != 0:
recovered = played[-1]
print("recovered", recovered)
return recovered
elif instruction == 'jgz':
if get_val(arg1, registers) > 0:
jump = True
index += get_val(arg2, registers)
else:
break
if debug:
print(registers, index)
if not jump:
index += 1
until_recovered(assembly=test_input)
recovered 4
4
until_recovered(assembly=input)
recovered 7071
7071
Now I need two parallel executions of the program. One has to wait for the other.
get_val = lambda s, registers: int(s) if isdigit(s) else registers[s]
class Program:
def __init__(self, program_id, assembly):
self.registers = defaultdict(int)
self.registers['p'] = program_id
self.lines = assembly.split('\n')
self.index = 0
self.sent = []
self.received = []
def step(self, debug=False):
jump = False
line = self.lines[self.index]
m = re.match("(set|add|mul|mod|snd|rcv|jgz) (\w)\s?([-\w\d]+)?", line)
assert m is not None
instruction, arg1, arg2 = m.groups()
if instruction == 'set':
self.registers[arg1] = get_val(arg2, self.registers)
elif instruction == 'add':
self.registers[arg1] += get_val(arg2, self.registers)
elif instruction == 'mul':
self.registers[arg1] *= get_val(arg2, self.registers)
elif instruction == 'mod':
self.registers[arg1] = get_val(arg1, self.registers) % get_val(arg2, self.registers)
elif instruction == 'snd':
self.sent.append(get_val(arg1, self.registers))
elif instruction == 'rcv':
if len(self.received) > 0:
self.registers[arg1] = self.received[0]
self.received = self.received[1:]
else:
return None
elif instruction == 'jgz':
if get_val(arg1, self.registers) > 0:
jump = True
self.index += get_val(arg2, self.registers)
if debug:
print(self.registers, self.index)
if not jump:
self.index += 1
return 0
test_input2 = """snd 1
snd 2
snd p
rcv a
rcv b
rcv c
rcv d"""
program0 = Program(0, assembly=test_input2)
program1 = Program(1, assembly=test_input2)
program1_counter = 0
while True:
data_was_sent = False
retval1 = 0
while retval1 is not None:
retval1 = program0.step()
if len(program0.sent) > 0:
program1.received = program0.sent[:]
program0.sent.clear()
data_was_sent = True
retval2 = 0
while retval2 is not None:
retval2 = program1.step()
if len(program1.sent) > 0:
program1_counter += len(program1.sent)
program0.received = program1.sent[:]
program1.sent.clear()
data_was_sent = True
if not data_was_sent:
break
program1_counter
3
program0 = Program(0, assembly=input)
program1 = Program(1, assembly=input)
program1_counter = 0
while True:
data_was_sent = False
retval1 = 0
while retval1 is not None:
retval1 = program0.step()
if len(program0.sent) > 0:
program1.received = program0.sent[:]
program0.sent.clear()
data_was_sent = True
retval2 = 0
while retval2 is not None:
retval2 = program1.step()
if len(program1.sent) > 0:
program1_counter += len(program1.sent)
program0.received = program1.sent[:]
program1.sent.clear()
data_was_sent = True
if not data_was_sent:
break
program1_counter
8001
input = """
|
+-------+ +---------------------+ +-----------+ +---------------------------------------+ | +-+
| | | | | | | | | | |
| | +---------------|---------------------|-----------------------------------------------------------------------------+ +---------------------+ | |
| | | | | | | | | | | | | | |
| +-----------------+ +---+ +-----------+ | | | | +-------------+ | | | | | |
| | | | | | | | | | | | | | | | | | |
| | | +-|---------|-----------|---------+ +-----------+ | +-----------------------------|-------+ | | | | | |
| | | | | | | | | | | | | | | | | | | | |
| | | | | +---+ | +-------------------------------|-------------------------------------|-----------------------------+ | | | +-------------+ |
| | | | | | | | | | | | | | | | | | | | |
| | | | | | | +-|-----|---|---------------------------|-----------+ | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | +-----|-----+ | | | +-------|---|-------+ | | | | |
| | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | +-|-------------------------+ +---------|-------|---------------------------------------|---------|-------------------|-+ +-+ |
| | | | | | | | | | | | | | | | | | | | | | | | |
| | | +-|-------------|-----|-----------------------+ | | | | | | | | | | | +-|-+ |
| | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | +-----|-------|-------------|-------------------|---------+ | | +-------------|---------|I|-------------------------+ | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | +-----------+ | | +-----|------C------------------------------------+ | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | +-------|---------|-----|---------------|-|-------------|---------+ | | | +---|-------+ | | +---------|-----+ | | +-+ | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | +-------|-|-----|---|-----|---------------------|---------|---------|-------------|---+ | | | | | | | | | | | | +---+ | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | +-------------------|-|---------------------+ | +-----------------------|-----------------|---|---------------------|-----------------------------------------|-|-------|-+ | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | +---------------|---------|N--------------|-----+ | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | +-----------+ | | | +---|-----|-----------------|---+ | | | +-|---|-------------------|---------|---------|-----|---|-----------------|-|-|---+ | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | +-------|-|---+ | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | +-+ | | | | | | | +-------------------|---------+ | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+---|-------|---------------|---|-|-----------+ | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | +---|-+ | | | | | | +-+ | | | +-+ | +-------------------------|-----------------------|-----------------|---+ | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | +-------|-------------|---------------|-------------|-------------------|-------------------+ | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | +-------|-----|-------+ | | | | | | | | | | | | | | | | | | | | | | | | | +-+ |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | +---------|---------------|---------|-----------|-----------------------------|-------------|---------|---------------|-|-----------|---+ |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | +-----|-|-----|-----|-----|-------+ | | | | | | | | +-----------------------+ | | | | | | | | | +-------+ |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | +-----------------------------------|---|-------------|---------|-----|-------------------------------|-+ +-+ |
| | | | | | | | | | | | | | | | | | | | | | O | | | | | | | | | | | | | |
| | | | +-------|-------|-----------|-------|-------------|-----|---|-|-------|---------|---|-------------------|-----------------------------|-----------------+ | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | +-+ | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | +---|-|-----|-----|-|--R|-------|-------------|---|---------------|-------------|-------|-|---------|---------|---|---------|---------|-----------------|-|-----------|-+ |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | +-----+ | | | | | | | | | | | | | | | | +---------------------------|-------------------|-----------------------+ | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | +-----------|-------|-|-------|-------|-----------|-------|-------|-------------|---------------------------------+ | +-------+ | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | +-----|-------|---------|-----------|---|-----|-------------|-|---------------------------------+ | | | | | | | +-----|-------|---+ | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | +---------------|-------|S------|---|-----+ | | | | | | | | | | +-------|---------|---------|---------|---|-------+ +---------|-------------+ | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | +-----------------|-----|-------|-------------|-----|---|---|-----|-|-----------|-------|-|-----|---|-|-+ | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | +-------------|-------------|-|---|-------|-------------|---------|-------------------------------|-------|-------------|-------+ | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| +-|---|-|-----|-|---------------|-------|-----------|-------------------|-------------|-|---------------------|-----|---|-|-------|-------|---|---------+ | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | +---------|-----|-|-------+ | | | | | | | | | | | | | | | +-------------|-----------------|-----+ | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | +-|---|---|---------|-------|-------------------------------------------------|---|-----+ | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | +-|-|-----------|-------------------+ | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | +---+ | | | | | | | +-+ | | | | +-+ +---|-|---|-------|-----|-|-------------|-----------|---|---------|-|-------|-----|---------|-------------|-+
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-------|-------|-----+
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+---|-|-|---|-------|-|-----|---------|-----|-----|---|---+ | | | | | | | +-|-|---|-------|-----|---|-----------|---+ | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | +-------|-----|-|-----|-----|---|-----------|-------------------|-|---|-----|-----|-+ | | | | | | | | +-----------|---|-------+ | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| +-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | +-----|-------|-|---|-|-+ | +-----|---------------------|-----|---|-----|-----|---|-|---|-------------------------+ | | | +-------|---|-|-|---|-----+ | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | +-------------------|---------------------------|---------+ +---|-----------+ +-|-+ | +-------|-+ | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | +---------------|---------------------------------------------+ | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | +---|---|---|-----------------|-----|-----------|-|---------------|-|---+ | | | | | +-|-------+
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+---|-----|---|-|-----|-|-----|-----|--U--------|---|-----------------------+ | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | +-----------+ | | | | | | | | | | | | | | | +-----+ | +---|-+ | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | +-----|---|-|---------|---|-|-|-+ | | | | | | | | | | | | | +---+ | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | +-----------------+ | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | +---|-|D--|-------+ +---------|---|---------|-----|-----|---------|---|-|---+ | | | | | | +-|---------------|---------------|-|---------|-|---|-------+ |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | +---|---|-|-|-------------------|-----------------------+ | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | +---|-------|---+ +-------|-|---|---------|-----+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | +---|-----|---+ | | | | | +---------------------------------------|-|-|-|-|-|---|-----------------|-----|-------------|---------------------------+ | | +-----|-----|-------+ |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | +---|-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | +-------------|---------|---|-------|---|-|-|---|---|-----------------|-----|---------|-----------------------|-------|---|-----|-------|---|-+ |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | +---|-|---------|-----------------|---------|---------|-|-----+ | | | | | | | | | | | | | | | | | | | | +-----------|-----+ |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | +-|-|---|-|-----+ | | | | +-----------|-------|---|---|-+ +-------|-----|-----|-+ |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | +---------------|---|---------|-|-----|-|-|-------------------|---------------|---|---------------|-|-|---|-------|-----+ | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | +-|-|-------------------|-----|---------------+ +-----------|-|---------|-------|---------|---|-----|-+ |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | +-----------+ | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | +---------|---|-|---|---------+ | | | | | | +-------|-|---------------|---------------------------|---|-----------------|-----+ | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| +-------+ | | | | | | | | +---------------------------|-------------|---|---------------|---------------------------------------------------|---------------|-|-----------------|-+ |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | +-----|-|---|-----------------------------------------|-------------------|-|-------------------+ | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | +-|---------------|-------------|---|-------|-|---|-----|---+
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | +-------|---|-|---------------------------|---|---------------|---|---------|-----------|-------------------------|---------|-----|-+ | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | +---|-----------|-------------+ | | | | | | | | | | | | | | | | +-------------|-------------|---------+ | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | +-----|---+ | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | +-|-----|---|---------------------|---------------|-|-|---------|---|-|---|---------------------------|-----------------------|-----------------|-------------|-|-+ | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | +-----------------------------------|-+ | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | +---------+ | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | +---------------------------------|---------------+ | | +---------------|-----------------------|-----|-|---------|---------------|-----------|-|-+
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| +-------------|-|-----------------------+ | +-----|---------|-----------------|-----|-+ | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | +---|-|-------|-|-------------------------|-----|-------------|-----------|---|-----+ | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | +-----------------|-----------|-------------------|-|---------------|---------|-|-----------------|-|---------|---|-----+ | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | +-----|-----------|-|---------|---|-----|-+ | | +-------|---------|---------------------------------------|-----|---+ | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| +-----|-------+ | +---|---+ | | | | | | | | | | | | | | +-|---------------|-------|-------------------------|-----|-|---+ | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| +-----|-----------------|-|---|-----------------|---------|---------|-------------|---|---------------|-|-------|-----|-----------|-----|-------------|-----------|---|-----+ | | +-----+ | +-+
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | +-------|-+ +-|-+ | | | | | | | | | | | | | | | | | | | | | | | | +-+ | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | +-|-----------------------------------------|-------------|-+ +-|-------------+ | | | | | | | +-------------|-----------|-----|---|---|-|---|-|-|---|---+
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| +-------------------------|-----------------------|---------|-----------|-|-|-----------|-+ | | | | +-----------|-|-----------------------------------------|---|-|---|---|-|---|-|-|---+ |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | +---------|-----|-|---+ | | | | | +-----------|-------------|-------|-------------|---------|-|---------+ | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | +---------------------|-----|-------------------|---------|-----------|---------------|-----|---------|---------------+ | | | +-----+ | | | | | | | +-----|-----+ |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+-+ | +---------------+ +---------------------------------------------|---+ | | | | | | | | | | | +-------|---------------------------+ +-------+ | +-+ | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+-----+ +---------------------------------------------------|-----------+ | | +-------------------|-------|---------+ | | | | | | | | +-------|---+ | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| +-----+ +-----------|-|-----------------|-------------------+ | | +---|-------------+ +-----------------|---------------|-------------------+ | | +-+ | +-+ |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+-+ +-----------|---------------|-------------------+ | | | +---|---|-------------------|-|-----------|---|-----------|-+ | | | | | | | | +-+
| | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| +-------------|-----------------|-----------------------------------------------------|-|---|---|-------|-|-------------|---------------------------------|---------|---|---------------|-+ |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | +-----------|-----------------|---------------------------|-----------------------------------|---|---|-|-|-------------------+ | | | | | | | +-+ | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | +-------|---|---|-+ | +-+ | | +---------|---|---+ | +-------+ | | |
| | | | | | | | | | | | | | | | | | | | | | |
| | | +-------------------------------------------------------------|---|-------|-----------------------|-----+ +-+ | | | +-----------+ |
| | | | | | | | | | | | | | | | |
+-|-------------------------------------+ | +-----+ +---+ +---+ +---------------+ +-+ +-------------|---------------------------+ |
| | | | | | | | | | |
| | +-------------+ +---+ +---------------------------------------------------------------------------------------|---------------|-------------|-------------+ |
| | | | | | | | |
+-----------------------------------------------------------------------------------------------------------------------------------------------+ K-+ +-------------+ |
| | | |
+---+ +-------------------------------------------------------------------------------------------------------------------------------------------------------+
"""
test_input = \
"""
|
| +--+
A | C
F---|----E|--+
| | | D
+B-+ +--+ """
Idea: change directions only when encountering a "+".
def get_symbol(lines, rc_coords):
return lines[rc_coords[0]][rc_coords[1]]
def travel(input, start):
lines = input.split("\n")[1:]
current = start
direction = (1, 0)
steps = 0
while True:
if get_symbol(lines, current) == '+':
if direction in [(1, 0), (-1, 0)]:
# new direction should be horizontal
try:
if get_symbol(lines, (current[0], current[1] + 1)) != ' ':
direction = (0, 1)
else:
direction = (0, -1)
except IndexError:
direction = (0, -1)
elif direction in [(0, 1), (0, -1)]:
# new direction should be vertical
try:
if get_symbol(lines, (current[0] +1, current[1])) != ' ':
direction = (1, 0)
else:
direction = (-1, 0)
except IndexError:
direction = (-1, 0)
current = (current[0] + direction[0], current[1] + direction[1])
steps += 1
if current[0] >= len(lines) or current[0] < 0:
break
elif current[1] >= len(lines[0]) or current[1] < 0:
break
elif get_symbol(lines, current) == ' ':
break
if get_symbol(lines, current) not in '|-+':
print(get_symbol(lines, current), end='')
print()
print(steps)
travel(test_input, start=(0, 5))
ABCDEF 38
lines = input.split("\n")[1:]
lines[0].index('|')
163
travel(input, start=(0, 163))
UICRNSDOK 16064
input = """p=<-3770,-455,1749>, v=<-4,-77,53>, a=<11,7,-9>
p=<1430,195,-903>, v=<-123,60,20>, a=<5,-5,1>
p=<-2964,-3029,2594>, v=<-8,157,7>, a=<9,-3,-8>
p=<-6383,-4277,-3529>, v=<29,70,67>, a=<16,7,5>
p=<3458,4134,-3451>, v=<-12,-132,64>, a=<-9,-2,5>
p=<-702,5382,6208>, v=<-68,-45,-132>, a=<7,-12,-8>
p=<2353,-1261,-747>, v=<-37,8,-40>, a=<-4,3,5>
p=<481,6074,-5911>, v=<-64,-51,159>, a=<3,-9,2>
p=<-3084,-2792,1033>, v=<-29,43,15>, a=<8,3,-3>
p=<-325,1951,-7399>, v=<-86,50,47>, a=<6,-7,12>
p=<4170,-2482,2893>, v=<-135,-63,-125>, a=<0,9,2>
p=<8851,1021,-4299>, v=<-30,-80,-69>, a=<-16,3,13>
p=<543,6446,4505>, v=<62,-175,-1>, a=<-5,-2,-9>
p=<-263,-715,-7368>, v=<56,-8,142>, a=<-3,2,6>
p=<4127,-3461,1895>, v=<-62,-20,-9>, a=<-6,10,-4>
p=<5681,1033,-3439>, v=<13,-79,22>, a=<-15,3,7>
p=<767,543,-5161>, v=<0,40,-47>, a=<-2,-4,16>
p=<585,-2411,1951>, v=<-95,-14,-69>, a=<5,7,0>
p=<4505,-2033,6515>, v=<-148,-42,-116>, a=<-1,8,-8>
p=<991,-3405,1951>, v=<-37,94,-69>, a=<0,2,0>
p=<1215,-3055,-3957>, v=<129,-20,55>, a=<-12,9,6>
p=<-2495,6955,215>, v=<44,-131,22>, a=<3,-8,-2>
p=<1285,3567,-2123>, v=<141,-68,-25>, a=<-13,-4,7>
p=<2188,2627,722>, v=<-47,11,-5>, a=<-1,-5,-1>
p=<-5326,5738,-4021>, v=<104,7,82>, a=<3,-10,2>
p=<-2181,6826,-621>, v=<64,-60,17>, a=<0,-8,0>
p=<5758,-7199,8049>, v=<58,-50,-168>, a=<-13,15,-4>
p=<1117,4157,1283>, v=<37,-139,66>, a=<-4,1,-6>
p=<-14268,1301,-3341>, v=<122,-125,62>, a=<17,5,2>
p=<-1110,-2830,-1607>, v=<120,14,-59>, a=<-5,4,6>
p=<-736,-4513,5958>, v=<39,11,-159>, a=<-1,7,-1>
p=<3174,2117,-13218>, v=<-6,26,160>, a=<-5,-5,13>
p=<13952,-4292,450>, v=<-148,22,3>, a=<-15,6,-1>
p=<-6015,3481,5912>, v=<77,-68,-198>, a=<8,-3,0>
p=<6270,1846,152>, v=<-38,2,25>, a=<-11,-4,-2>
p=<3600,-1784,-3433>, v=<-42,61,67>, a=<-5,0,3>
p=<5985,-4319,5207>, v=<-75,6,27>, a=<-8,9,-13>
p=<-5775,2866,-733>, v=<-55,-125,8>, a=<16,2,1>
p=<1020,2536,-598>, v=<13,-114,19>, a=<-3,2,0>
p=<3555,5322,-2095>, v=<-41,-30,75>, a=<-6,-11,0>
p=<-1177,4790,1699>, v=<41,-11,70>, a=<0,-11,-9>
p=<-3193,-3078,-3243>, v=<113,-49,0>, a=<0,11,8>
p=<3639,-768,1307>, v=<-44,-59,26>, a=<-6,6,-5>
p=<3107,1458,-3733>, v=<-112,50,-26>, a=<0,-7,11>
p=<3415,-1552,-1983>, v=<-123,-31,-16>, a=<0,6,6>
p=<1651,-1118,-5777>, v=<-60,-3,47>, a=<0,3,11>
p=<-3529,1500,1867>, v=<-20,-111,35>, a=<10,4,-7>
p=<-3865,-4044,-4405>, v=<137,145,56>, a=<0,0,7>
p=<5263,-2294,-6225>, v=<-44,39,121>, a=<-10,3,7>
p=<-721,-1274,2648>, v=<40,56,-29>, a=<-1,-1,-3>
p=<4130,904,2813>, v=<-56,-61,34>, a=<-4,2,-7>
p=<1160,3643,-3391>, v=<-34,-42,69>, a=<0,-4,2>
p=<-2272,-4178,3374>, v=<19,25,-102>, a=<3,6,0>
p=<5516,-4904,-520>, v=<-98,13,-120>, a=<-4,8,8>
p=<1127,1663,4034>, v=<1,-101,-37>, a=<-2,3,-5>
p=<-358,-2396,-1246>, v=<-22,90,-30>, a=<2,-1,4>
p=<3965,-6356,-4645>, v=<0,6,-148>, a=<-7,11,17>
p=<-2731,11,9>, v=<225,-62,-43>, a=<9,11,8>
p=<454,1126,-286>, v=<-99,-69,47>, a=<10,-8,-3>
p=<509,-819,109>, v=<0,98,2>, a=<-9,-3,-2>
p=<1194,771,14>, v=<-74,-61,-16>, a=<-8,-3,3>
p=<2545,1808,1212>, v=<-183,-93,17>, a=<5,0,-8>
p=<493,-1764,-1809>, v=<-15,-75,86>, a=<-1,17,1>
p=<-4751,1143,965>, v=<91,52,-30>, a=<16,-11,-2>
p=<1272,1295,1098>, v=<-56,-66,-37>, a=<-1,0,-2>
p=<2786,-538,-770>, v=<-7,-3,-14>, a=<-4,1,2>
p=<-329,-1623,-2065>, v=<10,-98,-31>, a=<0,8,5>
p=<-1554,3522,-9275>, v=<171,-11,13>, a=<-7,-5,14>
p=<-259,2717,-385>, v=<-28,12,29>, a=<2,-5,-1>
p=<6601,-3303,1645>, v=<-62,-32,79>, a=<-7,7,-7>
p=<8316,2927,6405>, v=<-3,-12,-147>, a=<-13,-4,-2>
p=<4781,2647,14805>, v=<-28,-94,-81>, a=<-6,1,-19>
p=<-5614,-3618,-560>, v=<107,13,-56>, a=<3,5,4>
p=<3346,1597,5880>, v=<-59,170,48>, a=<-2,-12,-12>
p=<-749,-654,1454>, v=<33,63,-141>, a=<7,0,-1>
p=<-49,-659,-241>, v=<-15,3,-21>, a=<3,11,8>
p=<-234,-674,1524>, v=<9,65,-137>, a=<2,0,-3>
p=<-179,306,749>, v=<42,-44,-65>, a=<-5,2,-2>
p=<-2410,-1167,-3859>, v=<130,55,7>, a=<-3,-1,9>
p=<-6946,-2833,-289>, v=<2,100,-77>, a=<17,0,6>
p=<1860,1927,103>, v=<-66,17,112>, a=<0,-6,-8>
p=<656,5651,-5063>, v=<-23,-145,50>, a=<0,-4,9>
p=<1314,-187,-2865>, v=<113,-38,-14>, a=<-11,3,8>
p=<1986,-1027,-2207>, v=<-56,-8,6>, a=<-1,3,5>
p=<-2914,1059,-779>, v=<61,-39,13>, a=<3,0,1>
p=<-1458,-705,173>, v=<9,53,66>, a=<3,-2,-5>
p=<-8834,7793,-285>, v=<116,-10,8>, a=<6,-10,0>
p=<-75,-5336,5073>, v=<22,4,-16>, a=<-1,7,-6>
p=<-1842,478,3819>, v=<88,85,95>, a=<-2,-5,-10>
p=<3269,4126,608>, v=<12,-50,4>, a=<-5,-3,-1>
p=<-1500,-1042,-1729>, v=<40,8,46>, a=<0,1,0>
p=<-4996,4563,3629>, v=<54,-81,22>, a=<4,-2,-6>
p=<-2051,6938,-2299>, v=<-4,-46,61>, a=<3,-7,0>
p=<-1329,3670,4066>, v=<55,1,-87>, a=<-1,-5,-1>
p=<-992,-1369,120>, v=<-12,62,112>, a=<5,0,-10>
p=<-3038,1557,780>, v=<58,-25,13>, a=<7,-4,-4>
p=<878,1106,-4698>, v=<64,-39,147>, a=<-9,-1,6>
p=<-915,-2502,-2355>, v=<-27,125,75>, a=<6,-1,3>
p=<-750,292,1616>, v=<0,-94,-25>, a=<3,7,-4>
p=<1791,853,-727>, v=<-127,-39,-68>, a=<4,0,9>
p=<-860,3548,3222>, v=<51,-12,-29>, a=<-1,-13,-10>
p=<-3016,1557,5037>, v=<126,67,-123>, a=<1,-12,-9>
p=<-992,633,208>, v=<103,40,108>, a=<-5,-6,-10>
p=<-2863,-3533,-1419>, v=<114,-118,78>, a=<-1,16,-2>
p=<-7126,-923,-752>, v=<36,2,-5>, a=<14,2,2>
p=<-456,2383,-4667>, v=<-14,-82,25>, a=<2,0,9>
p=<-4835,6095,2873>, v=<2,-75,-100>, a=<11,-9,0>
p=<4619,-4432,-85>, v=<-9,18,47>, a=<-10,9,-3>
p=<3053,904,-2666>, v=<-105,-136,46>, a=<0,7,3>
p=<-2544,962,-3971>, v=<-2,-3,76>, a=<6,-2,4>
p=<-166,1832,1887>, v=<51,-18,-126>, a=<-3,-3,4>
p=<-2747,-1503,872>, v=<65,-23,44>, a=<2,5,-5>
p=<501,208,-2637>, v=<-17,-7,60>, a=<0,0,2>
p=<-140,-1564,228>, v=<-74,92,-2>, a=<12,4,-2>
p=<-413,2232,-708>, v=<122,-130,14>, a=<-13,-6,6>
p=<1381,724,1905>, v=<-16,-35,-54>, a=<-13,-3,-13>
p=<-1160,-3258,578>, v=<-35,67,-73>, a=<8,8,4>
p=<3838,1131,2216>, v=<-97,1,-96>, a=<-8,-5,-1>
p=<-1496,-486,-1942>, v=<-8,-10,47>, a=<7,3,4>
p=<60,301,-439>, v=<-6,-36,13>, a=<0,2,1>
p=<-1310,1011,2191>, v=<31,-61,-171>, a=<3,1,6>
p=<1380,1891,-939>, v=<-30,-21,101>, a=<-4,-7,-5>
p=<-380,2051,1>, v=<-5,-92,-9>, a=<2,-1,1>
p=<760,-3939,-1019>, v=<-104,92,105>, a=<6,10,-5>
p=<-2230,-4779,811>, v=<35,218,24>, a=<7,2,-6>
p=<740,-2819,1341>, v=<2,-6,-13>, a=<-4,14,-5>
p=<8674,1471,562>, v=<-215,-112,-51>, a=<-4,4,2>
p=<10069,9376,4871>, v=<-116,-175,2>, a=<-13,-8,-10>
p=<2288,1130,-2724>, v=<-41,59,23>, a=<-2,-6,4>
p=<-2160,-2895,-1731>, v=<70,125,-8>, a=<0,-2,4>
p=<2800,-601,3074>, v=<102,-13,-115>, a=<-12,2,1>
p=<2893,-2554,5089>, v=<-109,18,-100>, a=<1,4,-4>
p=<-7802,5103,-1359>, v=<44,-117,-100>, a=<13,-3,9>
p=<2366,-2430,625>, v=<84,62,-100>, a=<-10,1,5>
p=<1715,112,7600>, v=<-87,-20,-149>, a=<2,1,-6>
p=<-2439,2871,-987>, v=<-49,3,176>, a=<8,-6,-9>
p=<-2594,6436,-5079>, v=<4,-160,-60>, a=<5,-3,14>
p=<-1181,742,-1682>, v=<-49,5,-3>, a=<6,-2,4>
p=<-2718,-476,638>, v=<79,62,22>, a=<1,-3,-3>
p=<5199,-4681,0>, v=<1,87,29>, a=<-12,5,-2>
p=<2937,-2448,-1740>, v=<-116,115,-46>, a=<1,-2,7>
p=<588,-911,3712>, v=<-65,-28,-84>, a=<3,4,-3>
p=<762,-911,-725>, v=<64,32,-66>, a=<-6,0,6>
p=<743,-2261,753>, v=<-140,54,36>, a=<9,4,-6>
p=<963,2480,-4505>, v=<80,-12,114>, a=<-11,-9,8>
p=<-1325,-5495,-1997>, v=<23,40,-23>, a=<3,18,10>
p=<2074,742,-4241>, v=<41,-94,148>, a=<-12,5,4>
p=<-2722,1655,-1711>, v=<6,-9,56>, a=<10,-6,2>
p=<166,-634,-1439>, v=<46,28,87>, a=<-9,3,5>
p=<1102,-2008,211>, v=<-97,162,-57>, a=<1,0,6>
p=<358,86,739>, v=<-35,7,-49>, a=<1,-3,-2>
p=<958,14,-1175>, v=<19,0,65>, a=<-15,-1,5>
p=<1036,-1708,1081>, v=<-85,98,-45>, a=<0,6,-7>
p=<190,-208,205>, v=<-8,12,28>, a=<-1,0,-7>
p=<1018,-412,91>, v=<-77,29,-21>, a=<-1,0,2>
p=<1168,566,-1685>, v=<8,-85,88>, a=<-16,5,8>
p=<-254,-1354,1465>, v=<146,36,-103>, a=<-19,11,-3>
p=<-5599,-2221,740>, v=<70,-8,-20>, a=<5,4,0>
p=<3536,-6631,-1115>, v=<-11,64,-39>, a=<-5,7,4>
p=<-804,-5406,6830>, v=<-13,-43,-14>, a=<2,11,-10>
p=<-5004,1069,-3880>, v=<35,6,76>, a=<6,-2,2>
p=<-6439,3344,-2130>, v=<22,-23,-118>, a=<9,-4,10>
p=<-11864,-8801,-4055>, v=<141,18,27>, a=<11,13,5>
p=<6301,4429,2805>, v=<0,108,-7>, a=<-10,-13,-4>
p=<-3359,-4811,-11895>, v=<6,120,53>, a=<5,1,16>
p=<-6474,1279,-4265>, v=<-49,-54,-3>, a=<13,1,7>
p=<7421,-4076,4380>, v=<-122,27,20>, a=<-5,5,-8>
p=<229,10,429>, v=<62,-8,43>, a=<-11,1,-11>
p=<60,-120,338>, v=<5,51,64>, a=<-1,-6,-13>
p=<463,-1017,-1001>, v=<-26,-41,76>, a=<-1,17,0>
p=<-954,2298,-975>, v=<76,-79,109>, a=<0,-14,-5>
p=<-2475,1180,-819>, v=<144,-98,-1>, a=<7,1,9>
p=<-889,1648,-546>, v=<85,-78,55>, a=<-2,-7,-2>
p=<151,2064,1495>, v=<-86,-117,-109>, a=<11,-6,-1>
p=<-2241,10,936>, v=<140,-29,-80>, a=<5,4,1>
p=<21,-133,611>, v=<22,-39,-62>, a=<-3,7,2>
p=<-3131,229,765>, v=<47,-52,-62>, a=<15,4,2>
p=<1629,-893,3145>, v=<-80,50,-94>, a=<-2,0,-10>
p=<1340,1912,-1377>, v=<-27,-88,64>, a=<-6,-3,2>
p=<3040,1963,2261>, v=<-118,-19,-96>, a=<-7,-11,-4>
p=<-1193,195,-1649>, v=<59,-50,-64>, a=<1,4,18>
p=<-487,-1545,572>, v=<65,64,-27>, a=<-4,3,-1>
p=<975,138,-40>, v=<-12,19,27>, a=<-5,-3,-3>
p=<1204,154,-678>, v=<-119,-22,66>, a=<-1,1,0>
p=<64,1744,462>, v=<-27,-82,29>, a=<3,-17,-14>
p=<-536,1289,897>, v=<22,-119,-20>, a=<5,-2,-13>
p=<-349,-2111,-1389>, v=<39,101,51>, a=<-2,1,2>
p=<-349,3988,112>, v=<59,-130,-48>, a=<-4,-8,4>
p=<392,-933,-439>, v=<-20,19,31>, a=<0,3,-1>
p=<-919,2297,-1522>, v=<-11,-71,58>, a=<6,-5,2>
p=<1551,-3821,758>, v=<-91,21,48>, a=<1,18,-9>
p=<1171,3475,1860>, v=<-11,-113,-90>, a=<-5,-7,-1>
p=<2748,-819,1955>, v=<-44,63,45>, a=<-10,-2,-15>
p=<-15077,2445,7629>, v=<66,-67,22>, a=<18,0,-12>
p=<2017,6737,155>, v=<-35,-145,-61>, a=<-1,-2,3>
p=<-4902,4850,-2879>, v=<19,-37,192>, a=<6,-5,-6>
p=<-12265,4554,5927>, v=<85,-67,-46>, a=<13,-3,-6>
p=<-7492,-774,-1473>, v=<-63,1,-131>, a=<14,1,9>
p=<-5309,1890,-3064>, v=<-27,-33,83>, a=<9,-1,0>
p=<5458,-2069,-8947>, v=<43,74,-24>, a=<-10,-1,14>
p=<-584,4972,5510>, v=<86,-83,-81>, a=<-4,-4,-5>
p=<2287,5302,9107>, v=<-69,-76,-54>, a=<0,-5,-13>
p=<-122,6556,3101>, v=<-13,5,-25>, a=<1,-12,-4>
p=<967,-2057,2540>, v=<39,79,60>, a=<-4,-1,-8>
p=<4993,2365,494>, v=<-117,132,3>, a=<-2,-12,-1>
p=<43,-2354,-2773>, v=<-18,20,34>, a=<1,3,3>
p=<-2234,847,4487>, v=<-119,-9,-16>, a=<11,-1,-7>
p=<4440,409,-5661>, v=<24,-48,10>, a=<-8,2,8>
p=<-8268,-167,-423>, v=<7,5,-6>, a=<12,0,1>
p=<-4596,-2381,5949>, v=<-132,-26,-146>, a=<14,5,-1>
p=<561,-1562,-1060>, v=<93,64,46>, a=<-16,5,3>
p=<1236,658,1385>, v=<-56,36,-45>, a=<-3,-10,-6>
p=<-1674,-962,-145>, v=<18,128,-23>, a=<12,-8,4>
p=<381,-1532,200>, v=<-7,46,-46>, a=<-2,7,4>
p=<66,-1307,-1060>, v=<-34,55,14>, a=<4,4,7>
p=<-609,718,1715>, v=<147,-40,13>, a=<-13,-1,-16>
p=<-339,-347,-1135>, v=<25,23,19>, a=<0,0,7>
p=<1401,523,1850>, v=<-11,-19,-68>, a=<-10,-2,-7>
p=<-3880,-4930,-4999>, v=<3,159,126>, a=<6,-1,1>
p=<-6995,-2690,181>, v=<110,77,-4>, a=<5,0,0>
p=<5395,-4055,13376>, v=<26,-46,-183>, a=<-10,9,-11>
p=<-5280,2770,6446>, v=<169,65,-39>, a=<-1,-8,-8>
p=<110,-2305,321>, v=<-75,-6,64>, a=<4,4,-4>
p=<-3229,-920,1526>, v=<-23,33,-53>, a=<9,0,0>
p=<918,1603,1410>, v=<44,36,-64>, a=<-5,-6,1>
p=<-6187,2560,1352>, v=<124,-12,-2>, a=<6,-5,-3>
p=<-1083,-2834,-620>, v=<8,129,21>, a=<2,-2,0>
p=<-2685,3997,-1222>, v=<-66,7,119>, a=<10,-9,-5>
p=<-2820,1792,-3967>, v=<16,-59,9>, a=<5,0,8>
p=<2827,286,-1978>, v=<-60,-81,56>, a=<-6,6,3>
p=<-143,-3685,-2737>, v=<-17,19,56>, a=<2,13,6>
p=<4686,-418,4600>, v=<-18,43,-36>, a=<-17,-2,-15>
p=<-2277,-4961,-405>, v=<149,31,-119>, a=<-4,17,12>
p=<-2761,-3058,-1505>, v=<56,2,-69>, a=<6,12,12>
p=<-748,1969,-295>, v=<22,-123,14>, a=<1,3,0>
p=<2024,-891,-3122>, v=<80,7,85>, a=<-15,3,5>
p=<979,-1650,519>, v=<-68,-16,46>, a=<2,8,-6>
p=<1441,-968,3390>, v=<-43,45,-50>, a=<-2,0,-9>
p=<1920,-2294,-651>, v=<-174,-26,100>, a=<7,16,-7>
p=<-1500,154,-5313>, v=<149,-10,188>, a=<-7,0,11>
p=<-2751,-2456,-3783>, v=<0,135,84>, a=<16,0,13>
p=<219,1243,-30>, v=<-13,-80,-1>, a=<0,1,0>
p=<-789,388,861>, v=<43,-23,-98>, a=<0,0,5>
p=<-1820,-2022,-5756>, v=<67,52,8>, a=<-1,0,7>
p=<8749,-2412,-2480>, v=<-124,62,-36>, a=<-5,0,5>
p=<-6500,-6273,-6926>, v=<-33,-59,-22>, a=<10,11,10>
p=<-5447,84,-4391>, v=<0,78,33>, a=<7,-4,4>
p=<5239,-7989,-491>, v=<-94,45,153>, a=<-2,8,-7>
p=<598,-5181,4033>, v=<5,53,-43>, a=<-1,4,-3>
p=<-2405,-5064,-12503>, v=<102,-90,1>, a=<-2,11,16>
p=<442,8196,133>, v=<-11,10,-63>, a=<0,-11,3>
p=<-455,4413,-6653>, v=<12,-93,31>, a=<0,-1,7>
p=<-5876,-1398,-11255>, v=<91,-24,149>, a=<3,3,7>
p=<467,1357,1470>, v=<-54,-38,-59>, a=<2,-12,-10>
p=<-7,-1571,-1734>, v=<-8,141,169>, a=<1,-2,-4>
p=<2045,379,-462>, v=<-114,-67,63>, a=<-9,5,-4>
p=<-349,-1595,-1284>, v=<1,26,34>, a=<4,16,11>
p=<1199,-1259,-1212>, v=<-89,76,80>, a=<-2,4,3>
p=<-3704,-1371,-1025>, v=<115,11,-64>, a=<8,6,12>
p=<-2792,624,96>, v=<137,-124,-13>, a=<1,9,1>
p=<589,390,-229>, v=<-28,-74,35>, a=<-6,7,-2>
p=<-1261,-675,-694>, v=<113,82,87>, a=<2,-2,-3>
p=<9,545,-1744>, v=<-36,-51,104>, a=<6,0,13>
p=<-686,30,451>, v=<28,-27,-44>, a=<7,5,0>
p=<-516,-305,-219>, v=<33,12,1>, a=<3,4,4>
p=<-996,105,-1449>, v=<37,-7,124>, a=<11,0,4>
p=<1638,-3532,-519>, v=<136,-39,-65>, a=<-14,12,6>
p=<3744,5459,-2517>, v=<-138,6,107>, a=<0,-15,-1>
p=<-358,1728,130>, v=<56,-54,-13>, a=<-4,-12,0>
p=<-761,-482,-923>, v=<59,4,26>, a=<0,4,6>
p=<-1177,155,-754>, v=<77,53,27>, a=<2,-10,4>
p=<435,1091,-1027>, v=<23,-89,-1>, a=<-8,0,11>
p=<84,-846,-1716>, v=<36,32,129>, a=<-6,4,0>
p=<1722,-1704,-299>, v=<-13,98,76>, a=<-17,4,-8>
p=<1358,-1548,-572>, v=<-104,51,-22>, a=<0,9,9>
p=<-1697,727,-598>, v=<47,-68,8>, a=<12,1,5>
p=<-150,571,416>, v=<-16,-14,35>, a=<4,-5,-10>
p=<435,-8451,531>, v=<-12,19,0>, a=<0,14,-1>
p=<798,13692,-8478>, v=<-23,-176,154>, a=<0,-14,6>
p=<171,1779,5052>, v=<13,-53,-86>, a=<-1,0,-4>
p=<-3558,-3072,-3528>, v=<92,-42,-13>, a=<1,8,7>
p=<-4218,-2313,-4122>, v=<129,-31,107>, a=<0,6,1>
p=<-2766,7356,-3066>, v=<0,-35,58>, a=<5,-11,2>
p=<-4331,7140,-11515>, v=<-24,10,90>, a=<11,-16,19>
p=<3484,2565,-880>, v=<10,-101,-125>, a=<-8,1,10>
p=<7564,-1275,-1420>, v=<-126,-35,48>, a=<-8,5,0>
p=<-3251,-9690,3485>, v=<-29,168,-38>, a=<9,10,-5>
p=<2367,-3580,4558>, v=<72,36,-12>, a=<-8,4,-7>
p=<7892,-1625,-2344>, v=<-108,101,86>, a=<-7,-3,-1>
p=<-7969,-469,6819>, v=<96,-3,-96>, a=<8,1,-6>
p=<-2240,823,7618>, v=<-125,-41,-67>, a=<11,1,-9>
p=<6702,11312,-4163>, v=<32,-87,-18>, a=<-13,-14,8>
p=<-8853,-1659,2739>, v=<157,-73,-81>, a=<6,7,0>
p=<3647,-2764,-635>, v=<-8,19,66>, a=<-9,6,-3>
p=<623,2501,-2525>, v=<-36,-120,38>, a=<1,2,4>
p=<-7045,-955,229>, v=<94,-34,62>, a=<12,5,-5>
p=<5402,6470,-1796>, v=<-87,-57,67>, a=<-8,-13,0>
p=<-1045,-2592,2778>, v=<68,60,-126>, a=<-2,4,1>
p=<-7249,3372,-5394>, v=<164,-76,127>, a=<11,-5,8>
p=<1103,-2460,-6378>, v=<66,-8,68>, a=<-9,9,16>
p=<-1633,3072,-2442>, v=<-20,-51,104>, a=<7,-6,0>
p=<659,924,642>, v=<-28,-24,63>, a=<0,-1,-7>
p=<599,-4248,3630>, v=<37,204,-124>, a=<-5,-2,-2>
p=<-4669,888,-3654>, v=<119,-110,67>, a=<6,6,7>
p=<1175,-3060,2454>, v=<38,17,-125>, a=<-7,9,2>
p=<-4808,-3374,1978>, v=<72,12,-39>, a=<4,5,-1>
p=<-1425,1726,8115>, v=<25,-68,-132>, a=<1,1,-6>
p=<-915,-1691,533>, v=<-60,-20,56>, a=<5,4,-4>
p=<-9262,-2082,465>, v=<98,114,23>, a=<10,-3,-2>
p=<-235,1692,-6199>, v=<-80,-137,44>, a=<5,5,8>
p=<1006,-2745,3967>, v=<-29,11,60>, a=<0,4,-10>
p=<734,910,4545>, v=<49,-9,113>, a=<-4,-1,-14>
p=<-4400,5245,1145>, v=<95,-84,108>, a=<2,-4,-8>
p=<-5137,-4813,-3931>, v=<170,99,130>, a=<0,4,0>
p=<-1237,362,4664>, v=<71,-27,-48>, a=<-2,1,-7>
p=<4118,3047,-4426>, v=<-30,23,7>, a=<-7,-8,9>
p=<3953,-5713,2879>, v=<-40,129,-35>, a=<-6,4,-4>
p=<6098,467,284>, v=<28,-108,-119>, a=<-15,6,7>
p=<-5257,-463,-1006>, v=<81,78,-14>, a=<6,-4,3>
p=<-2392,-4483,-781>, v=<1,88,-6>, a=<5,4,2>
p=<2392,-3365,691>, v=<-86,94,96>, a=<-2,5,-11>
p=<38,100,4266>, v=<44,17,-170>, a=<-4,-2,-2>
p=<-1986,-3255,-651>, v=<44,66,-27>, a=<4,7,5>
p=<-4813,-582,2253>, v=<92,2,2>, a=<11,2,-9>
p=<-4351,-4146,460>, v=<94,95,-20>, a=<9,8,0>
p=<654,-351,-2928>, v=<-53,3,134>, a=<2,1,0>
p=<-1711,870,2814>, v=<20,5,-58>, a=<5,-4,-6>
p=<269,-4707,1637>, v=<-47,132,-62>, a=<3,7,-1>
p=<-3141,2135,4365>, v=<108,-18,-94>, a=<3,-7,-9>
p=<-326,254,-1121>, v=<46,-14,57>, a=<-3,0,1>
p=<830,-290,1599>, v=<5,27,-49>, a=<-6,-1,-5>
p=<-1591,14168,-6462>, v=<136,-117,76>, a=<-5,-16,6>
p=<-5651,3843,-5132>, v=<126,-38,110>, a=<2,-4,2>
p=<-10131,1288,9673>, v=<56,-37,-7>, a=<13,0,-15>
p=<6424,-4347,-1982>, v=<-39,52,-16>, a=<-8,4,4>
p=<-1158,-4508,3667>, v=<70,88,-149>, a=<-1,13,-3>
p=<2522,3462,-253>, v=<-135,-111,47>, a=<1,-6,-3>
p=<1452,-3418,-1613>, v=<-50,44,-11>, a=<-2,12,9>
p=<-4388,2692,1047>, v=<11,-104,-39>, a=<20,-3,-1>
p=<1672,592,-913>, v=<-61,-104,143>, a=<-2,7,-9>
p=<1792,-968,317>, v=<-88,37,-13>, a=<0,1,0>
p=<3902,-2518,-2033>, v=<-141,62,94>, a=<-5,6,1>
p=<-1618,-4358,-1043>, v=<51,175,-29>, a=<3,4,8>
p=<-58,-1808,2057>, v=<78,37,26>, a=<-7,5,-12>
p=<2272,1312,-633>, v=<-70,-98,129>, a=<-4,3,-9>
p=<-1750,755,1487>, v=<26,-47,18>, a=<10,0,-13>
p=<-46,-2101,1943>, v=<98,72,-70>, a=<-11,7,-6>
p=<-870,1043,791>, v=<22,-65,-49>, a=<4,0,0>
p=<1618,243,-257>, v=<-74,-168,59>, a=<-3,18,-5>
p=<2066,155,-2385>, v=<-102,-1,107>, a=<-3,-1,5>
p=<10,115,-633>, v=<-16,-7,23>, a=<2,0,2>
p=<418,1539,471>, v=<18,-96,39>, a=<-5,0,-8>
p=<-1462,235,-233>, v=<127,-74,32>, a=<-4,7,-2>
p=<125,463,-834>, v=<19,20,-50>, a=<-3,-5,11>
p=<-2034,-999,-1565>, v=<38,7,56>, a=<9,6,4>
p=<-215,140,-1293>, v=<-24,-51,76>, a=<4,5,0>
p=<-895,1398,645>, v=<-56,-17,-38>, a=<12,-7,0>
p=<-1048,225,951>, v=<34,25,-65>, a=<3,-4,1>
p=<1077,2350,271>, v=<-64,-55,-61>, a=<0,-9,5>
p=<3813,2408,4701>, v=<-35,30,-184>, a=<-7,-8,1>
p=<-1297,-3052,-59>, v=<46,-123,-72>, a=<0,16,5>
p=<-7569,-98,1677>, v=<9,-11,11>, a=<18,1,-5>
p=<-3733,7084,823>, v=<46,-50,-89>, a=<6,-14,4>
p=<145,-490,-1221>, v=<-20,61,42>, a=<1,-3,0>
p=<-639,224,-6499>, v=<8,-8,-16>, a=<1,0,17>
p=<-3397,98,4183>, v=<121,40,-93>, a=<0,-3,-4>
p=<1714,-5869,-7053>, v=<-6,174,-30>, a=<-2,-1,11>
p=<-4119,2852,1022>, v=<11,-114,-28>, a=<5,2,0>
p=<-4100,-8852,1687>, v=<30,77,13>, a=<4,8,-3>
p=<-5544,-1176,6418>, v=<146,-86,25>, a=<0,6,-10>
p=<-102,595,-2723>, v=<16,-3,20>, a=<-1,-3,14>
p=<-2694,-1646,-878>, v=<8,131,79>, a=<15,-4,-3>
p=<-606,523,256>, v=<120,1,-41>, a=<-9,-3,3>
p=<-2636,5944,-1281>, v=<-39,-63,124>, a=<7,-7,-5>
p=<3535,-4088,6705>, v=<80,-65,-33>, a=<-11,11,-10>
p=<-3461,-5936,864>, v=<71,178,-26>, a=<2,0,0>
p=<73,-410,-1012>, v=<-5,27,70>, a=<0,0,0>
p=<878,654,1417>, v=<-145,-4,-141>, a=<11,-6,5>
p=<-417,-606,-1369>, v=<0,-4,58>, a=<4,6,5>
p=<-46,-1495,-634>, v=<-4,52,28>, a=<1,7,2>
p=<213,1249,-1936>, v=<0,-24,46>, a=<-2,-9,12>
p=<-1280,328,161>, v=<-57,-17,15>, a=<10,0,-2>
p=<-334,-805,1151>, v=<84,-23,-53>, a=<-6,5,0>
p=<876,-1861,-1665>, v=<-63,25,-17>, a=<2,5,8>
p=<-301,4959,1173>, v=<71,-147,61>, a=<-5,-7,-10>
p=<1822,-1223,1404>, v=<-83,-27,-99>, a=<0,7,3>
p=<-2776,856,-1071>, v=<80,-64,25>, a=<4,2,2>
p=<1264,-2025,375>, v=<4,-98,47>, a=<-2,8,-3>
p=<-7024,4746,-2363>, v=<152,-91,26>, a=<2,-2,2>
p=<2337,3599,5037>, v=<51,35,-136>, a=<-6,-7,0>
p=<-3176,6115,2225>, v=<-28,-128,-117>, a=<6,-2,3>
p=<-7542,3599,-5841>, v=<14,-60,-70>, a=<10,-2,12>
p=<-2510,-10868,2484>, v=<30,84,47>, a=<2,11,-6>
p=<1375,5042,560>, v=<-94,-118,-15>, a=<3,-1,0>
p=<572,-184,9935>, v=<121,83,-129>, a=<-9,-5,-13>
p=<3317,1631,-3265>, v=<-110,-55,32>, a=<0,0,5>
p=<-1213,-4699,2240>, v=<41,32,-43>, a=<0,8,-2>
p=<-778,7046,4100>, v=<135,-96,19>, a=<-7,-9,-10>
p=<-4558,-7279,-910>, v=<106,-37,-31>, a=<3,18,4>
p=<4472,4916,770>, v=<-164,6,6>, a=<1,-11,-2>
p=<-2371,9,-1448>, v=<161,37,64>, a=<0,-5,4>
p=<1934,-141,-2153>, v=<-94,103,23>, a=<-4,-12,15>
p=<1004,2454,532>, v=<-32,-166,-84>, a=<-4,0,6>
p=<449,1374,-23>, v=<-27,-70,-7>, a=<0,-3,1>
p=<-46,189,742>, v=<-2,-7,38>, a=<1,-1,-11>
p=<-1921,-486,-1268>, v=<51,-26,-4>, a=<10,7,11>
p=<-8594,-6964,453>, v=<37,85,-79>, a=<14,8,4>
p=<-3426,4252,1909>, v=<24,-117,-9>, a=<5,-1,-3>
p=<4734,-8724,949>, v=<-33,74,153>, a=<-7,12,-11>
p=<1470,-7028,-2683>, v=<-63,87,85>, a=<1,8,0>
p=<-2834,-7572,5093>, v=<-11,137,73>, a=<6,6,-14>
p=<-2082,-2212,-10699>, v=<-84,-47,121>, a=<9,7,13>
p=<-8770,7388,-1531>, v=<59,-83,49>, a=<13,-9,0>
p=<1550,-4996,-2219>, v=<-16,-59,21>, a=<-2,13,3>
p=<-3570,-5748,-6619>, v=<-87,80,43>, a=<12,6,10>
p=<3694,-11780,-3643>, v=<-17,186,16>, a=<-6,11,6>
p=<216,-1664,-1581>, v=<32,40,67>, a=<-4,4,1>
p=<-3484,-344,959>, v=<175,58,-60>, a=<0,-4,1>
p=<-524,-854,-1941>, v=<-36,31,64>, a=<6,1,3>
p=<1556,-1314,829>, v=<-77,75,-64>, a=<0,-1,2>
p=<-1804,1036,-1481>, v=<-35,10,62>, a=<12,-6,1>
p=<-6204,1486,1019>, v=<122,-23,42>, a=<18,-5,-9>
p=<106,-1634,769>, v=<-99,7,2>, a=<9,7,-4>
p=<-744,-1114,1239>, v=<-25,-61,-32>, a=<6,11,-3>
p=<1326,-1514,-2681>, v=<-13,-20,164>, a=<-5,9,-3>
p=<-6024,1756,-2991>, v=<176,-47,148>, a=<12,-4,0>
p=<-1185,1891,-1377>, v=<-169,271,-196>, a=<2,-18,15>
p=<2450,-113,1689>, v=<347,-19,245>, a=<-24,4,-14>
p=<-2696,798,-390>, v=<-385,115,-51>, a=<23,-7,3>
p=<-253,-2657,-1113>, v=<-39,-378,-160>, a=<2,28,15>
p=<941,-2221,-1739>, v=<134,-319,-247>, a=<-10,22,17>
p=<-2571,622,692>, v=<-367,83,94>, a=<26,-10,-6>
p=<887,-469,2889>, v=<123,-69,414>, a=<-14,8,-28>
p=<2493,-978,-1309>, v=<353,-130,-187>, a=<-24,10,10>
p=<2150,1501,-1594>, v=<311,209,-227>, a=<-18,-15,13>
p=<1856,2988,-329>, v=<269,430,-53>, a=<-19,-31,3>
p=<1148,1977,-2139>, v=<164,283,-301>, a=<-16,-24,28>
p=<-2743,629,-1085>, v=<-390,89,-162>, a=<29,-3,14>
p=<1933,946,-1573>, v=<275,130,-224>, a=<-19,-9,15>
p=<-2305,-1290,388>, v=<-331,-184,57>, a=<22,13,-4>
p=<464,-149,-3139>, v=<67,-21,-447>, a=<-5,4,30>
p=<479,-1038,-2341>, v=<72,-149,-337>, a=<-1,8,23>
p=<1839,-337,1939>, v=<261,-46,278>, a=<-21,-3,-21>
p=<257,2019,-2008>, v=<41,295,-285>, a=<-3,-19,16>
p=<-1160,-1445,2476>, v=<-164,-204,355>, a=<15,11,-23>
p=<-889,2702,851>, v=<-125,388,122>, a=<11,-31,-3>
p=<-1514,1718,1230>, v=<-217,249,178>, a=<20,-13,-12>
p=<-2265,-358,624>, v=<-323,-49,84>, a=<21,8,-5>
p=<825,-2007,-2588>, v=<117,-286,-369>, a=<-10,18,22>
p=<2389,1568,1685>, v=<343,221,242>, a=<-21,-16,-20>
p=<-1230,2091,-604>, v=<-173,298,-84>, a=<15,-18,3>
p=<-2333,857,1449>, v=<-336,118,209>, a=<24,-12,-11>
p=<558,-2136,1370>, v=<79,-305,192>, a=<-5,21,-12>
p=<-2414,1497,576>, v=<-344,215,80>, a=<24,-17,-5>
p=<-1901,2046,695>, v=<-270,288,101>, a=<19,-21,-4>
p=<373,1186,-2417>, v=<55,170,-343>, a=<0,-16,25>
p=<-1470,-340,-2620>, v=<-217,-48,-373>, a=<10,5,28>
p=<-501,847,2590>, v=<-74,121,370>, a=<7,-8,-29>
p=<863,-1755,-1964>, v=<119,-250,-279>, a=<-5,19,17>
p=<-2564,816,-1585>, v=<-366,112,-226>, a=<23,-8,16>
p=<2452,-1521,-1441>, v=<356,-217,-203>, a=<-19,11,10>
p=<-426,2546,-2083>, v=<-62,366,-300>, a=<1,-19,17>
p=<51,788,2731>, v=<10,112,390>, a=<2,-11,-29>
p=<191,617,-2860>, v=<27,89,-407>, a=<-4,-3,30>
p=<2197,-762,-1985>, v=<314,-110,-283>, a=<-22,12,20>
p=<-1336,1043,2127>, v=<-190,147,303>, a=<13,-10,-21>
p=<-2534,-988,2164>, v=<-358,-146,311>, a=<26,9,-17>
p=<1028,-2556,-47>, v=<147,-360,-6>, a=<-12,25,2>
p=<1301,-1925,-1704>, v=<182,-278,-243>, a=<-19,14,14>
p=<-1982,194,1860>, v=<-285,27,261>, a=<16,-5,-18>
p=<1264,1574,-2430>, v=<177,224,-351>, a=<-16,-15,25>
p=<1841,411,-2245>, v=<262,61,-316>, a=<-18,-2,27>
p=<-2439,1764,774>, v=<-345,252,110>, a=<24,-25,-5>
p=<561,772,-2215>, v=<77,114,-313>, a=<-3,-9,25>
p=<-326,-877,-3157>, v=<-42,-124,-451>, a=<3,9,31>
p=<53,2546,-1341>, v=<12,362,-189>, a=<-5,-25,10>
p=<1588,1660,2255>, v=<226,242,326>, a=<-15,-15,-25>
p=<-65,780,-2718>, v=<-11,112,-387>, a=<-4,-7,27>
p=<-2660,-340,538>, v=<-381,-48,70>, a=<26,3,-5>
p=<-1538,303,2055>, v=<-219,40,294>, a=<11,0,-19>
p=<-227,-2448,-2132>, v=<-32,-344,-304>, a=<3,25,22>
p=<2226,-1561,-1043>, v=<316,-223,-152>, a=<-22,14,8>
p=<1033,1427,2456>, v=<151,204,354>, a=<-12,-16,-24>
p=<2625,-1026,-1869>, v=<374,-143,-268>, a=<-26,11,22>
p=<-2217,-2660,57>, v=<-319,-380,8>, a=<22,29,3>
p=<770,606,-2745>, v=<113,85,-392>, a=<-2,-4,26>
p=<2143,1913,402>, v=<309,273,58>, a=<-22,-16,1>
p=<-2528,1344,-281>, v=<-361,192,-37>, a=<23,-13,3>
p=<2732,456,414>, v=<386,65,56>, a=<-27,-7,-4>
p=<2490,-1902,315>, v=<355,-277,44>, a=<-24,19,-1>
p=<-10,-462,3021>, v=<-4,-62,431>, a=<-2,-1,-29>
p=<-3044,1288,861>, v=<-433,189,124>, a=<30,-9,-7>
p=<-552,301,2652>, v=<-86,49,379>, a=<1,-1,-29>
p=<1577,1507,1914>, v=<224,220,270>, a=<-16,-15,-19>
p=<2804,542,-194>, v=<398,77,-28>, a=<-22,-9,4>
p=<1989,1071,1788>, v=<284,152,253>, a=<-19,-11,-22>
p=<2939,-331,-1719>, v=<416,-50,-246>, a=<-28,5,9>
p=<-596,-2447,1601>, v=<-85,-351,228>, a=<0,24,-13>
p=<1887,932,-538>, v=<272,130,-76>, a=<-19,-7,5>
p=<857,-260,-2540>, v=<124,-38,-361>, a=<-13,0,18>
p=<-1359,-2481,-778>, v=<-194,-356,-111>, a=<11,25,7>
p=<2695,-449,1496>, v=<384,-64,215>, a=<-28,1,-14>
p=<-1518,2278,953>, v=<-214,325,134>, a=<12,-25,-8>
p=<1233,2135,1600>, v=<175,312,230>, a=<-11,-15,-15>
p=<552,286,2951>, v=<81,40,425>, a=<-4,-5,-30>
p=<-1833,-433,2423>, v=<-257,-69,346>, a=<21,2,-24>
p=<868,-2791,-1661>, v=<126,-403,-234>, a=<-10,24,15>
p=<1124,2180,-1315>, v=<158,312,-184>, a=<-6,-24,10>
p=<2362,1733,-443>, v=<336,249,-63>, a=<-23,-16,9>
p=<-2797,-695,-1637>, v=<-399,-97,-226>, a=<31,2,16>
p=<2080,1064,1457>, v=<295,152,206>, a=<-20,-12,-14>
p=<-2097,-1197,-1723>, v=<-303,-172,-246>, a=<23,13,19>
p=<12,-2706,1595>, v=<2,-386,231>, a=<-2,32,-15>
p=<-2664,-836,354>, v=<-380,-118,48>, a=<24,6,-3>
p=<-626,2290,-1721>, v=<-86,330,-242>, a=<10,-22,17>
p=<1172,-2726,-678>, v=<169,-386,-100>, a=<-9,26,5>
p=<1946,2224,-812>, v=<276,315,-118>, a=<-19,-26,5>
p=<-1546,-1945,-456>, v=<-217,-276,-61>, a=<15,18,2>
p=<-2731,-230,-4>, v=<-390,-32,4>, a=<27,4,0>
p=<488,-1761,-2141>, v=<70,-255,-302>, a=<-9,17,16>
p=<-631,2781,2584>, v=<-88,400,370>, a=<5,-26,-30>
p=<1889,-1146,-1587>, v=<269,-170,-225>, a=<-21,8,12>
p=<-300,-2429,1873>, v=<-50,-347,270>, a=<3,23,-13>
p=<-2819,-517,-187>, v=<-405,-78,-28>, a=<28,2,5>
p=<-1364,-2076,2041>, v=<-194,-295,293>, a=<16,20,-18>
p=<-2689,-145,-379>, v=<-384,-19,-53>, a=<24,3,2>
p=<1165,2759,-18>, v=<165,396,1>, a=<-11,-23,0>
p=<-411,-1272,2205>, v=<-55,-184,315>, a=<8,16,-24>
p=<703,1225,2986>, v=<100,175,424>, a=<-10,-10,-29>
p=<1557,2047,1330>, v=<222,292,196>, a=<-15,-20,-13>
p=<2432,1064,-604>, v=<347,153,-86>, a=<-22,-12,5>
p=<2707,-575,-976>, v=<387,-77,-139>, a=<-29,8,13>
p=<-415,2782,-2030>, v=<-59,397,-293>, a=<4,-27,21>
p=<437,-2795,291>, v=<58,-400,36>, a=<-9,28,-6>
p=<3282,163,-811>, v=<468,23,-113>, a=<-34,-4,9>
p=<1812,-1269,1678>, v=<252,-181,238>, a=<-21,10,-16>
p=<1190,405,-2752>, v=<169,63,-398>, a=<-10,-4,26>
p=<1070,-2048,-997>, v=<154,-287,-145>, a=<-12,21,12>
p=<-2340,-577,-2119>, v=<-339,-80,-302>, a=<28,10,21>
p=<2672,595,1296>, v=<383,84,186>, a=<-28,-5,-14>
p=<-21,52,-2410>, v=<-1,6,-337>, a=<6,-6,22>
p=<501,2436,-1297>, v=<73,350,-186>, a=<-5,-26,12>
p=<-1073,1132,2603>, v=<-156,165,372>, a=<11,-7,-26>
p=<-227,-52,3320>, v=<-31,-7,478>, a=<5,5,-32>
p=<-1156,-1949,2115>, v=<-164,-277,302>, a=<11,19,-18>
p=<2230,-1374,-2410>, v=<319,-194,-346>, a=<-25,13,28>
p=<-891,-772,2519>, v=<-128,-104,357>, a=<8,7,-27>
p=<-1407,-2788,-953>, v=<-205,-398,-135>, a=<10,30,10>
p=<2782,253,-538>, v=<393,39,-77>, a=<-30,-3,8>
p=<-2762,-694,-371>, v=<-393,-98,-52>, a=<26,2,2>
p=<549,2620,-1246>, v=<74,374,-178>, a=<-5,-28,12>
p=<1894,1939,-62>, v=<273,279,-9>, a=<-20,-19,2>
p=<616,2630,-248>, v=<87,375,-36>, a=<-6,-31,4>
p=<1667,2513,-359>, v=<240,358,-51>, a=<-16,-22,2>
p=<-2291,-36,-2460>, v=<-325,2,-350>, a=<22,6,24>
p=<-225,-1066,-3008>, v=<-34,-149,-429>, a=<-1,9,27>
p=<-2072,-2536,70>, v=<-294,-363,8>, a=<23,21,1>
p=<826,-1220,2142>, v=<118,-172,310>, a=<-9,14,-21>
p=<-1769,2052,-229>, v=<-246,296,-28>, a=<17,-21,3>
p=<1964,2481,-738>, v=<288,354,-105>, a=<-24,-26,10>
p=<1322,2501,492>, v=<189,360,68>, a=<-15,-25,-5>
p=<-2049,2194,-775>, v=<-290,311,-114>, a=<22,-24,3>
p=<-1142,-2134,1804>, v=<-161,-305,258>, a=<10,18,-21>
p=<-2405,-1901,523>, v=<-338,-274,71>, a=<28,22,-1>
p=<-390,128,2783>, v=<-60,21,404>, a=<1,-1,-27>
p=<-1011,-2266,1237>, v=<-143,-327,175>, a=<8,19,-12>
p=<-2554,-1987,167>, v=<-364,-280,23>, a=<24,19,1>
p=<604,1223,2588>, v=<85,182,366>, a=<-8,-14,-25>
p=<-1616,-163,-2086>, v=<-232,-24,-305>, a=<12,3,17>
p=<-2698,-239,-252>, v=<-389,-34,-34>, a=<29,1,3>
p=<1232,-72,-3004>, v=<180,-7,-425>, a=<-16,-6,32>
p=<2545,1542,-788>, v=<367,221,-112>, a=<-27,-15,3>
p=<243,-2267,2095>, v=<36,-327,298>, a=<-4,14,-18>
p=<192,-1627,2420>, v=<23,-232,345>, a=<-2,23,-24>
p=<-1838,1657,-477>, v=<-265,235,-68>, a=<15,-22,6>
p=<1739,-728,-2486>, v=<249,-103,-355>, a=<-21,6,25>
p=<-82,-1585,-2878>, v=<-11,-227,-415>, a=<4,11,25>
p=<2105,-1629,-857>, v=<302,-230,-123>, a=<-21,17,10>
p=<-2179,1212,2229>, v=<-312,172,316>, a=<27,-9,-24>
p=<1905,1756,1533>, v=<272,250,220>, a=<-19,-18,-15>
p=<-1918,-1724,1169>, v=<-273,-250,162>, a=<21,21,-10>
p=<104,-2945,352>, v=<14,-420,51>, a=<2,29,-3>
p=<938,192,-2775>, v=<139,27,-391>, a=<-11,-2,27>
p=<-1622,66,2201>, v=<-230,14,319>, a=<12,6,-21>
p=<-456,2516,-452>, v=<-65,363,-65>, a=<4,-25,4>
p=<2495,-1215,1016>, v=<359,-174,148>, a=<-24,16,-8>
p=<-1576,1299,-2319>, v=<-226,185,-330>, a=<15,-15,22>
p=<-2117,-1834,151>, v=<-299,-265,27>, a=<20,17,3>
p=<-1294,-1127,2522>, v=<-185,-161,360>, a=<16,16,-30>
p=<-1101,-2674,738>, v=<-160,-379,105>, a=<16,22,-8>
p=<2009,-1556,-1579>, v=<280,-222,-225>, a=<-22,15,13>
p=<-2802,872,-2008>, v=<-399,126,-283>, a=<23,-8,24>
p=<465,415,-2268>, v=<66,59,-322>, a=<0,-4,25>
p=<133,1403,2447>, v=<19,195,352>, a=<0,-20,-24>
p=<-335,1409,1970>, v=<-52,194,279>, a=<3,-14,-18>
p=<582,-2694,-473>, v=<82,-380,-73>, a=<-3,27,7>
p=<1793,1331,-2287>, v=<256,188,-325>, a=<-17,-7,24>
p=<3093,-123,770>, v=<441,-21,106>, a=<-30,2,-5>
p=<989,-1851,2200>, v=<141,-260,318>, a=<-6,21,-22>
p=<3244,-172,701>, v=<465,-24,100>, a=<-30,-2,-8>
p=<-129,-2951,1212>, v=<-14,-425,171>, a=<-5,30,-7>
p=<1884,877,-1533>, v=<274,125,-219>, a=<-19,-12,15>
p=<-1466,-2618,-346>, v=<-211,-382,-49>, a=<13,28,4>
p=<562,963,-2956>, v=<77,139,-425>, a=<-5,-12,31>
p=<-310,-2462,-856>, v=<-43,-354,-122>, a=<4,25,5>
p=<1678,2238,-1419>, v=<236,321,-198>, a=<-17,-21,20>
p=<1859,-1917,1187>, v=<263,-271,167>, a=<-19,21,-14>
p=<2902,-893,-1497>, v=<411,-124,-217>, a=<-28,8,14>
p=<-133,-2626,-864>, v=<-24,-373,-123>, a=<0,32,7>
p=<-1054,2781,-794>, v=<-148,401,-113>, a=<9,-29,4>
p=<526,689,-2372>, v=<73,103,-337>, a=<-9,-5,31>
p=<-1056,-1107,2500>, v=<-148,-158,356>, a=<12,13,-18>
p=<2996,-826,-419>, v=<424,-117,-58>, a=<-29,8,9>
p=<-1771,1907,656>, v=<-252,270,94>, a=<14,-20,0>
p=<2121,2061,-611>, v=<304,290,-79>, a=<-20,-17,8>
p=<-2368,1603,-253>, v=<-339,224,-36>, a=<23,-16,2>
p=<-2218,-2071,244>, v=<-312,-296,27>, a=<18,19,0>
p=<-1023,-64,-2588>, v=<-147,-6,-366>, a=<10,-6,22>
p=<1831,748,1395>, v=<261,112,196>, a=<-17,-3,-12>
p=<2877,-1441,747>, v=<411,-207,102>, a=<-23,13,-6>
p=<850,1692,1823>, v=<122,241,266>, a=<-11,-16,-20>
p=<2912,-356,-1452>, v=<416,-51,-204>, a=<-25,3,19>
p=<2441,1090,-441>, v=<349,155,-60>, a=<-25,-12,4>
p=<-2420,2114,682>, v=<-341,305,100>, a=<22,-19,-3>
p=<-174,-1003,2392>, v=<-21,-146,342>, a=<2,10,-23>
p=<751,-2676,-811>, v=<105,-380,-113>, a=<-1,26,11>
p=<-2436,2515,-340>, v=<-346,359,-46>, a=<20,-23,5>
p=<-2119,-1482,1270>, v=<-299,-208,186>, a=<28,14,-15>
p=<-1440,605,1931>, v=<-205,86,274>, a=<18,-5,-22>
p=<-824,2827,1983>, v=<-122,400,284>, a=<10,-30,-19>
p=<2686,-1319,979>, v=<383,-185,143>, a=<-25,11,-10>
p=<-437,-3237,-1121>, v=<-62,-463,-160>, a=<3,32,10>
p=<-1379,2833,733>, v=<-198,404,104>, a=<7,-30,-7>
p=<-2851,-268,-153>, v=<-402,-38,-17>, a=<30,1,2>
p=<-1730,1393,-1593>, v=<-248,198,-227>, a=<17,-14,20>
p=<-441,2382,721>, v=<-63,338,103>, a=<-2,-23,-4>
p=<2758,-338,124>, v=<394,-43,24>, a=<-25,3,-4>
p=<1371,2018,-1514>, v=<194,287,-218>, a=<-13,-21,11>
p=<510,-2755,-886>, v=<71,-395,-131>, a=<-7,23,7>
p=<272,629,2616>, v=<39,92,371>, a=<2,-4,-27>
p=<546,2123,1770>, v=<78,312,257>, a=<-1,-19,-17>
p=<2648,127,-1710>, v=<378,18,-244>, a=<-26,2,16>
p=<-309,1136,2477>, v=<-39,160,352>, a=<1,-13,-27>
p=<-260,-3290,-1174>, v=<-34,-469,-168>, a=<2,34,11>
p=<2244,661,-2524>, v=<323,97,-364>, a=<-28,-6,21>
p=<-2431,112,1253>, v=<-347,16,181>, a=<23,-1,-12>
p=<-2815,497,-1110>, v=<-404,71,-161>, a=<28,-7,9>
p=<-56,1941,-3189>, v=<-9,275,-454>, a=<2,-21,30>
p=<-2056,1594,-1735>, v=<-293,228,-247>, a=<22,-20,12>
p=<2014,-2106,-544>, v=<286,-298,-77>, a=<-20,21,9>
p=<-2708,-281,278>, v=<-389,-43,33>, a=<29,2,-1>
p=<1078,2027,-2683>, v=<156,287,-384>, a=<-12,-20,22>
p=<-1261,-2081,-1577>, v=<-179,-294,-220>, a=<12,23,11>
p=<-2183,-474,-2274>, v=<-311,-69,-329>, a=<21,4,22>
p=<-1821,-2105,1524>, v=<-260,-301,219>, a=<17,21,-10>
p=<-2381,1310,-1381>, v=<-341,188,-196>, a=<25,-14,17>
p=<-155,-2635,-32>, v=<-26,-371,-4>, a=<2,25,-7>
p=<-2869,-1101,1206>, v=<-406,-158,172>, a=<32,8,-12>
p=<-421,-18,-3512>, v=<-60,2,-497>, a=<5,0,35>
p=<-1725,-1455,988>, v=<-245,-207,144>, a=<13,12,-6>
p=<-2072,1335,-1575>, v=<-292,191,-229>, a=<21,-17,17>
p=<-3118,-340,-600>, v=<-444,-52,-85>, a=<31,2,3>
p=<-408,1362,2709>, v=<-60,193,387>, a=<5,-11,-31>
p=<-803,-3302,162>, v=<-112,-473,25>, a=<8,33,-5>
p=<-1913,-2082,-1050>, v=<-273,-295,-150>, a=<20,20,13>
p=<-35,1990,3010>, v=<-3,288,429>, a=<-2,-23,-33>
p=<-2235,1599,350>, v=<-319,228,49>, a=<22,-12,-4>
p=<-2875,982,1077>, v=<-407,138,153>, a=<30,-11,-10>
p=<-1099,2301,1861>, v=<-159,326,263>, a=<10,-21,-18>
p=<2751,807,-1186>, v=<396,115,-167>, a=<-27,-11,11>
p=<789,-822,2735>, v=<112,-117,390>, a=<-7,7,-30>
p=<714,-2468,-633>, v=<99,-351,-90>, a=<-8,23,6>
p=<1160,92,2472>, v=<161,10,354>, a=<-11,-2,-25>
p=<-806,3039,851>, v=<-117,434,124>, a=<10,-30,-8>
p=<-1909,-1290,-1662>, v=<-272,-182,-240>, a=<21,8,17>
p=<-2029,1009,-1406>, v=<-286,144,-202>, a=<19,-9,9>
p=<-2633,773,-1212>, v=<-371,110,-171>, a=<28,-9,13>
p=<-2428,848,-649>, v=<-345,115,-90>, a=<22,-11,3>
p=<-1943,-1284,1950>, v=<-276,-183,277>, a=<16,16,-18>
p=<2135,-4,1969>, v=<308,-2,278>, a=<-23,1,-20>
p=<-2252,1999,-809>, v=<-321,281,-115>, a=<26,-20,8>
p=<-2200,-1994,1268>, v=<-314,-283,183>, a=<19,18,-12>
p=<-573,1089,-2660>, v=<-80,150,-383>, a=<2,-5,30>
p=<-634,-858,-2314>, v=<-90,-126,-325>, a=<4,7,21>
p=<602,-2854,-355>, v=<89,-401,-47>, a=<-3,30,4>
p=<208,-3102,-114>, v=<32,-445,-15>, a=<-2,30,1>
p=<-1962,-1576,1725>, v=<-287,-225,248>, a=<22,16,-17>
p=<2093,-78,-2123>, v=<297,-10,-300>, a=<-20,-1,21>
p=<-1858,-1403,2246>, v=<-264,-200,315>, a=<18,10,-20>
p=<3140,363,636>, v=<443,50,90>, a=<-31,-3,-7>
p=<-970,-2562,160>, v=<-140,-364,22>, a=<11,27,-4>
p=<-1838,1530,-2171>, v=<-260,220,-310>, a=<13,-13,21>
p=<-1531,917,-2288>, v=<-222,129,-326>, a=<18,-9,20>
p=<311,2074,-2252>, v=<44,296,-316>, a=<-3,-14,17>
p=<-362,974,-2529>, v=<-44,142,-361>, a=<3,-9,25>
p=<2303,269,-756>, v=<329,41,-108>, a=<-21,-5,7>
p=<-2647,-1151,2>, v=<-384,-164,0>, a=<34,11,2>
p=<1445,1783,1976>, v=<207,258,282>, a=<-10,-25,-15>
p=<-530,-3161,358>, v=<-79,-448,45>, a=<3,29,-4>
p=<778,-2487,1111>, v=<111,-352,156>, a=<-4,27,-16>
p=<-731,1278,2348>, v=<-106,182,334>, a=<7,-9,-26>
p=<-2074,1825,1081>, v=<-297,263,160>, a=<19,-17,-12>
p=<-1704,-2190,404>, v=<-244,-317,55>, a=<14,20,-2>
p=<2216,-2208,727>, v=<319,-312,107>, a=<-24,22,-6>
p=<332,341,2589>, v=<50,52,371>, a=<1,-6,-24>
p=<-2770,-562,-1888>, v=<-395,-80,-269>, a=<29,8,23>
p=<-2106,576,2047>, v=<-295,83,293>, a=<15,-11,-17>
p=<611,-2791,761>, v=<87,-398,106>, a=<-7,26,-5>
p=<1504,1800,-2072>, v=<215,256,-294>, a=<-15,-21,22>
p=<875,1832,1854>, v=<124,266,261>, a=<-9,-19,-17>
p=<-2038,171,-1609>, v=<-293,29,-229>, a=<17,-1,19>
p=<2565,1896,527>, v=<367,270,73>, a=<-22,-15,-9>
p=<1369,-2192,691>, v=<196,-307,100>, a=<-14,17,-8>
p=<965,2492,-734>, v=<134,357,-106>, a=<-7,-22,7>
p=<1574,1686,-2192>, v=<227,241,-314>, a=<-14,-13,19>
p=<-1522,-2068,1835>, v=<-220,-296,260>, a=<11,16,-12>
p=<-1257,50,2566>, v=<-183,7,364>, a=<11,3,-26>
p=<-1152,-1761,-1271>, v=<-164,-245,-185>, a=<9,16,14>
p=<-28,1789,2823>, v=<-11,249,403>, a=<-1,-17,-28>
p=<2415,164,-1672>, v=<350,23,-237>, a=<-24,4,10>
p=<-1564,2450,-465>, v=<-223,349,-63>, a=<16,-24,1>
p=<-2364,1632,-1100>, v=<-335,231,-157>, a=<27,-17,14>
p=<2545,-1701,-1620>, v=<363,-242,-227>, a=<-23,17,18>
p=<-274,2024,-3258>, v=<-37,291,-465>, a=<2,-23,33>
p=<234,2394,2051>, v=<29,342,294>, a=<-6,-23,-20>
p=<375,687,-2380>, v=<53,98,-338>, a=<1,-1,20>
p=<-2444,1961,-1416>, v=<-351,277,-199>, a=<23,-17,14>
p=<-904,-230,3463>, v=<-124,-31,494>, a=<6,6,-38>
p=<-1823,-74,2035>, v=<-257,-13,287>, a=<18,-1,-23>
p=<1199,-2404,-1239>, v=<176,-348,-179>, a=<-13,27,16>
p=<658,-2538,1304>, v=<91,-364,187>, a=<-8,25,-10>
p=<2516,-1649,-1225>, v=<360,-237,-175>, a=<-23,16,13>
p=<-1818,1623,-1110>, v=<-264,231,-158>, a=<18,-21,6>
p=<1775,2837,317>, v=<250,409,48>, a=<-15,-28,-4>
p=<-2263,496,-1728>, v=<-323,73,-246>, a=<25,-1,20>
p=<2316,1197,-978>, v=<331,171,-141>, a=<-25,-9,12>
p=<-1391,-2923,457>, v=<-195,-413,68>, a=<12,25,-2>
p=<1334,629,-2793>, v=<192,85,-407>, a=<-13,-6,27>
p=<-1362,-1499,1617>, v=<-190,-212,228>, a=<13,16,-16>
p=<2597,-1634,-622>, v=<374,-236,-90>, a=<-29,9,9>
p=<-2576,-114,1901>, v=<-370,-16,275>, a=<20,3,-18>
p=<2411,-993,1717>, v=<345,-138,242>, a=<-25,11,-17>
p=<1860,-2435,-943>, v=<257,-346,-138>, a=<-18,26,4>
p=<-734,-2821,1280>, v=<-108,-400,187>, a=<6,23,-8>
p=<-2222,-1244,2441>, v=<-314,-178,352>, a=<22,12,-23>
p=<-1371,2548,-1801>, v=<-195,366,-252>, a=<16,-25,16>
p=<-2007,2173,-1284>, v=<-292,312,-183>, a=<20,-23,12>
p=<2523,-1170,840>, v=<358,-166,120>, a=<-22,8,-2>
p=<1600,1855,-2041>, v=<229,265,-291>, a=<-16,-17,21>
p=<312,82,2996>, v=<45,7,433>, a=<-5,2,-29>
p=<-2102,1894,159>, v=<-296,266,20>, a=<23,-18,-3>
p=<-2480,-1473,1376>, v=<-355,-205,196>, a=<28,13,-11>
p=<-37,-1315,-2317>, v=<-4,-190,-332>, a=<0,14,21>
p=<-871,-2721,1074>, v=<-122,-388,152>, a=<6,28,-11>
p=<2068,-1389,2102>, v=<293,-198,298>, a=<-19,16,-26>
p=<-2252,1520,-787>, v=<-321,212,-113>, a=<20,-16,7>
p=<243,2207,1305>, v=<34,316,181>, a=<-5,-23,-6>
p=<1936,1013,1838>, v=<281,144,261>, a=<-18,-9,-19>
p=<-1485,1301,-2362>, v=<-210,188,-343>, a=<14,-17,24>
p=<-455,1640,-2702>, v=<-65,236,-391>, a=<5,-17,27>
p=<-2578,-931,-1005>, v=<-366,-133,-147>, a=<25,4,9>
p=<-865,2537,585>, v=<-118,362,83>, a=<13,-25,-2>
p=<-159,462,-2925>, v=<-21,65,-417>, a=<5,-4,30>
p=<-1832,1434,-1780>, v=<-261,205,-249>, a=<16,-14,20>
p=<2284,-1994,-649>, v=<328,-289,-92>, a=<-22,22,10>
p=<1865,2211,972>, v=<263,310,138>, a=<-19,-19,-10>
p=<2750,-481,1067>, v=<394,-66,153>, a=<-22,10,-13>
p=<-3006,437,-473>, v=<-427,68,-67>, a=<30,-4,5>
p=<325,2718,741>, v=<44,383,100>, a=<-3,-29,-10>
p=<-1684,2213,-1061>, v=<-240,317,-150>, a=<19,-25,11>
p=<1994,2624,1581>, v=<286,372,225>, a=<-20,-26,-20>
p=<2139,1038,1518>, v=<305,147,218>, a=<-17,-6,-10>
p=<-207,-2511,-807>, v=<-24,-353,-119>, a=<7,29,6>
p=<657,1665,-1908>, v=<93,236,-270>, a=<-11,-10,18>
p=<-2525,-892,33>, v=<-360,-129,4>, a=<19,3,2>
p=<2205,1598,-1551>, v=<314,233,-218>, a=<-22,-15,12>
p=<-1368,1714,1493>, v=<-195,244,205>, a=<13,-17,-14>
p=<157,-3247,-30>, v=<25,-463,-3>, a=<0,31,-4>
p=<-137,709,3045>, v=<-20,97,435>, a=<1,-9,-31>
p=<-2835,1244,157>, v=<-408,177,25>, a=<29,-7,-5>
p=<1118,-2403,723>, v=<158,-338,106>, a=<-10,21,-11>
p=<1905,340,-2016>, v=<274,47,-288>, a=<-21,0,20>
p=<2145,-2133,-551>, v=<305,-305,-78>, a=<-22,21,6>
p=<3017,855,-70>, v=<429,124,-14>, a=<-22,-8,-3>
p=<676,-3059,675>, v=<96,-435,94>, a=<1,24,-8>
p=<2707,-1594,-327>, v=<385,-227,-40>, a=<-21,20,4>
p=<-614,3013,200>, v=<-86,434,28>, a=<5,-30,-2>
p=<1081,191,2191>, v=<157,27,313>, a=<-14,2,-24>
p=<699,-2381,-1446>, v=<98,-340,-203>, a=<-9,24,7>
p=<-1101,-3103,-317>, v=<-158,-442,-50>, a=<9,25,-1>
p=<1700,1246,-1427>, v=<246,176,-202>, a=<-14,-9,8>
p=<2963,-300,-418>, v=<418,-40,-59>, a=<-28,7,4>
p=<2751,50,-1648>, v=<393,10,-234>, a=<-31,-2,16>
p=<153,-1278,2341>, v=<21,-184,334>, a=<2,15,-22>
p=<-985,1406,2708>, v=<-142,200,383>, a=<10,-19,-26>
p=<227,-3147,-6>, v=<31,-449,2>, a=<-4,31,1>
p=<1057,-3331,559>, v=<151,-479,80>, a=<-6,33,-4>
p=<-1968,371,-1914>, v=<-285,54,-273>, a=<26,-6,14>
p=<-471,-2576,1278>, v=<-70,-369,176>, a=<2,25,-12>
p=<-496,-2119,-2830>, v=<-70,-299,-404>, a=<3,21,29>
p=<-1363,2930,492>, v=<-195,417,70>, a=<15,-28,-1>
p=<-1235,2391,-1179>, v=<-176,342,-168>, a=<15,-25,9>
p=<-2674,335,1779>, v=<-386,50,252>, a=<30,-5,-13>
p=<891,708,2397>, v=<123,103,349>, a=<-11,-5,-22>
p=<-1598,2259,942>, v=<-228,322,132>, a=<19,-17,-3>
p=<803,-2810,-1540>, v=<119,-404,-220>, a=<-8,25,14>
p=<-224,510,-2749>, v=<-29,67,-390>, a=<-2,-7,32>
p=<-1835,2215,-1440>, v=<-266,320,-203>, a=<17,-21,16>
p=<-1184,507,-2096>, v=<-168,72,-293>, a=<13,-5,19>
p=<288,409,-3326>, v=<36,53,-474>, a=<2,-2,36>
p=<1894,2356,559>, v=<269,340,75>, a=<-21,-24,-4>
p=<7,1036,2617>, v=<2,148,375>, a=<0,-8,-26>
p=<2491,732,-1505>, v=<353,103,-213>, a=<-22,-7,17>
p=<361,-2673,-1070>, v=<54,-379,-151>, a=<3,30,11>
p=<-2627,1037,105>, v=<-375,151,15>, a=<26,-12,1>
p=<1308,2510,864>, v=<188,362,123>, a=<-13,-25,-8>
p=<-277,3713,910>, v=<-39,530,131>, a=<2,-38,-8>
p=<-669,-418,2646>, v=<-95,-60,381>, a=<9,1,-23>
p=<91,-1150,-2124>, v=<13,-164,-306>, a=<-3,14,19>
p=<1340,-56,-2233>, v=<191,-6,-318>, a=<-11,3,19>
p=<2468,467,2268>, v=<353,67,324>, a=<-26,-6,-27>
p=<2076,1476,1721>, v=<299,210,247>, a=<-19,-18,-21>
p=<1017,1860,-2186>, v=<145,265,-311>, a=<-10,-18,20>
p=<479,-1075,3025>, v=<75,-158,430>, a=<-5,10,-30>
p=<1312,504,-2305>, v=<187,76,-333>, a=<-17,1,26>
p=<-1016,-2173,-1594>, v=<-145,-315,-225>, a=<11,22,16>
p=<88,-1087,3153>, v=<12,-157,451>, a=<-2,10,-34>
p=<-2775,172,-308>, v=<-398,24,-42>, a=<28,-5,2>
p=<-1050,854,-3117>, v=<-149,128,-442>, a=<14,-12,30>
p=<-2588,-928,648>, v=<-370,-127,95>, a=<25,13,-6>
p=<2788,1614,-1908>, v=<398,231,-274>, a=<-28,-18,19>
p=<-915,1287,-1911>, v=<-129,181,-272>, a=<9,-12,18>
p=<118,2882,1001>, v=<16,414,143>, a=<-5,-28,-14>
p=<2751,1232,612>, v=<393,180,86>, a=<-29,-7,-6>
p=<1575,-30,-2882>, v=<223,-9,-418>, a=<-7,4,30>
p=<1451,813,-2363>, v=<204,116,-332>, a=<-11,-7,20>
p=<1189,149,-2249>, v=<169,21,-318>, a=<-11,-4,23>
p=<-2388,1306,-1182>, v=<-340,186,-168>, a=<24,-7,12>
p=<-955,-2759,111>, v=<-136,-390,21>, a=<9,27,-1>
p=<-1408,2687,-760>, v=<-197,383,-108>, a=<18,-22,10>
p=<-2379,629,-222>, v=<-340,89,-34>, a=<26,-9,2>
p=<-1312,2261,2231>, v=<-193,324,324>, a=<13,-21,-26>
p=<184,-3068,-566>, v=<28,-440,-83>, a=<1,37,5>
p=<1603,-2812,-1038>, v=<230,-404,-146>, a=<-20,28,16>
p=<-980,-697,-2686>, v=<-139,-92,-383>, a=<4,6,21>
p=<-1750,667,-2178>, v=<-254,95,-313>, a=<25,-11,18>
p=<-1149,-1507,2370>, v=<-167,-220,338>, a=<11,14,-27>
p=<-441,-2319,-218>, v=<-71,-329,-34>, a=<0,21,-3>
p=<-267,-2311,-182>, v=<-38,-333,-26>, a=<2,23,0>
p=<-546,-226,-2561>, v=<-78,-33,-364>, a=<7,1,29>
p=<267,-2557,-1438>, v=<33,-368,-208>, a=<0,24,17>
p=<-2277,-824,2094>, v=<-322,-117,297>, a=<24,10,-19>
p=<-741,-2572,807>, v=<-99,-368,117>, a=<7,21,-3>
p=<542,3001,690>, v=<75,426,100>, a=<-5,-28,-1>
p=<57,60,2942>, v=<6,8,420>, a=<0,-2,-28>
p=<-1498,-556,2735>, v=<-210,-79,390>, a=<17,5,-32>
p=<1137,-2293,-2016>, v=<167,-325,-292>, a=<-11,22,20>
p=<2255,1342,-912>, v=<323,190,-132>, a=<-24,-18,13>
p=<120,-2668,-1049>, v=<21,-385,-149>, a=<-1,30,7>
p=<-1797,1658,-1847>, v=<-259,234,-263>, a=<17,-22,19>
p=<60,1626,-2635>, v=<9,232,-377>, a=<-6,-18,31>
p=<1915,2444,-748>, v=<271,349,-106>, a=<-19,-28,8>
p=<-794,625,2323>, v=<-112,96,328>, a=<9,-5,-25>
p=<-2847,30,-1420>, v=<-409,4,-199>, a=<28,-2,19>
p=<2278,1741,1013>, v=<327,252,139>, a=<-20,-17,-6>
p=<-1252,-2783,790>, v=<-182,-396,110>, a=<10,26,-10>
p=<-683,-656,2967>, v=<-93,-92,424>, a=<10,8,-31>
p=<1045,2844,-423>, v=<148,408,-63>, a=<-14,-36,1>
p=<-1583,-2548,-609>, v=<-227,-364,-84>, a=<10,27,2>
p=<464,2509,1714>, v=<63,358,248>, a=<-2,-27,-17>
p=<-781,2794,-778>, v=<-107,400,-106>, a=<9,-27,7>
p=<464,-3398,439>, v=<63,-486,65>, a=<-2,34,-2>
p=<-2356,-669,-1735>, v=<-333,-97,-242>, a=<23,10,17>
p=<-94,-547,3403>, v=<-10,-79,487>, a=<-3,5,-35>
p=<356,1321,2678>, v=<50,189,382>, a=<-5,-14,-22>
p=<-2901,402,-624>, v=<-412,57,-83>, a=<24,-4,4>
p=<-533,-996,2729>, v=<-78,-139,391>, a=<1,8,-26>
p=<-1126,265,-2804>, v=<-157,38,-405>, a=<10,-2,27>
p=<821,2209,2295>, v=<117,314,321>, a=<-8,-22,-22>
p=<1797,2125,-114>, v=<256,304,-19>, a=<-13,-17,-4>
p=<-1603,-2603,258>, v=<-229,-372,36>, a=<17,26,-2>
p=<2400,-131,1736>, v=<338,-17,248>, a=<-21,0,-17>
p=<738,2677,-1548>, v=<103,381,-223>, a=<-7,-26,17>
p=<-761,581,2364>, v=<-114,88,336>, a=<8,-5,-23>
p=<-1590,519,-2348>, v=<-222,73,-333>, a=<21,-4,20>
p=<-708,-1178,2583>, v=<-103,-167,366>, a=<6,13,-30>
p=<14,-2595,45>, v=<2,-364,6>, a=<2,20,-3>
p=<1631,-2540,-896>, v=<233,-357,-133>, a=<-17,25,8>
p=<-921,-101,2800>, v=<-125,-20,396>, a=<4,-1,-28>
p=<1010,3304,-47>, v=<144,469,-10>, a=<-6,-33,-3>
p=<402,-2919,1203>, v=<60,-417,175>, a=<-5,25,-17>
p=<498,683,2643>, v=<72,103,380>, a=<-4,-10,-25>
p=<-3169,-182,387>, v=<-455,-26,55>, a=<31,2,-7>
p=<-513,-1694,-1964>, v=<-73,-244,-276>, a=<8,20,17>
p=<-1289,1837,-2023>, v=<-182,265,-293>, a=<11,-16,21>
p=<-637,-2233,-1326>, v=<-93,-319,-189>, a=<6,23,13>
p=<1965,1240,1453>, v=<279,178,206>, a=<-22,-12,-16>
p=<-2103,773,-994>, v=<-302,112,-140>, a=<25,-6,9>
p=<88,-702,2651>, v=<13,-100,377>, a=<0,11,-26>
p=<2869,-1326,1716>, v=<409,-192,247>, a=<-31,14,-21>
p=<-425,-3427,-757>, v=<-60,-488,-107>, a=<4,35,7>
p=<34,-2755,170>, v=<4,-396,24>, a=<0,25,0>
p=<821,2555,-1836>, v=<119,366,-262>, a=<-3,-26,18>
p=<1466,-2376,-1120>, v=<216,-344,-157>, a=<-16,27,10>
p=<-1356,-1502,2665>, v=<-192,-209,379>, a=<4,15,-22>
p=<3183,876,470>, v=<455,129,61>, a=<-28,-4,-8>
p=<1076,-2112,-227>, v=<152,-301,-31>, a=<-8,21,2>
p=<1703,346,2486>, v=<246,50,354>, a=<-13,3,-23>
p=<-7,550,-3126>, v=<0,78,-452>, a=<4,-10,31>
p=<3247,-142,853>, v=<466,-17,121>, a=<-26,1,-8>
p=<-3445,1526,-371>, v=<-494,212,-59>, a=<35,-14,7>
p=<-643,-408,2923>, v=<-86,-58,419>, a=<7,2,-35>
p=<1032,-1460,1789>, v=<147,-206,256>, a=<-6,13,-11>
p=<-2245,-1848,-542>, v=<-323,-267,-74>, a=<22,22,6>
p=<-2170,-645,2153>, v=<-310,-93,308>, a=<20,8,-14>
p=<1127,-735,2393>, v=<161,-112,338>, a=<-14,7,-28>
p=<887,2364,2059>, v=<128,334,293>, a=<-8,-27,-22>
p=<-359,-3118,-208>, v=<-46,-443,-30>, a=<1,32,1>
p=<-1856,-1969,-1694>, v=<-264,-283,-242>, a=<20,19,16>
p=<-162,-2764,1700>, v=<-30,-392,243>, a=<2,31,-15>
p=<2374,-690,-2425>, v=<342,-102,-346>, a=<-31,14,23>
p=<26,1729,2582>, v=<4,249,367>, a=<6,-13,-25>
p=<-2448,-1767,369>, v=<-348,-252,52>, a=<22,17,-1>
p=<-336,3532,-666>, v=<-49,502,-92>, a=<4,-35,0>
p=<-1957,1148,1090>, v=<-279,166,158>, a=<19,-11,-8>
p=<3117,338,1088>, v=<445,47,159>, a=<-31,-4,-11>
p=<-1236,-1629,1989>, v=<-177,-229,284>, a=<10,15,-18>
p=<2754,1178,374>, v=<393,168,50>, a=<-32,-11,-6>
p=<2394,252,1078>, v=<338,38,154>, a=<-26,-5,-7>
p=<344,694,-2455>, v=<52,103,-356>, a=<-3,-10,17>
p=<-3232,-521,557>, v=<-461,-72,72>, a=<33,4,-2>
p=<-770,135,2872>, v=<-107,20,409>, a=<7,-2,-28>
p=<695,-2050,-2164>, v=<99,-288,-312>, a=<-11,20,21>
p=<1617,2067,2001>, v=<227,293,289>, a=<-16,-22,-15>
p=<-302,-1717,2660>, v=<-41,-243,380>, a=<1,18,-27>
p=<-236,-1665,2628>, v=<-31,-236,374>, a=<6,16,-24>
p=<1884,1254,-949>, v=<269,179,-137>, a=<-15,-7,9>
p=<-256,2011,3034>, v=<-37,286,433>, a=<2,-16,-27>
p=<-2646,860,1413>, v=<-378,127,200>, a=<21,-8,-12>
p=<1812,-2148,1649>, v=<258,-309,237>, a=<-15,27,-17>
p=<5,-2811,634>, v=<3,-403,84>, a=<0,23,-1>
p=<-637,-986,3106>, v=<-89,-136,446>, a=<9,5,-31>
p=<1096,1410,-1436>, v=<157,201,-205>, a=<-6,-11,14>
p=<1024,2785,394>, v=<146,396,56>, a=<-17,-29,-5>
p=<2650,1322,1655>, v=<371,188,233>, a=<-27,-13,-17>
p=<68,2262,-502>, v=<8,322,-70>, a=<-4,-22,7>
p=<1045,727,-2635>, v=<143,105,-376>, a=<-13,-3,33>
p=<-436,-2423,-1791>, v=<-60,-347,-256>, a=<7,25,18>
p=<1423,-1701,2193>, v=<205,-241,313>, a=<-20,15,-21>
p=<-297,-3193,-1159>, v=<-46,-456,-168>, a=<0,31,9>
p=<1915,226,-2420>, v=<273,31,-350>, a=<-18,-4,24>
p=<-1813,-887,-2599>, v=<-259,-127,-374>, a=<18,9,29>
p=<-300,2457,-639>, v=<-38,350,-90>, a=<-3,-25,9>
p=<-2591,-143,1386>, v=<-370,-20,199>, a=<25,-4,-13>
p=<-2,-3096,389>, v=<3,-441,53>, a=<4,27,-3>
p=<1960,592,-2014>, v=<280,88,-287>, a=<-17,-2,19>
p=<1551,260,-2258>, v=<219,41,-326>, a=<-15,-2,25>
p=<399,132,-2311>, v=<53,22,-330>, a=<2,-3,24>
p=<477,-346,3227>, v=<68,-53,459>, a=<-1,3,-32>
p=<-1639,-1071,1985>, v=<-238,-151,280>, a=<17,11,-19>
p=<1759,1580,-1837>, v=<249,222,-262>, a=<-22,-15,15>
p=<1198,-847,2295>, v=<171,-123,329>, a=<-13,2,-26>
p=<2719,1279,303>, v=<383,182,40>, a=<-30,-10,0>
p=<-1399,2041,-1393>, v=<-195,295,-199>, a=<13,-24,14>
p=<-536,446,2660>, v=<-75,58,381>, a=<5,-9,-26>
p=<-2469,-372,706>, v=<-356,-53,105>, a=<24,9,-4>
p=<-1248,2222,907>, v=<-177,318,130>, a=<7,-22,-10>
p=<-984,-1142,-2583>, v=<-140,-163,-369>, a=<9,15,22>
p=<-2655,-1223,1083>, v=<-379,-168,153>, a=<23,12,-11>
p=<1201,-1941,-1509>, v=<168,-284,-214>, a=<-15,19,7>
p=<1897,-1095,-2167>, v=<271,-158,-304>, a=<-14,13,24>
p=<1401,690,-2236>, v=<197,101,-317>, a=<-9,-11,21>
p=<2140,-1925,-1702>, v=<307,-273,-243>, a=<-21,21,18>
p=<-2527,-640,-830>, v=<-354,-89,-117>, a=<21,7,3>
p=<-1535,-525,2648>, v=<-219,-75,379>, a=<17,5,-30>
p=<-1325,-199,-2594>, v=<-192,-22,-367>, a=<17,1,26>
p=<1382,232,2746>, v=<196,36,393>, a=<-14,-3,-27>
p=<-1985,-1158,300>, v=<-284,-164,41>, a=<23,7,-4>
p=<-380,-205,-2983>, v=<-56,-27,-427>, a=<2,1,31>
p=<-2245,165,1606>, v=<-318,24,232>, a=<22,-2,-11>
p=<-660,1383,-2562>, v=<-93,197,-370>, a=<7,-13,28>
p=<-1953,-421,-2259>, v=<-275,-63,-319>, a=<21,4,22>
p=<2118,-1286,-1974>, v=<302,-182,-282>, a=<-21,14,23>
p=<138,-36,2926>, v=<16,-7,422>, a=<-2,4,-29>
p=<1464,-1220,-2905>, v=<209,-169,-409>, a=<-14,12,28>
p=<-1005,-2026,-2125>, v=<-143,-285,-301>, a=<11,26,15>
p=<1970,863,-2135>, v=<280,121,-300>, a=<-16,-8,22>
p=<2395,72,1354>, v=<339,12,195>, a=<-22,6,-16>
p=<52,2063,1568>, v=<9,295,225>, a=<-5,-20,-19>
p=<2967,1093,1408>, v=<424,155,203>, a=<-29,-7,-11>
p=<197,-1704,-1665>, v=<27,-245,-243>, a=<1,16,15>
p=<1845,-2345,-419>, v=<264,-335,-60>, a=<-17,24,6>
p=<2368,1170,299>, v=<335,167,40>, a=<-28,-13,-2>
p=<-433,-2693,-1255>, v=<-64,-392,-181>, a=<3,26,10>
p=<-1864,2213,-577>, v=<-264,319,-82>, a=<13,-22,10>
p=<-698,1219,2813>, v=<-98,178,401>, a=<7,-12,-25>
p=<3207,253,-25>, v=<459,36,-2>, a=<-37,-1,-4>
p=<-1494,-3321,-55>, v=<-207,-471,-7>, a=<11,32,1>
p=<2641,-2494,-842>, v=<381,-356,-120>, a=<-26,23,7>
p=<2218,-821,794>, v=<312,-113,114>, a=<-23,9,-7>"""
import re
def load_particles(input):
particles = []
for line in input.split('\n'):
particle = []
for qty in line.split(', '):
groups = re.search('<([-\d]+),([-\d]+),([-\d]+)>', qty).groups()
particle.append([int(val) for val in groups])
particles.append(particle)
return particles
particles = load_particles(input)
particles[0]
[[-3770, -455, 1749], [-4, -77, 53], [11, 7, -9]]
min(particles, key=lambda particle: sum(abs(val) for val in particle[2]))
[[73, -410, -1012], [-5, 27, 70], [0, 0, 0]]
particles.index([[73, -410, -1012], [-5, 27, 70], [0, 0, 0]])
376
def step(particle):
p = particle[0]
v = particle[1]
a = particle[2]
v = [v[0] + a[0], v[1] + a[1], v[2] + a[2]]
p = [p[0] + v[0], p[1] + v[1], p[2] + v[2]]
return [p, v, a]
step([[-6, 0, 0], [3, 0, 0], [0, 0, 0]])
[[-3, 0, 0], [3, 0, 0], [0, 0, 0]]
from collections import Counter
def non_unique_positions(particles):
c = Counter([tuple(particle[0]) for particle in particles])
return [val for (val, cnt) in c.items() if cnt > 1]
particles = load_particles(input)
for _ in range(300):
for ind, particle in enumerate(particles):
particles[ind] = step(particle)
non_unique = non_unique_positions(particles)
if len(non_unique) > 0:
particles = [particle for particle in particles if not tuple(particle[0]) in non_unique]
print(len(particles), end=' ')
else:
print('.', end=' ')
. . . . . . . . . 983 . 969 948 943 929 921 906 898 885 858 855 817 . 809 . 802 796 762 742 717 699 689 665 641 613 610 596 584 574 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
First, let's build a dictionary of rules properly arranged as numpy arrays.
import numpy as np
def to_array(motif, splitter='/'):
motif = motif.replace('.', '0').replace('#', '1')
return np.array([list(map(int, list(item))) for item in motif.split(splitter)], dtype=np.int)
test_input = """../.# => ##./#../...
.#./..#/### => #..#/..../..../#..#"""
to_array("../.#")
array([[0, 0], [0, 1]])
to_array(""".#.
..#
###""", splitter='\n')
array([[0, 1, 0], [0, 0, 1], [1, 1, 1]])
def array_hash(array):
return array.tobytes() + bytes(array.shape)
def make_mapping(input):
mapping = {}
for line in input.split('\n'):
motif, target = line.split(' => ')
motif, target = to_array(motif), to_array(target)
for _ in range(4):
# normal
mapping[array_hash(motif)] = target
# flipped
flipped = np.flipud(motif)
mapping[array_hash(flipped)] = target
# next: rotate the motif
motif = np.rot90(motif)
return mapping
Let's test the mapping.
def show_variations(motif):
"""Prints all variations of a given motif."""
var1 = to_array(motif)
var2 = np.flip(var1, axis=0)
var3 = np.flip(var1, axis=1)
var4 = np.flip(var2, axis=1)
var5 = np.rot90(var1)
var6 = np.rot90(var5)
var7 = np.rot90(var6)
for var in [var1, var2, var3, var4, var5, var6, var7]:
print(var)
print()
show_variations(".#./..#/###")
[[0 1 0] [0 0 1] [1 1 1]] [[1 1 1] [0 0 1] [0 1 0]] [[0 1 0] [1 0 0] [1 1 1]] [[1 1 1] [1 0 0] [0 1 0]] [[0 1 1] [1 0 1] [0 0 1]] [[1 1 1] [1 0 0] [0 1 0]] [[1 0 0] [1 0 1] [1 1 0]]
# unit tests from problem statement
mapping = make_mapping(""".#./..#/### => """)
assert array_hash(to_array(".#./..#/###")) in mapping
assert array_hash(to_array(".#./#../###")) in mapping
assert array_hash(to_array("#../#.#/##.")) in mapping
assert array_hash(to_array("###/..#/.#.")) in mapping
mapping = make_mapping(test_input)
len(mapping)
12
Now let's test the example.
def build_new_array(new_grid):
n_rows, n_cols = len(new_grid), len(new_grid[0])
block_rows, block_cols = new_grid[0][0].shape
grid = np.empty((n_rows * block_rows, n_cols * block_cols), dtype=np.int)
for row in range(n_rows):
for col in range(n_cols):
grid[row*block_rows:(row+1)*block_rows, col*block_cols:(col+1)*block_cols] = new_grid[row][col]
return grid
grid = to_array(""".#.
..#
###""", splitter='\n')
for _ in range(2):
if grid.shape[0] % 2 == 0:
n_grid = grid.shape[0] // 2
new_grid = []
for r in range(n_grid):
new_line = []
for c in range(n_grid):
sq = grid[2*r:2*(r+1),
2*c:2*(c+1)]
assert array_hash(sq) in mapping
new_line.append(mapping[array_hash(sq)])
new_grid.append(new_line)
elif grid.shape[0] % 3 == 0:
n_grid = grid.shape[0] // 3
new_grid = []
for r in range(n_grid):
new_line = []
for c in range(n_grid):
sq = grid[3*r:3*(r+1),
3*c:3*(c+1)]
assert array_hash(sq) in mapping
new_line.append(mapping[array_hash(sq)])
new_grid.append(new_line)
grid = build_new_array(new_grid)
np.sum(grid)
12
Now on to the real thing.
input = """../.. => ..#/#../.#.
#./.. => #../#../...
##/.. => ###/#.#/#..
.#/#. => ###/##./.#.
##/#. => .../.#./..#
##/## => ##./#.#/###
.../.../... => ##../.#../#.#./....
#../.../... => ..../##.#/...#/##.#
.#./.../... => ###./####/#.../#..#
##./.../... => ###./.##./...#/..##
#.#/.../... => .###/.##./#.../#.##
###/.../... => ##.#/#..#/#.#./#.##
.#./#../... => #.#./.###/#.../#.##
##./#../... => #.../####/#.##/....
..#/#../... => #.##/..#./...#/...#
#.#/#../... => #.##/####/.#.#/#.#.
.##/#../... => #.../##../##.#/.##.
###/#../... => ..../#.#./.###/#...
.../.#./... => .#.#/#..#/##../#.##
#../.#./... => ###./.###/.#.#/..#.
.#./.#./... => ..##/.##./..##/.#.#
##./.#./... => ..#./##../###./...#
#.#/.#./... => ..##/.##./.###/###.
###/.#./... => ..#./.###/###./#.##
.#./##./... => ###./..../.#../#...
##./##./... => .#.#/##../##.#/...#
..#/##./... => ##.#/.##./.###/..##
#.#/##./... => .###/..#./#.##/####
.##/##./... => ##.#/..#./..##/###.
###/##./... => ..../.#.#/.#../#...
.../#.#/... => ###./.#.#/.#../#.##
#../#.#/... => ####/#..#/..../....
.#./#.#/... => #.../..##/#.##/#.#.
##./#.#/... => #.#./###./##../#.#.
#.#/#.#/... => ...#/.##./.##./.#..
###/#.#/... => ..../.##./####/#.#.
.../###/... => .###/.#../.###/#.##
#../###/... => ..##/..##/.##./##..
.#./###/... => .#.#/..#./..##/##.#
##./###/... => ...#/#.##/#.#./##.#
#.#/###/... => #.##/.##./...#/###.
###/###/... => ##../...#/..##/####
..#/.../#.. => #.##/#.../.#../#.#.
#.#/.../#.. => .##./.##./.#.#/.##.
.##/.../#.. => .#.#/#.##/...#/##.#
###/.../#.. => ##../..#./...#/##..
.##/#../#.. => ##../..##/#..#/#..#
###/#../#.. => ##../..#./#.#./....
..#/.#./#.. => .##./##.#/##../####
#.#/.#./#.. => ####/...#/.#.#/..#.
.##/.#./#.. => .#.#/..#./##.#/.#..
###/.#./#.. => #.../#.##/..../##.#
.##/##./#.. => #.#./#.#./#.##/#.#.
###/##./#.. => ...#/###./.##./.#.#
#../..#/#.. => ####/####/..../.##.
.#./..#/#.. => #.##/...#/..#./####
##./..#/#.. => ..#./#.../..##/####
#.#/..#/#.. => #.../#.##/#.##/..##
.##/..#/#.. => ####/..../##../####
###/..#/#.. => ..../##.#/.##./####
#../#.#/#.. => ...#/..##/###./#..#
.#./#.#/#.. => #..#/..#./.###/##.#
##./#.#/#.. => ###./####/#.##/..#.
..#/#.#/#.. => ##../##.#/..##/.##.
#.#/#.#/#.. => .#.#/.##./#.../##.#
.##/#.#/#.. => .#.#/#..#/.##./..#.
###/#.#/#.. => ...#/.#../.##./##.#
#../.##/#.. => ###./##../#.#./####
.#./.##/#.. => .#../##../#.#./.#.#
##./.##/#.. => ##.#/.#../.#.#/####
#.#/.##/#.. => ####/.#.#/..../....
.##/.##/#.. => ####/##../#..#/####
###/.##/#.. => .###/##.#/.#../#.##
#../###/#.. => #..#/###./####/.#.#
.#./###/#.. => ..##/##../##.#/.#.#
##./###/#.. => #..#/.#../####/...#
..#/###/#.. => ##../##.#/...#/#..#
#.#/###/#.. => ..#./.##./#..#/....
.##/###/#.. => #..#/#.../..../.#..
###/###/#.. => ..#./#.##/.##./#...
.#./#.#/.#. => .#.#/.##./##.#/.##.
##./#.#/.#. => #..#/.###/.#.#/.##.
#.#/#.#/.#. => #.../##../#.../.###
###/#.#/.#. => ###./.###/###./....
.#./###/.#. => .#../####/...#/##..
##./###/.#. => ####/###./..../....
#.#/###/.#. => ...#/.###/..../####
###/###/.#. => ..../#.../..#./.###
#.#/..#/##. => #.#./#.../####/#.##
###/..#/##. => .#.#/#..#/.###/#...
.##/#.#/##. => ..##/..#./..../##..
###/#.#/##. => #.#./##.#/####/#..#
#.#/.##/##. => ..../.#../#.#./##.#
###/.##/##. => ..../..../.#../##.#
.##/###/##. => #.#./.###/#.#./#.##
###/###/##. => ##.#/##.#/.###/..#.
#.#/.../#.# => #..#/.#../#.../...#
###/.../#.# => ##../.#../##.#/..#.
###/#../#.# => ..##/#.#./####/.#..
#.#/.#./#.# => ...#/...#/#..#/#.#.
###/.#./#.# => ..../####/.##./.#.#
###/##./#.# => #..#/.#.#/..##/####
#.#/#.#/#.# => #.#./..#./...#/.#..
###/#.#/#.# => ...#/##.#/.###/.#..
#.#/###/#.# => .#.#/###./.#../.##.
###/###/#.# => ...#/.###/.#.#/###.
###/#.#/### => #.##/.#.#/...#/.#..
###/###/### => ..##/.#../#.#./.#.."""
mapping = make_mapping(input)
len(mapping)
528
grid = to_array(""".#.
..#
###""", splitter='\n')
for _ in range(5):
if grid.shape[0] % 2 == 0:
n_grid = grid.shape[0] // 2
new_grid = []
for r in range(n_grid):
new_line = []
for c in range(n_grid):
sq = grid[2*r:2*(r+1),
2*c:2*(c+1)]
assert array_hash(sq) in mapping
new_line.append(mapping[array_hash(sq)])
new_grid.append(new_line)
elif grid.shape[0] % 3 == 0:
n_grid = grid.shape[0] // 3
new_grid = []
for r in range(n_grid):
new_line = []
for c in range(n_grid):
sq = grid[3*r:3*(r+1),
3*c:3*(c+1)]
assert array_hash(sq) in mapping
new_line.append(mapping[array_hash(sq)])
new_grid.append(new_line)
grid = build_new_array(new_grid)
np.sum(grid)
117
grid = to_array(""".#.
..#
###""", splitter='\n')
for _ in range(18):
if grid.shape[0] % 2 == 0:
n_grid = grid.shape[0] // 2
new_grid = []
for r in range(n_grid):
new_line = []
for c in range(n_grid):
sq = grid[2*r:2*(r+1),
2*c:2*(c+1)]
assert array_hash(sq) in mapping
new_line.append(mapping[array_hash(sq)])
new_grid.append(new_line)
elif grid.shape[0] % 3 == 0:
n_grid = grid.shape[0] // 3
new_grid = []
for r in range(n_grid):
new_line = []
for c in range(n_grid):
sq = grid[3*r:3*(r+1),
3*c:3*(c+1)]
assert array_hash(sq) in mapping
new_line.append(mapping[array_hash(sq)])
new_grid.append(new_line)
grid = build_new_array(new_grid)
np.sum(grid)
2026963
test_input = """..#
#..
..."""
3 // 2
1
from collections import defaultdict
def to_grid(input):
grid = defaultdict(int)
lines = input.split('\n')
for ind_row, line in enumerate(lines):
for ind_col in range(len(line)):
if line[ind_col] == '#':
grid[(ind_row, ind_col)] = 1
return grid
grid = to_grid(test_input)
grid
defaultdict(int, {(0, 2): 1, (1, 0): 1})
def count_infections(input, pos, bursts):
grid = to_grid(input)
directions = [(-1, 0), (0, 1), (1, 0), (0, -1)]
direction = 0
infections = 0
for _ in range(bursts):
if grid[pos] == 1:
direction = (direction + 1) % len(directions)
grid[pos] = 0
else:
direction = (direction - 1) % len(directions)
grid[pos] = 1
infections += 1
pos = (pos[0] + directions[direction][0],
pos[1] + directions[direction][1])
return infections
count_infections(test_input, pos=(1, 1), bursts=7)
5
count_infections(test_input, pos=(1, 1), bursts=70)
41
count_infections(test_input, pos=(1, 1), bursts=10000)
5587
input = """#.#.#.##.#.##.###.#.###.#
.#..#.....#..#######.##.#
......###..##..###..#...#
##....#.#.#....#..#..#..#
#..#....#.##.#.#..#..#.#.
..##..##.##..##...#...###
..#.#....#..####.##.##...
###...#.#...#.######...#.
..#####...###..#####.#.##
...#..#......####.##..#.#
#...##..#.#####...#.##...
..#.#.###.##.##....##.###
##.##...###....#######.#.
#.#...#.#..#.##..##..##.#
.#...###...#..#..####....
####...#...##.####..#.#..
......#.....##.#.##....##
###.......####..##.#.##..
....###.....##.##..###.#.
.##..##.#.###.###..#.###.
..#..##.######.##........
#..#.#..#.###....##.##..#
.##.#.#...######...##.##.
##..#..#..##.#.#..#..####
#######.#.######.#.....##"""
count_infections(input, pos=(12, 12), bursts=10000)
5411
grid.items()
dict_items([((0, 2), 0), ((1, 0), 0), ((1, 1), 1), ((0, 0), 0), ((0, -1), 1), ((1, -1), 1), ((0, 1), 1), ((-1, 1), 0), ((-1, 0), 1), ((-1, 2), 0), ((-2, 2), 0), ((-2, 1), 1), ((-2, 3), 0), ((-3, 3), 1), ((-3, 2), 1), ((-1, 3), 0), ((-1, 4), 0), ((-2, 4), 1), ((0, 4), 0), ((0, 5), 1), ((-1, 5), 1), ((0, 3), 0), ((1, 3), 0), ((1, 4), 1), ((1, 2), 0), ((2, 2), 1), ((2, 3), 1)])
def count_infections2(input, pos, bursts):
grid = to_grid(input)
directions = [(-1, 0), (0, 1), (1, 0), (0, -1)]
direction = 0
infections = 0
for _ in range(bursts):
if grid[pos] == 0:
direction = (direction - 1) % len(directions) # turn left
grid[pos] = 'W'
elif grid[pos] == 'W':
grid[pos] = 1
infections += 1
elif grid[pos] == 1:
direction = (direction + 1) % len(directions) # turn right
grid[pos] = 'F'
elif grid[pos] == 'F':
direction = (direction + 2) % len(directions) # reverse
grid[pos] = 0
# then step
pos = (pos[0] + directions[direction][0],
pos[1] + directions[direction][1])
return infections
count_infections2(test_input, pos=(1, 1), bursts=100)
26
count_infections2(test_input, pos=(1, 1), bursts=10000000)
2511944
Ok, real input now.
count_infections2(input, pos=(12, 12), bursts=10000000)
2511416
input = """set b 67
set c b
jnz a 2
jnz 1 5
mul b 100
sub b -100000
set c b
sub c -17000
set f 1
set d 2
set e 2
set g d
mul g e
sub g b
jnz g 2
set f 0
sub e -1
set g e
sub g b
jnz g -8
sub d -1
set g d
sub g b
jnz g -13
jnz f 2
sub h -1
set g b
sub g c
jnz g 2
jnz 1 3
sub b -17
jnz 1 -23"""
def isdigit(s):
try:
int(s)
is_dig = True
except ValueError:
is_dig = False
return is_dig
def get_value(instr, registers):
if isdigit(instr):
return int(instr)
else:
return registers[instr]
import re
def count_muls(input, registers=None, debug=False):
lines = input.split('\n')
if registers is None:
registers = dict(zip('abcdefgh', [0, 0, 0, 0, 0, 0, 0, 0]))
mulcount = 0
index = 0
while index > -1 and index < len(lines):
jump = False
line = lines[index]
m = re.match("(set|sub|mul|jnz) (\w)\s?([-\w\d]+)?", line)
assert m is not None
instruction, arg1, arg2 = m.groups()
if debug:
print(f"line: {index}, '{line}'")
if arg1 == 'h':
print(f"line {index} : {line}, h={registers['h']}")
if instruction == 'set':
registers[arg1] = get_value(arg2, registers)
elif instruction == 'sub':
registers[arg1] -= get_value(arg2, registers)
elif instruction == 'mul':
registers[arg1] = registers[arg1] * get_value(arg2, registers)
mulcount += 1
elif instruction == 'jnz':
if get_value(arg1, registers) != 0:
jump = True
index += get_value(arg2, registers)
if not jump:
index += 1
return mulcount, registers
count_muls(input)
(4225, {'a': 0, 'b': 67, 'c': 67, 'd': 67, 'e': 67, 'f': 1, 'g': 0, 'h': 0})
def step(input, index, registers, debug=True):
lines = input.split('\n')
jump = False
line = lines[index]
m = re.match("(set|sub|mul|jnz) (\w)\s?([-\w\d]+)?", line)
assert m is not None
instruction, arg1, arg2 = m.groups()
if debug:
print(f"line: {index}, '{line}'")
if arg1 == 'h':
print(f"line {index} : {line}, h={registers['h']}")
if instruction == 'set':
registers[arg1] = get_value(arg2, registers)
elif instruction == 'sub':
registers[arg1] -= get_value(arg2, registers)
elif instruction == 'mul':
registers[arg1] = registers[arg1] * get_value(arg2, registers)
elif instruction == 'jnz':
if get_value(arg1, registers) != 0:
jump = True
index += get_value(arg2, registers)
if not jump:
index += 1
return index, registers
from ipywidgets import interact_manual
registers = dict(zip('abcdefgh', [0, 0, 0, 0, 0, 0, 0, 0]))
index = 0
@interact_manual
def step_system():
global registers, index
index, registers = step(input, index, registers)
print(registers)
Failed to display Jupyter Widget of type interactive
.
If you're reading this message in the Jupyter Notebook or JupyterLab Notebook, it may mean that the widgets JavaScript is still loading. If this message persists, it likely means that the widgets JavaScript library is either not installed or not enabled. See the Jupyter Widgets Documentation for setup instructions.
If you're reading this message in another frontend (for example, a static rendering on GitHub or NBViewer), it may mean that your frontend doesn't currently support widgets.
Let's try to translate this to a Python program to see the logic appear. First, our unit test (to check it yields 4225).
count = 0
a = 0
b = c = d = e = f = g = h = 0
b = 67 #set b 67
c = b #set c b
if a != 0:
b = b * 100; count += 1
b -= -100000
c = b
c -= -17000
while True:
f = 1
d = 2
while True:
e = 2
while True:
g = d
g *= e; count += 1
g -= b
if g == 0:
f = 0
e -= -1
g = e
g -= b
if g == 0:
break
d -= -1
g = d
g -= b
if g == 0:
break
if f == 0:
h -= -1
g = b
g -= c
if g == 0:
break
b -= -17
print(count)
4225
Now let's modify the program and get down to the logic.
d = f = g = h = 0
b = 106700
c = 123700
while True:
f = 1
d = 2
while True:
if b % d == 0:
f = 0
d += 1
if d == b:
break
if f == 0:
h += 1
if b == c:
break
b += 17
print('+', end='')
print()
print(h)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 905
input = """24/14
30/24
29/44
47/37
6/14
20/37
14/45
5/5
26/44
2/31
19/40
47/11
0/45
36/31
3/32
30/35
32/41
39/30
46/50
33/33
0/39
44/30
49/4
41/50
50/36
5/31
49/41
20/24
38/23
4/30
40/44
44/5
0/43
38/20
20/16
34/38
5/37
40/24
22/17
17/3
9/11
41/35
42/7
22/48
47/45
6/28
23/40
15/15
29/12
45/11
21/31
27/8
18/44
2/17
46/17
29/29
45/50"""
test_input = """0/2
2/2
2/3
3/4
3/5
0/1
10/1
9/10"""
def parse_input(input):
cables = []
for line in input.split('\n'):
cables.append(list(map(int, line.split('/'))))
return cables
parse_input(test_input)
[[0, 2], [2, 2], [2, 3], [3, 4], [3, 5], [0, 1], [10, 1], [9, 10]]
def bridge_strength(bridge):
strength = 0
for item in bridge:
strength += item[0] + item[1]
return strength
bridge_strength(parse_input(test_input))
57
bridge_strength([])
0
bricks = parse_input(test_input)
bridge = []
bricks
[[0, 2], [2, 2], [2, 3], [3, 4], [3, 5], [0, 1], [10, 1], [9, 10]]
Let's build all the blocks.
def build_all_bridges(input):
bricks = parse_input(input)
unfinished = [([], bricks)]
finished = []
while len(unfinished) > 0:
bridge, bricks = unfinished.pop()
# add a chain
if len(bridge) == 0:
# find a brick that starts with 0
candidates = [ind for ind, brick in enumerate(bricks) if (brick[0] == 0 or brick[1] ==0)]
for candidate in candidates:
new_bricks = bricks[:]
candidate = new_bricks.pop(candidate)
candidate = sorted(candidate)
new_bridge = bridge[:]
new_bridge.append(candidate)
unfinished.append([new_bridge, new_bricks])
else:
# append a compatible brick to the end of the chain
previous = bridge[-1][1]
candidates = [ind for ind, brick in enumerate(bricks) if (brick[0] == previous or brick[1] == previous)]
if len(candidates) > 0:
for candidate in candidates:
new_bricks = bricks[:]
candidate = new_bricks.pop(candidate)
if candidate[0] != previous:
candidate = list(reversed(candidate))
new_bridge = bridge[:]
new_bridge.append(candidate)
unfinished.append([new_bridge, new_bricks])
else:
finished.append([bridge, bricks])
return finished
finished = build_all_bridges(test_input)
max(map(bridge_strength, [item[0] for item in finished]))
31
finished = build_all_bridges(input)
max(map(bridge_strength, [item[0] for item in finished]))
2006
max([len(bridge) for bridge, bricks in finished])
34
max([bridge_strength(bridge) for bridge, bricks in finished if len(bridge) == 34])
1994
def checksum(tape):
return sum(tape.values())
from collections import defaultdict
tape = defaultdict(int)
cursor = 0
state = 'A'
for _ in range(6):
if state == 'A':
if tape[cursor] == 0:
tape[cursor] = 1
cursor += 1
state = 'B'
elif tape[cursor] == 1:
tape[cursor] = 0
cursor -= 1
state = 'B'
elif state == 'B':
if tape[cursor] == 0:
tape[cursor] = 1
cursor -= 1
state = 'A'
elif tape[cursor] == 1:
tape[cursor] = 1
cursor += 1
state = 'A'
tape
defaultdict(int, {-2: 1, -1: 1, 0: 0, 1: 1})
checksum(tape)
3
Now on to the real instructions:
tape = defaultdict(int)
cursor = 0
state = 'A'
for _ in range(12481997):
if state == 'A':
if tape[cursor] == 0:
tape[cursor] = 1
cursor += 1
state = 'B'
else:
tape[cursor] = 0
cursor -= 1
state = 'C'
elif state == 'B':
if tape[cursor] == 0:
tape[cursor] = 1
cursor -= 1
state = 'A'
else:
tape[cursor] = 1
cursor += 1
state = 'D'
elif state == 'C':
if tape[cursor] == 0:
tape[cursor] = 0
cursor -= 1
state = 'B'
else:
tape[cursor] = 0
cursor -= 1
state = 'E'
elif state == 'D':
if tape[cursor] == 0:
tape[cursor] = 1
cursor += 1
state = 'A'
else:
tape[cursor] = 0
cursor += 1
state = 'B'
elif state == 'E':
if tape[cursor] == 0:
tape[cursor] = 1
cursor -= 1
state = 'F'
else:
tape[cursor] = 1
cursor -= 1
state = 'C'
elif state == 'F':
if tape[cursor] == 0:
tape[cursor] = 1
cursor += 1
state = 'D'
else:
tape[cursor] = 1
cursor += 1
state = 'A'
checksum(tape)
3362