diff --git a/2017/d01/ex1/ex1.py b/2017/d01/ex1/ex1.py new file mode 100755 index 0000000..7d20719 --- /dev/null +++ b/2017/d01/ex1/ex1.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python + +import sys + + +def solve(input: str) -> int: + nums = [int(n) for n in input.strip()] + return sum(n for n, m in zip(nums, nums[1:] + nums[:1]) if n == m) + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d01/ex1/input b/2017/d01/ex1/input new file mode 100644 index 0000000..1c58802 --- /dev/null +++ b/2017/d01/ex1/input @@ -0,0 +1 @@ +5255443714755555317777152441826784321918285999594221531636242944998363716119294845838579943562543247239969555791772392681567883449837982119239536325341263524415397123824358467891963762948723327774545715851542429832119179139914471523515332247317441719184556891362179267368325486642376685657759623876854958721636574219871249645773738597751429959437466876166273755524873351452951411628479352522367714269718514838933283861425982562854845471512652555633922878128558926123935941858532446378815929573452775348599693982834699757734714187831337546474515678577158721751921562145591166634279699299418269158557557996583881642468274618196335267342897498486869925262896125146867124596587989531495891646681528259624674792728146526849711139146268799436334618974547539561587581268886449291817335232859391493839167111246376493191985145848531829344198536568987996894226585837348372958959535969651573516542581144462536574953764413723147957237298324458181291167587791714172674717898567269547766636143732438694473231473258452166457194797819423528139157452148236943283374193561963393846385622218535952591588353565319432285579711881559343544515461962846879685879431767963975654347569385354482226341261768547328749947163864645168428953445396361398873536434931823635522467754782422557998262858297563862492652464526366171218276176258582444923497181776129436396397333976215976731542182878979389362297155819461685361676414725597335759976285597713332688275241271664658286868697167515329811831234324698345159949135474463624749624626518247831448143876183133814263977611564339865466321244399177464822649611969896344874381978986453566979762911155931362394192663943526834148596342268321563885255765614418141828934971927998994739769141789185165461976425151855846739959338649499379657223196885539386154935586794548365861759354865453211721551776997576289811595654171672259129335243531518228282393326395241242185795828261319215164262237957743232558971289145639852148197184265766291885259847236646615935963759631145338159257538114359781854685695429348428884248972177278361353814766653996675994784195827214295462389532422825696456457332417366426619555 diff --git a/2017/d01/ex2/ex2.py b/2017/d01/ex2/ex2.py new file mode 100755 index 0000000..e3596b2 --- /dev/null +++ b/2017/d01/ex2/ex2.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python + +import sys + + +def solve(input: str) -> int: + nums = [int(n) for n in input.strip()] + half = len(nums) // 2 + return sum(n for n, m in zip(nums, nums[half:] + nums[:half]) if n == m) + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d01/ex2/input b/2017/d01/ex2/input new file mode 100644 index 0000000..1c58802 --- /dev/null +++ b/2017/d01/ex2/input @@ -0,0 +1 @@ +5255443714755555317777152441826784321918285999594221531636242944998363716119294845838579943562543247239969555791772392681567883449837982119239536325341263524415397123824358467891963762948723327774545715851542429832119179139914471523515332247317441719184556891362179267368325486642376685657759623876854958721636574219871249645773738597751429959437466876166273755524873351452951411628479352522367714269718514838933283861425982562854845471512652555633922878128558926123935941858532446378815929573452775348599693982834699757734714187831337546474515678577158721751921562145591166634279699299418269158557557996583881642468274618196335267342897498486869925262896125146867124596587989531495891646681528259624674792728146526849711139146268799436334618974547539561587581268886449291817335232859391493839167111246376493191985145848531829344198536568987996894226585837348372958959535969651573516542581144462536574953764413723147957237298324458181291167587791714172674717898567269547766636143732438694473231473258452166457194797819423528139157452148236943283374193561963393846385622218535952591588353565319432285579711881559343544515461962846879685879431767963975654347569385354482226341261768547328749947163864645168428953445396361398873536434931823635522467754782422557998262858297563862492652464526366171218276176258582444923497181776129436396397333976215976731542182878979389362297155819461685361676414725597335759976285597713332688275241271664658286868697167515329811831234324698345159949135474463624749624626518247831448143876183133814263977611564339865466321244399177464822649611969896344874381978986453566979762911155931362394192663943526834148596342268321563885255765614418141828934971927998994739769141789185165461976425151855846739959338649499379657223196885539386154935586794548365861759354865453211721551776997576289811595654171672259129335243531518228282393326395241242185795828261319215164262237957743232558971289145639852148197184265766291885259847236646615935963759631145338159257538114359781854685695429348428884248972177278361353814766653996675994784195827214295462389532422825696456457332417366426619555 diff --git a/2017/d02/ex1/ex1.py b/2017/d02/ex1/ex1.py new file mode 100755 index 0000000..01e3a88 --- /dev/null +++ b/2017/d02/ex1/ex1.py @@ -0,0 +1,23 @@ +#!/usr/bin/env python + +import sys + + +def solve(input: str) -> int: + def parse(input: str) -> list[list[int]]: + return [[int(n) for n in line.split()] for line in input.splitlines()] + + def checksum(row: list[int]) -> int: + return max(row) - min(row) + + sheet = parse(input) + return sum(map(checksum, sheet)) + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d02/ex1/input b/2017/d02/ex1/input new file mode 100644 index 0000000..1dd09df --- /dev/null +++ b/2017/d02/ex1/input @@ -0,0 +1,16 @@ +5048 177 5280 5058 4504 3805 5735 220 4362 1809 1521 230 772 1088 178 1794 +6629 3839 258 4473 5961 6539 6870 4140 4638 387 7464 229 4173 5706 185 271 +5149 2892 5854 2000 256 3995 5250 249 3916 184 2497 210 4601 3955 1110 5340 +153 468 550 126 495 142 385 144 165 188 609 182 439 545 608 319 +1123 104 567 1098 286 665 1261 107 227 942 1222 128 1001 122 69 139 +111 1998 1148 91 1355 90 202 1522 1496 1362 1728 109 2287 918 2217 1138 +426 372 489 226 344 431 67 124 120 386 348 153 242 133 112 369 +1574 265 144 2490 163 749 3409 3086 154 151 133 990 1002 3168 588 2998 +173 192 2269 760 1630 215 966 2692 3855 3550 468 4098 3071 162 329 3648 +1984 300 163 5616 4862 586 4884 239 1839 169 5514 4226 5551 3700 216 5912 +1749 2062 194 1045 2685 156 3257 1319 3199 2775 211 213 1221 198 2864 2982 +273 977 89 198 85 1025 1157 1125 69 94 919 103 1299 998 809 478 +1965 6989 230 2025 6290 2901 192 215 4782 6041 6672 7070 7104 207 7451 5071 +1261 77 1417 1053 2072 641 74 86 91 1878 1944 2292 1446 689 2315 1379 +296 306 1953 3538 248 1579 4326 2178 5021 2529 794 5391 4712 3734 261 4362 +2426 192 1764 288 4431 2396 2336 854 2157 216 4392 3972 229 244 4289 1902 diff --git a/2017/d02/ex2/ex2.py b/2017/d02/ex2/ex2.py new file mode 100755 index 0000000..779ac63 --- /dev/null +++ b/2017/d02/ex2/ex2.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python + +import itertools +import sys + + +def solve(input: str) -> int: + def parse(input: str) -> list[list[int]]: + return [[int(n) for n in line.split()] for line in input.splitlines()] + + def evenly_divide(row: list[int]) -> int: + for a, b in itertools.combinations(sorted(row), 2): + assert a <= b # Sanity check + if b % a: + continue + return b // a + assert False # Sanity check + + sheet = parse(input) + return sum(map(evenly_divide, sheet)) + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d02/ex2/input b/2017/d02/ex2/input new file mode 100644 index 0000000..1dd09df --- /dev/null +++ b/2017/d02/ex2/input @@ -0,0 +1,16 @@ +5048 177 5280 5058 4504 3805 5735 220 4362 1809 1521 230 772 1088 178 1794 +6629 3839 258 4473 5961 6539 6870 4140 4638 387 7464 229 4173 5706 185 271 +5149 2892 5854 2000 256 3995 5250 249 3916 184 2497 210 4601 3955 1110 5340 +153 468 550 126 495 142 385 144 165 188 609 182 439 545 608 319 +1123 104 567 1098 286 665 1261 107 227 942 1222 128 1001 122 69 139 +111 1998 1148 91 1355 90 202 1522 1496 1362 1728 109 2287 918 2217 1138 +426 372 489 226 344 431 67 124 120 386 348 153 242 133 112 369 +1574 265 144 2490 163 749 3409 3086 154 151 133 990 1002 3168 588 2998 +173 192 2269 760 1630 215 966 2692 3855 3550 468 4098 3071 162 329 3648 +1984 300 163 5616 4862 586 4884 239 1839 169 5514 4226 5551 3700 216 5912 +1749 2062 194 1045 2685 156 3257 1319 3199 2775 211 213 1221 198 2864 2982 +273 977 89 198 85 1025 1157 1125 69 94 919 103 1299 998 809 478 +1965 6989 230 2025 6290 2901 192 215 4782 6041 6672 7070 7104 207 7451 5071 +1261 77 1417 1053 2072 641 74 86 91 1878 1944 2292 1446 689 2315 1379 +296 306 1953 3538 248 1579 4326 2178 5021 2529 794 5391 4712 3734 261 4362 +2426 192 1764 288 4431 2396 2336 854 2157 216 4392 3972 229 244 4289 1902 diff --git a/2017/d03/ex1/ex1.py b/2017/d03/ex1/ex1.py new file mode 100755 index 0000000..64f7dbb --- /dev/null +++ b/2017/d03/ex1/ex1.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python + +import itertools +import sys +from typing import NamedTuple + + +class Point(NamedTuple): + x: int + y: int + + +def solve(input: str) -> int: + def target_coord(target: int) -> Point: + for dist in itertools.count(): + side = dist * 2 + 1 + bot_right = side * side + if bot_right < target: + continue + # Target must be in the last loop, before bot_right + bot_left = bot_right - side + 1 + top_left = bot_left - side + 1 + top_right = top_left - side + 1 + if bot_left <= target <= bot_right: + return Point(dist - (bot_right - target), -dist) + if top_left <= target <= bot_left: + return Point(-dist, -dist + (bot_left - target)) + if top_right <= target <= top_left: + return Point(-dist + (top_left - target), dist) + if target <= top_right: + return Point(dist, dist - (top_right - target)) + assert False # Sanity check + assert False # Sanity check + + target = int(input) + coord = target_coord(target) + return abs(coord.x) + abs(coord.y) + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d03/ex1/input b/2017/d03/ex1/input new file mode 100644 index 0000000..63320e1 --- /dev/null +++ b/2017/d03/ex1/input @@ -0,0 +1 @@ +347991 diff --git a/2017/d03/ex2/ex2.py b/2017/d03/ex2/ex2.py new file mode 100755 index 0000000..e6ca8c5 --- /dev/null +++ b/2017/d03/ex2/ex2.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python + +import itertools +import sys +from collections.abc import Iterator +from typing import NamedTuple + + +class Point(NamedTuple): + x: int + y: int + + def neighbours(self) -> Iterator["Point"]: + for dx, dy in itertools.product((-1, 0, 1), repeat=2): + if dx == 0 and dy == 0: + continue + yield Point(self.x + dx, self.y + dy) + + +def solve(input: str) -> int: + def spiral() -> Iterator[Point]: + yield Point(0, 0) + for dist in itertools.count(1): + side = dist * 2 + 1 + for start, dx, dy in ( + (Point(dist, -dist), 0, 1), + (Point(dist, dist), -1, 0), + (Point(-dist, dist), 0, -1), + (Point(-dist, -dist), 1, 0), + ): + # We need a non-zero step for `range`, and to make it inclusive + stepx = dx if dx != 0 else 1 + stepy = dy if dy != 0 else 1 + # Don't include the corner, which was already output in previous loop + # Hence, `side - 1` points in the range + xs = range(start.x + dx, start.x + (side - 1) * dx + stepx, stepx) + ys = range(start.y + dy, start.y + (side - 1) * dy + stepy, stepy) + yield from (Point(x, y) for x, y in itertools.product(xs, ys)) + + target = int(input) + values = {Point(0, 0): 1} + # Skip the origin, which we already know + for p in itertools.islice(spiral(), 1, None): + if (res := sum(values.get(n, 0) for n in p.neighbours())) > target: + return res + values[p] = res + assert False # Sanity check + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d03/ex2/input b/2017/d03/ex2/input new file mode 100644 index 0000000..63320e1 --- /dev/null +++ b/2017/d03/ex2/input @@ -0,0 +1 @@ +347991 diff --git a/2017/d04/ex1/ex1.py b/2017/d04/ex1/ex1.py new file mode 100755 index 0000000..3904182 --- /dev/null +++ b/2017/d04/ex1/ex1.py @@ -0,0 +1,23 @@ +#!/usr/bin/env python + +import sys + + +def solve(input: str) -> int: + def parse(input: str) -> list[list[str]]: + return [line.split() for line in input.splitlines()] + + def validate_passphrase(passphrase: list[str]) -> bool: + return len(set(passphrase)) == len(passphrase) + + passphrases = parse(input) + return sum(map(validate_passphrase, passphrases)) + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d04/ex1/input b/2017/d04/ex1/input new file mode 100644 index 0000000..b7384b6 --- /dev/null +++ b/2017/d04/ex1/input @@ -0,0 +1,512 @@ +vxjtwn vjnxtw sxibvv mmws wjvtxn icawnd rprh +fhaa qwy vqbq gsswej lxr yzl wakcige mwjrl +bhnlow huqa gtbjc gvj wrkyr jgvmhj bgs umo ikbpdto +drczdf bglmf gsx flcf ojpj kzrwrho owbkl dgrnv bggjevc +ndncqdl lncaugj mfa lncaugj skt pkssyen rsb npjzf +kdd itdyhe pvljizn cgi +jgy pyhuq eecb phwkyl oeftyu pyhuq hecxgti tpadffm jgy +zvc qdk mlmyj kybbh lgbb fvfzcer frmaxa yzgw podt dbycoii afj +zfr msn mns leqem frz +golnm ltizhd dvwv xrizqhd omegnez nan yqajse lgef +gbej rvek aehiz bgje +yej cphl jtp swe axhljo ddwk obwsq mnewiwu klddd +ipiev henods rpn qfpg gjfdgs zcpt sswab eosdhn teeil +gzje ydu oiu jzge udy sqjeoo olxej +mgn gox tcifta vzc lxry gox gox mvila qdl jipjnw dvu +hxk xhk unhdmdz yomze povrt nbww bxu qqsqc rvuk tgffy twddm +fyx fyx nzkm fyx +ymnoc zogudq yncom tqrob sidvy dfuu ccjpiej yidvs +bxebny akknwxw jeyxqvj syl cedps akknwxw akknwxw zpvnf kuoon pnkejn wqjgc +kcebrkj zmuf ueewxhi mgyepbr nleviqc dez +argavx fqguii gebohvw klnrq rkqnl goevhbw +ywqi abwi eswph nlplbl pswhe lnqx fpgk lllnpb +abpb mpkw ampey yapme xnuyj +tmuaq asd bhbs sqmbsnw wsbnqsm ydwdncn rpa vrllkh +dnltf cck djy ydj +wywwl scezo clowuz dkgqaj dohyzcp +diimshr vlmsnlj whqb dkicau ckdaiu terp kgcii npqc vvzrqzv nol +wfpxe sqf tbb ruqpcq zfgb +kajykuz tsxgtys vuz kglmgg ihnnn plyjxj rcrvo mij plyjxj jqiur +pxs hmet dwgvd mvhkvn cjxg yvid vmhnkv kwxz rfemsua wdgvd okixk +lzwxas ddtyeh ivyama crrhxdt hedytd jfw +vjfv oyd fvjv kfwlj mradbx mckseee xradmb +llga yytxyvj lstspek lstspek lstspek +fabgf wgop fabgf bvsfoaw +grqnbvo tntomdw hizg tmotdwn +mau ufkw cxfi rhehj ebe xyv rhehj acxngo arl qtl rhehj +kbkto stqjtm tpcwshj saerkrt pffj dthp pfjf axc gwmmfdw glnqtdy xmskw +veff zqm hzhxap lgwnwq twsdk mqz xbbarbv cdx fhnwt qjcji bbvbrxa +fjw eds hofskl nkbsv des hvx xyn +qzort qzort qesz rtq oonk vwzlw wapoj ifr cta +pja hvy nhjg paj smtfe fmtse +xvi tcjj xvkjtab nqftt aumijl xkd cmilegf hvsmodx uuo igmcelf mslkq +mdhezgv lelzy kzfvsqu hvmvaxw pxiqjc hvmvaxw kzfvsqu +hsicsav csshrhx znojm eapi lhmzq bbwnz seao gfk azk +pup xtgjyzy wqt ijeektl +ktwh qdegzs btj pfwzzho +xdkmdm izqtjrr iqbke vtp +fmrbpdr zpccv tmtwx tmtwx tmtwx bys +ehphfgq idd ehphfgq ehphfgq uphe hvrc jcscne nbnslqy +xzqucgj fcih fljk barz lvln hcfi azrb +cmfmclv mfgvifw rnxgn jpg bsnq wnduzj ymsdx smdxy pqomf +rlqsm qrsml emts qsmcowv scmvwqo +tshzkpa zwtpda ftsiwo nil tpawdz kjpa ptzashk +mnep sfc swjawtd vnwud gyulluw zpa kmwyvln evd btnmoi dnwe +jwq scepq redoxmw rbdzsa wlkzso kxpm bttg vxuc moxwdre ijtdd rzsabd +wpvo dsjox amuwjm pls lgwksva ctakgpl rmsjj lzwwpr zzm udg +bji obbn tmwyc afpmkxr glvrd kahhgpq rna qkxyntp vmd mloshc +ymq rtnr nxjzm pqiddrn qmy vgxw ull +mmzk ikge zhtzhs xyo qwe lll gjjm icetq qgrr mzwqa knec +kxomfck idlh xrbowo nyetbnl qskh xuwkkxe upmmmf zhvuyp +srcwyhl czgr xmhuws jueyh xcuib xhsuwm bxuic +crkueh beyxopz xpyozbe dxgadw qktmce rjropjg +lbktun imdpcp fkssp fhcpt fehho jqdnt aoewa +jmun pynzjo trs ijwcc pelf oft pcsqdxg zvql +mneaaq vjrg jidlrzz phd mvxpivd ldkhu +sao xqw nrukn gatkz quscpsx vmz oscoeb +goi wzxhb rrk aylqqcd mlcbvvf ororn heptid kdu byevr +qsj lsbieef deez vzwdx hez iwd +lmgfb keqt mqbsuis ogrr errbi xiqe xsszacp +ato hmk zfjaj kmh plxup cida dqd pfwh nkbxvpr buajw pxkrvnb +cli bdwu vrwott vowtrt grle +zisgks ciuaqr zvk tcb kvz ugmtv +oegrojm wofpwp gnaocx rweyull ellhwow dtefylf dqsz oiw varr bcirpf oxusz +oydkmib oydkmib yefts gbl gbl +sruwjk pgkrp kea gppkr zdcky cfljh +obpxbax jhpcrj slcsa lgd fborz vvpaus wsrpsws ifijuzo +rixz jwh uhdaf hoacv hdfua +kntk qprmfow kntk tbmcjx +vnqe ooyxtb ixl hdmnpn orpz ykspl xromvj kowtq wmho gquos +ynk xjjqw sut lmtub bmtlu zdo dztlk bpkuul smhpx rbczg +zals csdbe sbj dibicq kdfwwt +coyy pjddlfc lwvhyms ldjdcfp ryubz kfwst dqjrjja jtv jjjaqrd +jaexhms iqoiln ewgyr exmnrr fsr lgmyy fdofhn +pjgyn hfoz zbcnz nczbz +ovntivq vcey vdrkse giu ohyaxy ionyy fvpn yvwrgrv qta +yelpz htbk njgeyub tggh mdthzp fwyux rduqli twlhfp pnh gywif ttn +yxhsbil vplsmmx rgtq grsf lyibxhs hctnkfr awg lmloz jroy lpgb wga +kzytass szyksat tyskasz ehmhhu +jkus hwjv ymnnkk yffugg cvtnits gbl lywkn szihcn dbrbalf rxqpbqh +koyfcef wkom mwok qgjrytl +slmhry lcr slmhry lcr +mvoxbt cfkz purnsui xar ouhtc thbx +xcdifw kvvxyrj knac qmypw bou tmukqy eusgaoo bktiu +ablgnhb axumg bwpxnjp zqpc vtw ghhoxu zqpc znfpvl ghhoxu jlg ntdk +vmvc cdkhrx cvz rvxk mmcuo udpcayd lsmm gufduzt linj +mgyeqkv hqionh rgnqgz kkc qrgnzg egkmqyv topdp +koa dimwx gjxa atlfdy +uuez ueuz zeuu ezo daq +ofpaw bgomvmt mqa dexpy mbipd epyzcoa nuwrh vwly xppz qkjrleo rwhnu +wok grxk lchvtg plrzr lwaax cfeu ijapws dmkdwc cfeu +zkd hysxxip hlydw wicsvy gbwoaw dapre ktjn dzg uri +blzh hblz qgmjceg fyf +vkhpn xnc ogva pjrh cxn hkpnv +aja cldzta tdcazl lorr fwmxxh knilf ges tdhp gnlo vihrl +ucpr peair nlbmc msfg +trv ppq bmo xqd vbui yegsr xqxawu fvuz aclhspo wnan +loiq fvg kare rmgq hir rzo ossd ziw renh ygtkjys vda +xmans kio alexs ujekfl vvf ddghn +fcxvsf bjuytet zrzsobo uhn mlfzhlq bjefs +zys htlqvky plno pbcqfuf fjwc vshkxrl lonp lyzmy dqmui vyyc glad +tlc krhcter krhcter bolk tlc opryl +idcii dverl uswb wusb zgax zhbt gjsnlso yhs +cti npri rcbxjdw ollj nirp ghfvxzh +blyhug aflnrrz zudyw ccnstq cyoju jxtqoj ntuknjq gunjiwy ycuoj igac cqctns +bul yehpnw jifjrhc ifetu ufrodp hqzpeqf hdvpc qtvgxg ibb wcxsitx xztshb +xzct scetn eoaufyo jtudgkx xrpgxip lpubtq juezstc nuc hokswh obkf ipbu +nfq lwpmn qltal xnphsqs zlrgf iewtrtd mqzsob duokpy kfbqs icg +vil zjz xkqrvni uay ystq +terrrnt lnfg clm lbs ptpiy ybcuup ayzjm pqugx lmc yppit mbf +dtajh vqivg vnblt fmn qxkw stiwna pclrrr fro khu wbslnqp tjyosu +uqlehn tjuiy obt uedct bbwiq uxndqn +hiqfovy xiimca zwne ivunvjk cmctzi mxnnrx dclib xzaoq ieztkg +shpr xuorihj chuwq poadbo mhtvex gymsp iltgl sypjfua fmyh sgiv +alv nxjt txnj bhact +vjvtrex obmrxk fgigs meixbc fggsi awi rxdjpeg +ypwo oicmbdw xbpeeyj uabzj cjvutvc oicmbdw immtmks +exijri hogl epr gzdqyur xiiejr pre ihzlgzu +rlh qfhx lrh qmvrx +kogq okhd mivmivb mivmivb okhd +taekt nhjaa znbaahn iaospxy jawwf +ytdvq ghtqwud jkiig mre kzmmjxu jba nwpykc +ktyzr aczd exgadhb uinrgac izazxky yyfe +yrifb qgc lsiuapg teyelxn ugezu +wdzkc ltx fkhncb hwrecp kfbchn sfcpc hjvq +rjdjyt ahwxh nvggsmx lmz oshd xbcik powse ahhxw yhiq gxmgsnv +qdr qjnam gag qjamn kooek mqnaj +pza gml opf ilfbblu kjp luilbfb rhfrzgp ixagj ofp +yphz runy dhull bozcsgk wfxekrd akgkbz urcphc +tfyxwol lhcl npik beug +szatel yfkve yfkve lzqhs +yjzqon pcjibu bdncmcl kczuymm pbmg nyn +rerqvs aoxucwi pmstl sstawu joqu abvcchg mvgjn mslpt vhmfkr utusuh +gqbec jjpqdh yeaiavi nledfi jhzwc vyxjpf momnm vnknjs nvgjzik ipm +psirt rispt lrkgma irtsp +jbbaph xvunete gsvnr mjd ifxhpry cpsx hmuokkx vhcm yth shrrl zbhd +gfa bcmlxtf sqyanrp cugg qxfvftz pbl ujsgc jajxltm gugc oil +xjuhyg aht vmyvzhh oby oyb ybo xbybgmx +atfk qjudfzz mky tfy +nxk yzy jqgg qxgjt bevvvv efi xcbw bohc zaqlqjq +hdc qpnx ygmtqw acvoa udboxw dhc klh mwgpk xfpuri +cycgbkq skwhyf skwhyf veaqss skwhyf +jnezf jowjt vsdu uck scgxd fvopomz vfajslp +djvi epgkyqn apzd cpm owm kpwih fsr adlhqu jicp pmc +erxlmhj wqxvofi ugj ttrmtsb +omku vmrgoy tdicbje ewml dfnwbap +gpih pyt ptsmzc gmdbu rqxkqmz objm nurxjz oozbere ztxug koth +jpnl jpnl dmeh qed +intdwv ksgw qwlzhq zpd lrl mwjl dozrjwq aujbet bsnf vhqyg +eqs uot qyz xor aem kmrh mrhk jqx tsbrf +irytjab mdzm qbb kkjt gofiwo xgbovg kyeyxqn tcks tljhx +zgejy qodgah nqavvx xnigdvt +eqve bizrxq lkhz yzwxgt nwe zfe sxypkz xnssept +bxqn lkfg yfxbszo sphwifz wnj crhbq dvokzw +vzn afatwye ogzvnu vnz rfjba xtugnj kpbgly ocsjd +xrc cxr rahv yvhk khyv bed ctgbuq cmqwpqa jlbg hpj vmesvw +jbshkya dgqw lfl mzcch jxsg czcmh ifruvlw ufwrlvi xcczlol cqqchmr +rbk mhn tnmqdc sxnnn kvoa mhn sxnnn mgemob ieiyajs +cqi ghxg ghxg ghxg +uqwdxn qli gdtkngp gnptdgk udxqwn +dmcczr dnjaqc qwdta rhrbi hkdwe qdjcan peic iulaz xns +tcmppb nzq ecy sitdud nft ecy afrbf wvnc vmfpzx tcmppb cgb +plitv efnpq mjqav nrxxo izg lpitv rwbzdo rdbzwo +day dntga adtng agndt hhvtd +yrg iudsh gyr ryg +qttyeew tco flq bszw jkzftc wdh efcwnp mja rfmju +moch prkze uslzyv plhjuy kxczyq qlmm hgq +xtg ypz izy ixg bvs xlqgj xcy sepza abiylsg +wxvsxn bqag jnlzgxq ikxwa dfd plqxl xlgqnjz nuqvoyb emhodso gaqb +bzjdsm xmxkj fhuqn gauyw ntl kjxmx zcxdr vrds +ofjcc uxyzlk ofjcc ofjcc +zwosex kkvwobl cpudsmb kes zklf bayuojr otqnyr udbbs +iqpvzh ybds piovrh oivprh voprih pov sfl +upns cpeelht xboyk itb hsxdmt dnwgfbw upns fygf kwdpxzm mli dyy +djwutl sikh shki ikhs gecd jqkon trqyw +prbbdf vdp bvvfjcg ydqb muxygg +vhpurzn psemqe xwqfk hrvonxu nxkxacq +xicmhss tnpja qiad woipfy uvadcq usljh hzgs jntvfv wzikk +mmupc twntp upcmm pumcm +qnisuzy lppnfd uiqr eyqbain uxlp eyrfwjo olgkrps sbikam zin vckr +nmokl skfni jcdfot njzqeaj nqzjjea +slmaxx offfzqp wudicrf nfn rwfcdui cwirufd +paffi murnjd oyj lbtjdqe babuas dtqh qkt stapzl yrqlp +eedc rig zmnfmn edec ecde +bcfdf edovdj lacx nzvze sordvxj ybs ujh zvvvp rzstejg ueosuq +xrrfsd okuvem znzlvmb jwzcb bfg bmuxbc qzwfry +pqgxybd cvgra acgn ocd ancg fvfcx fbb bfb zfzv +tmmv mpywyg fwl bnvcv lcnv flw +xxnfbro papc ianru beuzx apcp rnt +wuyhycj nrnc cka ebg rncn rvo wcyhjuy +thh cmoog hwf imqfp okzpxd +rzxiqt rtaiy ytria tyria +cjkmro myif myif xyirn aqxlol wlhwibi dhzsen pzwgm bfbz bufjs qwffg +mxhiui umiihx zomyll vfieccs +yyntf rjk iivgj mwh rjk +dsshx wsmaxhc xcwuelh rdsgtr wsmaxhc rgtsfj +rdh nwlxiwu xsjzbpr bsgps +ufyo vqtzkg kpeohu mxzt fyuo gawgaq youf +hzbhut bxsnjwb zuhhbt zhhtbu +pdz sgntypg ragev hrrji goitft yphnebs xjzoo sqf jsuzijq dsocb hcxg +pptsq woomypc woomypc woomypc +axcg wfbnpql ejqb cmnn nncm csvlc wraludb pkmp whtht tfpicer +moom oomm ommo vfqeii +xvrgpp rofl yxyrkb oage nypzau pwfnkn jxnhkw cyxsi clzb adwpuh +mfbz vdtt muzhm wvwwfl ttdv +cpqgvbu byc pgfrlkr aftl tqm zcqxi juu gnf ppovxh huoa +konpcp lzordid jqng lwxs nqgj gghkxmf kyn ngqj +iorhccj xfygc cnfr tysqc xpcyf vmjpitf nut zmrk mgbrtb tcblxwf dkadwrm +kov jtmp xoatesx qxkilp rmggpfx ltpxzwf vko reqms mqq nps +hjigmk fyqy wpuwe mwmso thsimfs okcmeyh mzqkez duzaq vzhyrm uyvpkox cwivpls +ukoerf korufe zhs ntwfz hugem vriyk enfaib hrrcdgf zllsk vkiyr +shkx khxs wntpjv qdevaw noqyht nwpvjt egh hgok mukdjfi law bzbvjz +dquk kczxsq tdu trnkjs wqtdc ybvcb +hlrotxn cumcjkm qwufgle ylm nejh hnje pvaigrx myl sfvsd +szmvisn aywic vsnimsz iufmybr +zjozr zojzr qmn ffrggdh wam dafvok +nxkvlhr posmf posmf posmf zhlzb +ywis kpqpyb qae zqxpuz pcj hbsfz ejlwa lajew znuom +qxsl ussivur dstd avojo +yoeagao egpaqm ymzf kkauy ivm illir wsvchne skmamvn nqxc +cldo ixzzy vhk nra zhypgab +qjdd ecxud tbuqq mpotbdk tjdpczn knncm tyy +rbfc fhhjf innia tsjbbbv fmtcuup rapvhqz ebpzt whdbms gvjoy lykl fquvcby +bihhfwi lhal udxz uwjwp dmb +fekxamy uophet yzvv rqj zawlp ldrv mdymkzy taauf +rcwxvmh edueui ltdyo xfghz dgjig senm ifj +qcu fii axmgijj ifi oixjfsg jxagijm +sdtyr rbdh yvnvq czzuig wro +lot xkto cmpiena nht ozcg aotcw xiegl cyaouj und lsclep cexn +pgihljk cmgmv sajhi zfvbqij ogwoc ajsih zmppe +jexwkdp dwpexjk mzjydfu bff rubgdb +yshfhx emkl hshxyf mkle +dxgti jdo tkwprv pbxbrqd oiz gsbdphd qotu utfdnq tzvve bqc +ovdf bshfxyl xspjpd vljdsm mgkd djlsvm mlsjdv +etyia eytai sfq qafj xzgp ewhsn snwhe lhqp +zjz mwh dorxm ges gexo rckwsa dltoq mmntha +hqkuj ypsjcxo dixbe rmvnhjh ovnr +edc iffaxc lolu xwrvpb gva vti vit +ceuxq xbwejr lzyvm rozseit cwe mham fivpwj qtv omaktaw +alzdrk tsxbuld mdbq pgbdtoo xwf vzalric nqe jqwlxsy cbtylu dtubxsl lqm +rqjmjcs exjpn kpilcgu ihcm lfadjm mlri hpd vqs cxqwqhu twxrtk +aeuvlcp aubvnw riedvz arypagp uuvg kliehx cokt ogh xsdw cdsyywv +ddwrgvp bscaq bbfv qrbutp +jpdg uey eyu uyarl zgbk qyhqq fdvlql zmwkp +kbt bkt lebhpfu smrzt xalw mmwa zmtzfry tkb +fcvcv oewfzu fvvcc mldww lwdmw +ejrltsu sqoyx wfvsdbp bfdspvw bfir jqhgrmt ofdmrjg ysq +jzwucwn erqjd eikq knpf cvk xvqnscy eei wvfjzmj xujq cqaim boev +jqhkmr ipjpj zwno ybu krhqjm zqfyyzb dyciy +ugwsw rpwteje qtvwi pwyhrzt hfcdfmc qbovk ibws +ffy kdder qjookz bfvmvvq yjzuaj fvxllfb pjyz jcezhye fimyydt qjookz qjookz +loupd nwsc yytvuqo ltcqxnf +iho ulvxguz fxbf iqu ofjtmvq xhs ybbusd kxg mebdnah ucttcf zufb +wzdb wumuhtv kef aavv buu xmjtlur faaccl wospwff bjasr eapfsi +jau qzszci ciu inagax +kui tqig fyovsp fvwol fyovsp mzth tcp nhoq +ajdla wtpj amylu jly tvq wjqef +ofqc einz bdze tows bdze eew +avwavzt aesrsjv lbmpi hllv chdbul ezelxn +imcprs cafb clfg rsjo iylqu nvk vkrq izezlnu vkqr tyhnv +rwj zboui reh buzio wuhpvid cpzy jrw tsbuiby hmxwqr ute +ixq luwbi uoiwsjh souz ysoubw uilbw ffwjvw ewzswoh hci zmfdaov whowzse +xrhgqf xrhgqf giyv giyv +toiqgzv gakg udgdlb wvi carrn pjyha muqclu +wuxthi srtszr ourab hpds bakvy fnk yefe yfee doowxcx +ijdc ujhvls xmy hwg yetsda qelbe nang xgywo wgh +bhm icq cnam dec enksf qfctz pwxoo bdf cnma xoowp rbls +jguzh fextz yax kesaunn waljo jltcza tfzxe dezs syi ebwxnks +flvq bzgd clvqw ahtyvu xbdyv wssxx boscm grgl nqcg +caskpli hqctxxc nwpyo wjlqfqf ebti dva +wmsz fzpd ikgeq gti ejftoou ezs cqef mybojc rgwz +mdaay yfppa pavl fuuvfkh hpod tpb dhxmia emdecm rbqcwbk vecyt +neha rmvl ndp vlrm dpn debghi vyhvc +bnp zkxdu iqqkesd abtlx hmjasdq kyvekr krt srrjyd oxmfev oot +dumlcqd ccm hyir oritdz madjjw +oakqrs advfmu verrc zkfdcn btndsp +onlkinl rdtm bscfxre bnu oumyrvv kgc zkj +tfxfsgm uwmic agswclg uofezgc +wpfdyjn kjlihk etbot fbu scm gwccce xgownte wig cuaijbo +bzbdk etozk qracb oftfoo lkooe +xupzw vmxwu sis wzpxu +gbz oqbgh jwgrru bzg kwmxcfc jrurgw +agyjnyc tuec imxlult omwiyjg fiwnoqx nhmnro qtg kbr agyjnyc +koiq llreotu elrtoul dubfvgy whq +htm lll crzppb gdjaae nsmxzh gnfvn obiuy ymspzbo iuboy +thm xlfrr pbxdfo mht tygi sapxgbv mmngzf dej +eus seu qmstw ues +yvfsw esut biblze kbjcpk estu xih qzki ezlbbi blzv +ohq ugc tqqeo jygvpwm vfs ldnfibp ycbpa sml rmime +kuuow gbg nzwdaf wiimtg lam oqmm +wsbwkdd hda nqk ticz mvt +gqbljyh zqugqs cjod sxwlqy qkfs wwvwvt dsojb qbhjlgy riusoa uosari +jkphfx dbt les jsvoij rnuw mxmmchu dol vto swn +qqxe vwvephr twdqlyg cvdu xjiych clooq vkwavl whvverp yuz vkwval +txtbudi tiutdbx wqhx tws utgbf amh hmf izsez ooz +egdube nhsxjs nxjshs xoy sjsxnh +egdziod diodegz ejxn zogedid uhhkr rnm cyvvuc uqbl +rbn pinwag sidwdwv jqdbe jlbemk blkeaqq ipfqbtn zkrbp +bdryz sbh wxvn mhot wemsfm oemkff +vxyn xvdwwo xhd vyca zxjaw vfkz xhg ofsphks dyq mmzzd +yjrqsjf iiesdh envwyx rmtbmiv ggzsg ukx bprfym qmyqc vag ymho hjtoh +fuxxrd wbweptd vkoffr wbweptd +gfwcez smetli yjyh pslpz qyokpsm qsy cxjymg wqfkf obuq awz +eqhm ceest kayf heqm +rdi dti vntcf ewkmpvf jjwoihc +sfq qlb xrm ocy vtnj zdznbal zvon stln zwnj wsgalvq vhphap +pya jay mgnyo pya xmapdn +hrwbj xhr gvwl ktq ktq gvwl +rzgqi hjwtthl kxhggbl wepc hgavj ctmqug +tzfwkc xeqfath iiuwq iiuwq dhwuvy +gibagy smq getjofc lum msq ulm xuxu bilrus ily +xlv ndrkch hdcknr nqltoze xvl +wmc vuzlrj mwc atp cvpx atv ujatz +hxpafgl ymjltv nvvpy ahycdk jhpdcks ettm lvqyw ertpivm dnezwxx usi kdhcay +vrh hqyomv mcq ilwjbkz yprjxad +ugv szfitxg zeluib pfj ijm zmiigxx gltxzz jzljhgh otskue +mxp bilj jlbi tce yfted zxsqas ftyed +ykasqv ehye kirmnl upmi dojwmw wzj ykasqv ifixn vreoypz +kerbgub nnroqk onkqnr gbebkur tjhl knjo ccsem yozvrcg +ygq evkoj wkn ffljhds scxeibh egsybeg mwvi vgjblj qda ywqpp +hocvpl ozgkxp xgmj ejzyxm +gernu kks lxe nxzv sypg xle goz +xoatis fjp wzlbo dzkonz jtutyj vdonj swro tqclemv xhomap ymeqkua vaxcw +mxcyjs ywyxndk wng vpftv nsuvu +jmiyyhh gwser shgcu jmyg cjzegc hmhe eopg kmkan +smdd dmds mgqhtkh qtamih haqmit skkcy +dnj rmggy rgymg uburbao rymgg +klcpjgq ons ajyv sqryt son pjlcgkq xlobdt +piw shonk tzi mcdumz noskh tebolw yaypn +ozm mvmjgtg nxj weommiq asnmhzq xjn uobztuo cqgjh utfb oydt ommiewq +qlwgsc vvpe xgft ahpjc zjtx iyof scwqlg dxgcokx ltrefj xyzq rwto +ggqdd dqgdg ggdqd kjkmmfp +htzjam fjbg iagc xls iagc iydtf ihxl boa iydtf +vhe nqj bwgdoi hhaoa qtulz +axvyja hpdkwee hnryj prou rgadv oubjdqg knjbc +caz xibj wqkzwe peioeya vmz hesy ftb +dudwcr gupj sjrtzc xsqbb hiet nujv bebcvsj eks uuzlcx gex +kywozi tfzuc mflssw hnxxxqt zzc tzfuc hkokuv mnjg lwkavjp lvpwjak xez +izgh zfv cingjt dkf cknite qox vfz zvf +ojpu dzk tehpgnt gntpteh +glxfxa uxq ajtles ahgzn ajlste zwgc mrpu adz wuunwhc zda +hdgdtn hnoyz aromkb qujfv yjgmn tbf atw +uyvsv oaopjv uyvemxk ldpp tthe iisjk txr hebmd yxevukm rkziao znt +ypdr mnwuzvw acpg kzwz ywbn wcrr umrnlbe lkult ljify azyhu mgqoo +abmpl omsd xmyl mxyl mgoq kracrf ufm ppwi zpggh +uxfdpv jnm vvc vchunhl ubv ktj mxolsxz +fcja eci edzrb nlvksaw lhf ycohh tfztt xso ceub tyv +rkwtp tcmmvv kufg cxui hdamg suuaej fgku cvjlv +oldbgy riadoyo djsi wca zxoeq pmemqap aijxa +nyy ruxcosx xisqoz yny jvzfpbe tlfdiaj ybd jifatdl zuzv +kxwdz qvrvx svllp ergmme +swjfuv eronk favcxfm acptbh pnbjn ciqcrlt rgvdnlt icgahb +ddza xxfn use obqka bfzwjp gmf bld fyvde mxdfdl +ame bmxbyf ame bmxbyf +rdgby pyfog dybrg gdryb lpztd +sntg impd uxgxai naoalb ntnk xgix +oadpmqj oso criln izih oos +ouzjq gtl ito xefqt phnv ouzjq hoyjjj +mlp rboq lpm roqb whvp +tghcw ggshevw dzsgj ggshevw kec ggshevw +kmwhb kfcb mbhkw gemz fdh +euve veue kplrq evue +hikfiw bcdktj hcnawja gjasvwc vcht igrzly rkxijxe ikfwhi dvmp +hvksis kafs ktcs sfyqzyt etctrgt vodwr wff tskc juobnm +dpcsodn ehwc pglywfl yhdp mdiyzx +ibog umftejh cfm pnxhna wqwx yabnk ygws dqw +dezz tqw qism rarfe fpmlab xvbau irwtfs wwmoyss yvn xetqp xtqep +pchqwk npsmd jefec qok uuc ucnpz rlkakn +kudh rjysb xrdbx bkbmjfo xrdbx +rogu ssdwsus voa ncw obkxsr +tflf hlevus scq rrbpat tau wxsq wxoblt +rzr lex kqdy whtj ffnys xlgkkff msjhy dimaq hrc wyde qkwf +ghtwd wernjpn tdgwh olrfvmr edq gxvp +rjirvf skhdgln aauit bipu mubjiwp kowz gyjfbjx cmgdqs +aftfpbv agajyy aqjll vsf twh robpys lebt eav yribup +sby ymkla sxkbfwl awmd nhb vlp +kizvjj ycjswr jkzjiv vuy jijzkv jcs +cwvch xzqfal tephz lqfzax cnkbdcr mql zflaxq +jjxzwl himpra ssjf bibfiui seeaq pzse +jogrn jogrn sqew jogrn oixgwr +khonpyw iiyxir vybhc ndnxxv kzlt ipmncn +okqkqu svbemi nfn ovd xgwy edd ujet nrrbv dde vdo +jobvf dus asvio vaosi sovia +knmz qbz nkmz zmkn +isbmopr unduey impobrs hea zswciev sopbmri duuj +ocs ntgnrdu kbvtzp cvyieu fiyn znmh lhrz ixtnzrj vktbpz lbpqx vzkpbt +muduhc sabc dlyoisz kuaz ogpyepw yuog ictiiqt +xjflsf nfklvml thfh uajnmby cichyj xxoqi lpime bxpyx +riahifn bohbgd obhdgb jni qzvkf ybp hjkkwq ytutd cakcsh smfdoe tuytd +iddku nccp zgtl yne ppzpqcx lwm +refpcz uqt uqt uqt +mtn czxkagb nmt caqacrg bcakxgz +itxjii uethxbj vpds bsqod diqax inv zrwt doepe +bfyaj nbvhg zmi buf +dtre dkwdr nrapm qtfth odvt bbcnae vxuk gqm enlg +ybt qcfozrk yzrh bfp euuozuz pzsdkxx mhi nbkzprb +vpuhqn gyx caint antci vfep incat kqdakdx +ddhi chgnjk ibg xbemitr mjtdph eovw +ngbtuvq qdttlsg dbqhhwk bkrqze qdttlsg qdttlsg +evn smvhi dgcmn xjo ascc ahbpj uvzc pwn tung +ksu thr omg onvsqzz rllakar ysfjtfj grxwyx oawix gpk suk +qvb iouav yhtndkd vuoia ouaiv +kud kofcip hcczrgc cvvxxlk rvyamwe duthdzr dftun +rgv ynw gph tmxwfup nwy +dnc trawj kwzbx trawj zvp +ogqxijy tbqtsg tbo vqinnlq jbvgl sfafh rve mcxqs ubh +qccr lpv puuvdyb tydaflf uxic +tlon tbfwkxg tlon tlon +iytiz qjlqaqw uixb lnt zwro uzgxqfi gklgnqs zwgoidw iifk wkwdo +tmvhxw tmvhxw tmvhxw fhiqpjy ejk kvysd +cmphg xjjz groiccd dvetuk xbwa zhm lyi ohhd neg bxaw yil +kdmzopy lxx bvhach goxmxu qbqvzcm qbbrhvb nrfom aixmio grpxz hbrqbbv lkucih +bnqn phqr uycuxc mopyyfh bbpesqm stgigq stggqi cwtjm asqhpl imvlxj lbmloo +pws iuvbvjr cwccm qbr srqnstz cjebq +bfh jobkcy gtbroe lpagq icmax jobyck fbh +ounqdo qrrr pwi alho rrqr beao rsioepe +vrccqge qvcgrce cbslkjs qnclw rvmjkw +aaxjns deupjs wtgxtp penad depbho tbrdt depbho qxg zhjxpgd +drqfo kbp jfa jaf +izn oczcitj cpae quvzqo iwwk jck idjdpm +ecort zgcvxx bvh vrprsf +fhubfvy ndcfjo kol hyufbfv hvpka +kpt zgajpc rjvsxa gayznjd +xeoixk peq kfu lqa mjnv mzvh bicl hlfk +wyt imdx lksy twy +xeptp ilxs qbsqzwn rsy slxi xtpep dsdkekl +rotvbt fuirp elos ciu nhx bxej trmtx ixn xbpc vrxtma +skcprn yns sao ghlq vftezvc aaryahy telt +fkaov gexa xijv yiksa xega dhgw okfva gxxs edkecag mqbqvrm nrzcqub +ljc jujxeof fdj gdzjzr mabbktu pmyrfv uspven zxry snt hrah +nhujhdr jdhrnuh midm bbavhpp cpjk zmpbasz eptrpou znq zqn +ywzfq wuu lfflon uuw rke qzwyf hjbms gakx +yqrq zsk jzn uuuzrml kzs lseupsg waynfh blech +gwyqej weyjqg uwuje uujwe +lxud rnwkc bgygkh csq rfvtos ystqp keb gkakodj uthcce eqxifl +elvj evj rfwo vvgkosh aarcgjs utsbh orwf jxcqvmh uowmktl qtgf +bqszre oxntty ombwiz mbiwzo +ccp iilcc tacf czk giwv erqi jgdfah wip xtrzhv wosvbyb +gymyw rwsxeg gvydr izyk spsonkg knospsg +djj tbr tbr tbr ice +yyzh zkykapw puydtik ysxc hjumhsd cuhhw dnnhida yyzh lnklymg +nhbcxsu ccrbbyw scbxunh ghxrkqh brcwcyb +latdaav sexa ipzuzjl ayusb etb fshh +giz akqd vjmabii arfuzgv efrww jxkvolg efrww vrnzgbx +jmcc vqy adkzj fqrkdo tjrczp ccmj cfponk rptzjc +jsviu sraw imsj fujm cdf xwqhl lhz ojejzuy trtqblg +ibz dulm muoq quom etvjzxn tuhrpp jfukac jqctqn qhgbae msgmcit ludm +zgx bpfa elhp rnyqtq wyceube nkeuxz +lzxfo vygpecv jszacku zfxlo +cpmv ysaaj xnp wbvqg hrsiuj venjxna yeqvwmk ftaga dcqxc jgapb rqdixp +xpbbe tyn hfdlu fto wrgzkou sxylv cqto wdv xqc pnu rapk +pkrxypl wnu oipq tzbhnc gpug tgzf ofjb +mvaz bwcv gll itgcye dessw szt gzimgeu bvmohh wbywyhc kzerxbr anjsive +lhvnrzs qkmjwy pnyciwp mgp jfdz ghvtf yusfzg upab +xbscukx aubulj snbcmc uscxkbx ddpucyg +hgv ollh yzpjmpy fcicyae vhg gvh +prd onyd iux oik xui +zipadig nvewx cir lbpcusx dljqy +ifyxzsc btmy lsu tmyb lus ldyzx +egmyxbe ieasvek dylmj qahtatr uyqgbk +mejjczw spj vaekp kdud +vwan mgenld mnlged vpfuil euoxlr rclkpi dfknyoa rhthij kcyxl qaxab crlpik +pqm eihogk iwml nuauxi ngilkoh jmu mbdi cqxz nblb rmuj zczdgp +pswbe mtzch wbeps fxtnc psa aioff pas +prwrpvz oadpqvz tgzrt giom pjyihh rxdir dmya xjolzxv +khdybe obqkjn kdq jkvmgwo enpat wyw qjbnko waid msest wwkoyts +yep liv ofmtpod imdd qyw +afnrx jgn gxarpb myltj ggrsajy mdaobjo vbtn vbtn zlziz eds +hqr kqu oub skoeqk icnfm cqvld aay bto +rga odaf exoosh pwevx zpbd plaa xoseoh +mbr gqu oxvchrt nqa larxmjx pfozej +ozuo ywubjbg xcua eblwqp nfdvw hmhen zkjfu gmhgp bsyi ktprtf +src vrysby srybvy znwjm hmypwdl gdmau pqe +cldr crhi lbaq fbuduyn hygbz uhida +qrxukq dygkp oaks soka oask +vpido ajgfq pwlv hezt fmg epwrxo rqvjke iovpd hhkjm +anxf ydl xnfa hqph olorp +exydcg onxjm psqlbv ehz boar hze qsblpv +mnzrvc ipj swg ijp sgw gdkntsd fzz grqwly +erpq qghpj fay gci uglm afy +jwbq hbxaub jpdilyt yvalrlk topl qup +eczonk ftcc paltirb owz tihhe dglxory wthvqcb qdnxm lirejh alyxsr +ooruaby gboyeu lkv arrz jcqyzl uxlfk fhmeony fcmh +wzr xjb pwmf okqj adwcedy lkidve uwekxf asbdzr biub +dikhur pxgh urdinjh wednf ulzdxs +iplf byt tyt qnnlba pzt bednml ljjtkvo tjovlkj uwms xat +htzk ltmfha xikeze atfmhl fchxhyz +lqala bqwgcul vetaa xuxjau zcb wtdmomu wfqmpq sief uyblyz ahv +aytvvo awm ojaaigg awm dbfaokz +abq npcyld fzbfku oia qss jkxldm wgtmki pasgxi dieix rpqnuac tecnfy +nmr qzfj qjfz lsz vnahex +djxoo jzlkh svy xige +tjlkkg glcuvmh fwzlhi ecun qlgulj hrfhyql qgdlf ofakqdf zokkvm gelxkq oowgs +upfpk gfstjlv lxc rjd nhj sbq jpzsz zsjzp +favd nzqfdid nekfjsf mtjndu +sgdqx uvpuefv vhwrgd aivav gsqxd jdhfoq +llaf cthbgy njrpw fqgkx jzf xqkgf lnrfrm gkxqf +wzdwlc wisst alw kyjeur sjsqfcr tta bijnyn whfyoxl +dtjr baxkj lmnyrlg nrmyllg +mtgky xmwf zdko nnocxye gytkm ygp hixk xwmf +maudjy okgjga uadjmy dzfrk omd +azz ajdcqkd bcafn zaz dcjaqdk gylyzo +xzvfbf fopmfxu mvftgr mfupoxf coyhof talcc vpkslo diff --git a/2017/d04/ex2/ex2.py b/2017/d04/ex2/ex2.py new file mode 100755 index 0000000..6279f97 --- /dev/null +++ b/2017/d04/ex2/ex2.py @@ -0,0 +1,23 @@ +#!/usr/bin/env python + +import sys + + +def solve(input: str) -> int: + def parse(input: str) -> list[list[str]]: + return [line.split() for line in input.splitlines()] + + def validate_passphrase(passphrase: list[str]) -> bool: + return len(set("".join(sorted(w)) for w in passphrase)) == len(passphrase) + + passphrases = parse(input) + return sum(map(validate_passphrase, passphrases)) + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d04/ex2/input b/2017/d04/ex2/input new file mode 100644 index 0000000..b7384b6 --- /dev/null +++ b/2017/d04/ex2/input @@ -0,0 +1,512 @@ +vxjtwn vjnxtw sxibvv mmws wjvtxn icawnd rprh +fhaa qwy vqbq gsswej lxr yzl wakcige mwjrl +bhnlow huqa gtbjc gvj wrkyr jgvmhj bgs umo ikbpdto +drczdf bglmf gsx flcf ojpj kzrwrho owbkl dgrnv bggjevc +ndncqdl lncaugj mfa lncaugj skt pkssyen rsb npjzf +kdd itdyhe pvljizn cgi +jgy pyhuq eecb phwkyl oeftyu pyhuq hecxgti tpadffm jgy +zvc qdk mlmyj kybbh lgbb fvfzcer frmaxa yzgw podt dbycoii afj +zfr msn mns leqem frz +golnm ltizhd dvwv xrizqhd omegnez nan yqajse lgef +gbej rvek aehiz bgje +yej cphl jtp swe axhljo ddwk obwsq mnewiwu klddd +ipiev henods rpn qfpg gjfdgs zcpt sswab eosdhn teeil +gzje ydu oiu jzge udy sqjeoo olxej +mgn gox tcifta vzc lxry gox gox mvila qdl jipjnw dvu +hxk xhk unhdmdz yomze povrt nbww bxu qqsqc rvuk tgffy twddm +fyx fyx nzkm fyx +ymnoc zogudq yncom tqrob sidvy dfuu ccjpiej yidvs +bxebny akknwxw jeyxqvj syl cedps akknwxw akknwxw zpvnf kuoon pnkejn wqjgc +kcebrkj zmuf ueewxhi mgyepbr nleviqc dez +argavx fqguii gebohvw klnrq rkqnl goevhbw +ywqi abwi eswph nlplbl pswhe lnqx fpgk lllnpb +abpb mpkw ampey yapme xnuyj +tmuaq asd bhbs sqmbsnw wsbnqsm ydwdncn rpa vrllkh +dnltf cck djy ydj +wywwl scezo clowuz dkgqaj dohyzcp +diimshr vlmsnlj whqb dkicau ckdaiu terp kgcii npqc vvzrqzv nol +wfpxe sqf tbb ruqpcq zfgb +kajykuz tsxgtys vuz kglmgg ihnnn plyjxj rcrvo mij plyjxj jqiur +pxs hmet dwgvd mvhkvn cjxg yvid vmhnkv kwxz rfemsua wdgvd okixk +lzwxas ddtyeh ivyama crrhxdt hedytd jfw +vjfv oyd fvjv kfwlj mradbx mckseee xradmb +llga yytxyvj lstspek lstspek lstspek +fabgf wgop fabgf bvsfoaw +grqnbvo tntomdw hizg tmotdwn +mau ufkw cxfi rhehj ebe xyv rhehj acxngo arl qtl rhehj +kbkto stqjtm tpcwshj saerkrt pffj dthp pfjf axc gwmmfdw glnqtdy xmskw +veff zqm hzhxap lgwnwq twsdk mqz xbbarbv cdx fhnwt qjcji bbvbrxa +fjw eds hofskl nkbsv des hvx xyn +qzort qzort qesz rtq oonk vwzlw wapoj ifr cta +pja hvy nhjg paj smtfe fmtse +xvi tcjj xvkjtab nqftt aumijl xkd cmilegf hvsmodx uuo igmcelf mslkq +mdhezgv lelzy kzfvsqu hvmvaxw pxiqjc hvmvaxw kzfvsqu +hsicsav csshrhx znojm eapi lhmzq bbwnz seao gfk azk +pup xtgjyzy wqt ijeektl +ktwh qdegzs btj pfwzzho +xdkmdm izqtjrr iqbke vtp +fmrbpdr zpccv tmtwx tmtwx tmtwx bys +ehphfgq idd ehphfgq ehphfgq uphe hvrc jcscne nbnslqy +xzqucgj fcih fljk barz lvln hcfi azrb +cmfmclv mfgvifw rnxgn jpg bsnq wnduzj ymsdx smdxy pqomf +rlqsm qrsml emts qsmcowv scmvwqo +tshzkpa zwtpda ftsiwo nil tpawdz kjpa ptzashk +mnep sfc swjawtd vnwud gyulluw zpa kmwyvln evd btnmoi dnwe +jwq scepq redoxmw rbdzsa wlkzso kxpm bttg vxuc moxwdre ijtdd rzsabd +wpvo dsjox amuwjm pls lgwksva ctakgpl rmsjj lzwwpr zzm udg +bji obbn tmwyc afpmkxr glvrd kahhgpq rna qkxyntp vmd mloshc +ymq rtnr nxjzm pqiddrn qmy vgxw ull +mmzk ikge zhtzhs xyo qwe lll gjjm icetq qgrr mzwqa knec +kxomfck idlh xrbowo nyetbnl qskh xuwkkxe upmmmf zhvuyp +srcwyhl czgr xmhuws jueyh xcuib xhsuwm bxuic +crkueh beyxopz xpyozbe dxgadw qktmce rjropjg +lbktun imdpcp fkssp fhcpt fehho jqdnt aoewa +jmun pynzjo trs ijwcc pelf oft pcsqdxg zvql +mneaaq vjrg jidlrzz phd mvxpivd ldkhu +sao xqw nrukn gatkz quscpsx vmz oscoeb +goi wzxhb rrk aylqqcd mlcbvvf ororn heptid kdu byevr +qsj lsbieef deez vzwdx hez iwd +lmgfb keqt mqbsuis ogrr errbi xiqe xsszacp +ato hmk zfjaj kmh plxup cida dqd pfwh nkbxvpr buajw pxkrvnb +cli bdwu vrwott vowtrt grle +zisgks ciuaqr zvk tcb kvz ugmtv +oegrojm wofpwp gnaocx rweyull ellhwow dtefylf dqsz oiw varr bcirpf oxusz +oydkmib oydkmib yefts gbl gbl +sruwjk pgkrp kea gppkr zdcky cfljh +obpxbax jhpcrj slcsa lgd fborz vvpaus wsrpsws ifijuzo +rixz jwh uhdaf hoacv hdfua +kntk qprmfow kntk tbmcjx +vnqe ooyxtb ixl hdmnpn orpz ykspl xromvj kowtq wmho gquos +ynk xjjqw sut lmtub bmtlu zdo dztlk bpkuul smhpx rbczg +zals csdbe sbj dibicq kdfwwt +coyy pjddlfc lwvhyms ldjdcfp ryubz kfwst dqjrjja jtv jjjaqrd +jaexhms iqoiln ewgyr exmnrr fsr lgmyy fdofhn +pjgyn hfoz zbcnz nczbz +ovntivq vcey vdrkse giu ohyaxy ionyy fvpn yvwrgrv qta +yelpz htbk njgeyub tggh mdthzp fwyux rduqli twlhfp pnh gywif ttn +yxhsbil vplsmmx rgtq grsf lyibxhs hctnkfr awg lmloz jroy lpgb wga +kzytass szyksat tyskasz ehmhhu +jkus hwjv ymnnkk yffugg cvtnits gbl lywkn szihcn dbrbalf rxqpbqh +koyfcef wkom mwok qgjrytl +slmhry lcr slmhry lcr +mvoxbt cfkz purnsui xar ouhtc thbx +xcdifw kvvxyrj knac qmypw bou tmukqy eusgaoo bktiu +ablgnhb axumg bwpxnjp zqpc vtw ghhoxu zqpc znfpvl ghhoxu jlg ntdk +vmvc cdkhrx cvz rvxk mmcuo udpcayd lsmm gufduzt linj +mgyeqkv hqionh rgnqgz kkc qrgnzg egkmqyv topdp +koa dimwx gjxa atlfdy +uuez ueuz zeuu ezo daq +ofpaw bgomvmt mqa dexpy mbipd epyzcoa nuwrh vwly xppz qkjrleo rwhnu +wok grxk lchvtg plrzr lwaax cfeu ijapws dmkdwc cfeu +zkd hysxxip hlydw wicsvy gbwoaw dapre ktjn dzg uri +blzh hblz qgmjceg fyf +vkhpn xnc ogva pjrh cxn hkpnv +aja cldzta tdcazl lorr fwmxxh knilf ges tdhp gnlo vihrl +ucpr peair nlbmc msfg +trv ppq bmo xqd vbui yegsr xqxawu fvuz aclhspo wnan +loiq fvg kare rmgq hir rzo ossd ziw renh ygtkjys vda +xmans kio alexs ujekfl vvf ddghn +fcxvsf bjuytet zrzsobo uhn mlfzhlq bjefs +zys htlqvky plno pbcqfuf fjwc vshkxrl lonp lyzmy dqmui vyyc glad +tlc krhcter krhcter bolk tlc opryl +idcii dverl uswb wusb zgax zhbt gjsnlso yhs +cti npri rcbxjdw ollj nirp ghfvxzh +blyhug aflnrrz zudyw ccnstq cyoju jxtqoj ntuknjq gunjiwy ycuoj igac cqctns +bul yehpnw jifjrhc ifetu ufrodp hqzpeqf hdvpc qtvgxg ibb wcxsitx xztshb +xzct scetn eoaufyo jtudgkx xrpgxip lpubtq juezstc nuc hokswh obkf ipbu +nfq lwpmn qltal xnphsqs zlrgf iewtrtd mqzsob duokpy kfbqs icg +vil zjz xkqrvni uay ystq +terrrnt lnfg clm lbs ptpiy ybcuup ayzjm pqugx lmc yppit mbf +dtajh vqivg vnblt fmn qxkw stiwna pclrrr fro khu wbslnqp tjyosu +uqlehn tjuiy obt uedct bbwiq uxndqn +hiqfovy xiimca zwne ivunvjk cmctzi mxnnrx dclib xzaoq ieztkg +shpr xuorihj chuwq poadbo mhtvex gymsp iltgl sypjfua fmyh sgiv +alv nxjt txnj bhact +vjvtrex obmrxk fgigs meixbc fggsi awi rxdjpeg +ypwo oicmbdw xbpeeyj uabzj cjvutvc oicmbdw immtmks +exijri hogl epr gzdqyur xiiejr pre ihzlgzu +rlh qfhx lrh qmvrx +kogq okhd mivmivb mivmivb okhd +taekt nhjaa znbaahn iaospxy jawwf +ytdvq ghtqwud jkiig mre kzmmjxu jba nwpykc +ktyzr aczd exgadhb uinrgac izazxky yyfe +yrifb qgc lsiuapg teyelxn ugezu +wdzkc ltx fkhncb hwrecp kfbchn sfcpc hjvq +rjdjyt ahwxh nvggsmx lmz oshd xbcik powse ahhxw yhiq gxmgsnv +qdr qjnam gag qjamn kooek mqnaj +pza gml opf ilfbblu kjp luilbfb rhfrzgp ixagj ofp +yphz runy dhull bozcsgk wfxekrd akgkbz urcphc +tfyxwol lhcl npik beug +szatel yfkve yfkve lzqhs +yjzqon pcjibu bdncmcl kczuymm pbmg nyn +rerqvs aoxucwi pmstl sstawu joqu abvcchg mvgjn mslpt vhmfkr utusuh +gqbec jjpqdh yeaiavi nledfi jhzwc vyxjpf momnm vnknjs nvgjzik ipm +psirt rispt lrkgma irtsp +jbbaph xvunete gsvnr mjd ifxhpry cpsx hmuokkx vhcm yth shrrl zbhd +gfa bcmlxtf sqyanrp cugg qxfvftz pbl ujsgc jajxltm gugc oil +xjuhyg aht vmyvzhh oby oyb ybo xbybgmx +atfk qjudfzz mky tfy +nxk yzy jqgg qxgjt bevvvv efi xcbw bohc zaqlqjq +hdc qpnx ygmtqw acvoa udboxw dhc klh mwgpk xfpuri +cycgbkq skwhyf skwhyf veaqss skwhyf +jnezf jowjt vsdu uck scgxd fvopomz vfajslp +djvi epgkyqn apzd cpm owm kpwih fsr adlhqu jicp pmc +erxlmhj wqxvofi ugj ttrmtsb +omku vmrgoy tdicbje ewml dfnwbap +gpih pyt ptsmzc gmdbu rqxkqmz objm nurxjz oozbere ztxug koth +jpnl jpnl dmeh qed +intdwv ksgw qwlzhq zpd lrl mwjl dozrjwq aujbet bsnf vhqyg +eqs uot qyz xor aem kmrh mrhk jqx tsbrf +irytjab mdzm qbb kkjt gofiwo xgbovg kyeyxqn tcks tljhx +zgejy qodgah nqavvx xnigdvt +eqve bizrxq lkhz yzwxgt nwe zfe sxypkz xnssept +bxqn lkfg yfxbszo sphwifz wnj crhbq dvokzw +vzn afatwye ogzvnu vnz rfjba xtugnj kpbgly ocsjd +xrc cxr rahv yvhk khyv bed ctgbuq cmqwpqa jlbg hpj vmesvw +jbshkya dgqw lfl mzcch jxsg czcmh ifruvlw ufwrlvi xcczlol cqqchmr +rbk mhn tnmqdc sxnnn kvoa mhn sxnnn mgemob ieiyajs +cqi ghxg ghxg ghxg +uqwdxn qli gdtkngp gnptdgk udxqwn +dmcczr dnjaqc qwdta rhrbi hkdwe qdjcan peic iulaz xns +tcmppb nzq ecy sitdud nft ecy afrbf wvnc vmfpzx tcmppb cgb +plitv efnpq mjqav nrxxo izg lpitv rwbzdo rdbzwo +day dntga adtng agndt hhvtd +yrg iudsh gyr ryg +qttyeew tco flq bszw jkzftc wdh efcwnp mja rfmju +moch prkze uslzyv plhjuy kxczyq qlmm hgq +xtg ypz izy ixg bvs xlqgj xcy sepza abiylsg +wxvsxn bqag jnlzgxq ikxwa dfd plqxl xlgqnjz nuqvoyb emhodso gaqb +bzjdsm xmxkj fhuqn gauyw ntl kjxmx zcxdr vrds +ofjcc uxyzlk ofjcc ofjcc +zwosex kkvwobl cpudsmb kes zklf bayuojr otqnyr udbbs +iqpvzh ybds piovrh oivprh voprih pov sfl +upns cpeelht xboyk itb hsxdmt dnwgfbw upns fygf kwdpxzm mli dyy +djwutl sikh shki ikhs gecd jqkon trqyw +prbbdf vdp bvvfjcg ydqb muxygg +vhpurzn psemqe xwqfk hrvonxu nxkxacq +xicmhss tnpja qiad woipfy uvadcq usljh hzgs jntvfv wzikk +mmupc twntp upcmm pumcm +qnisuzy lppnfd uiqr eyqbain uxlp eyrfwjo olgkrps sbikam zin vckr +nmokl skfni jcdfot njzqeaj nqzjjea +slmaxx offfzqp wudicrf nfn rwfcdui cwirufd +paffi murnjd oyj lbtjdqe babuas dtqh qkt stapzl yrqlp +eedc rig zmnfmn edec ecde +bcfdf edovdj lacx nzvze sordvxj ybs ujh zvvvp rzstejg ueosuq +xrrfsd okuvem znzlvmb jwzcb bfg bmuxbc qzwfry +pqgxybd cvgra acgn ocd ancg fvfcx fbb bfb zfzv +tmmv mpywyg fwl bnvcv lcnv flw +xxnfbro papc ianru beuzx apcp rnt +wuyhycj nrnc cka ebg rncn rvo wcyhjuy +thh cmoog hwf imqfp okzpxd +rzxiqt rtaiy ytria tyria +cjkmro myif myif xyirn aqxlol wlhwibi dhzsen pzwgm bfbz bufjs qwffg +mxhiui umiihx zomyll vfieccs +yyntf rjk iivgj mwh rjk +dsshx wsmaxhc xcwuelh rdsgtr wsmaxhc rgtsfj +rdh nwlxiwu xsjzbpr bsgps +ufyo vqtzkg kpeohu mxzt fyuo gawgaq youf +hzbhut bxsnjwb zuhhbt zhhtbu +pdz sgntypg ragev hrrji goitft yphnebs xjzoo sqf jsuzijq dsocb hcxg +pptsq woomypc woomypc woomypc +axcg wfbnpql ejqb cmnn nncm csvlc wraludb pkmp whtht tfpicer +moom oomm ommo vfqeii +xvrgpp rofl yxyrkb oage nypzau pwfnkn jxnhkw cyxsi clzb adwpuh +mfbz vdtt muzhm wvwwfl ttdv +cpqgvbu byc pgfrlkr aftl tqm zcqxi juu gnf ppovxh huoa +konpcp lzordid jqng lwxs nqgj gghkxmf kyn ngqj +iorhccj xfygc cnfr tysqc xpcyf vmjpitf nut zmrk mgbrtb tcblxwf dkadwrm +kov jtmp xoatesx qxkilp rmggpfx ltpxzwf vko reqms mqq nps +hjigmk fyqy wpuwe mwmso thsimfs okcmeyh mzqkez duzaq vzhyrm uyvpkox cwivpls +ukoerf korufe zhs ntwfz hugem vriyk enfaib hrrcdgf zllsk vkiyr +shkx khxs wntpjv qdevaw noqyht nwpvjt egh hgok mukdjfi law bzbvjz +dquk kczxsq tdu trnkjs wqtdc ybvcb +hlrotxn cumcjkm qwufgle ylm nejh hnje pvaigrx myl sfvsd +szmvisn aywic vsnimsz iufmybr +zjozr zojzr qmn ffrggdh wam dafvok +nxkvlhr posmf posmf posmf zhlzb +ywis kpqpyb qae zqxpuz pcj hbsfz ejlwa lajew znuom +qxsl ussivur dstd avojo +yoeagao egpaqm ymzf kkauy ivm illir wsvchne skmamvn nqxc +cldo ixzzy vhk nra zhypgab +qjdd ecxud tbuqq mpotbdk tjdpczn knncm tyy +rbfc fhhjf innia tsjbbbv fmtcuup rapvhqz ebpzt whdbms gvjoy lykl fquvcby +bihhfwi lhal udxz uwjwp dmb +fekxamy uophet yzvv rqj zawlp ldrv mdymkzy taauf +rcwxvmh edueui ltdyo xfghz dgjig senm ifj +qcu fii axmgijj ifi oixjfsg jxagijm +sdtyr rbdh yvnvq czzuig wro +lot xkto cmpiena nht ozcg aotcw xiegl cyaouj und lsclep cexn +pgihljk cmgmv sajhi zfvbqij ogwoc ajsih zmppe +jexwkdp dwpexjk mzjydfu bff rubgdb +yshfhx emkl hshxyf mkle +dxgti jdo tkwprv pbxbrqd oiz gsbdphd qotu utfdnq tzvve bqc +ovdf bshfxyl xspjpd vljdsm mgkd djlsvm mlsjdv +etyia eytai sfq qafj xzgp ewhsn snwhe lhqp +zjz mwh dorxm ges gexo rckwsa dltoq mmntha +hqkuj ypsjcxo dixbe rmvnhjh ovnr +edc iffaxc lolu xwrvpb gva vti vit +ceuxq xbwejr lzyvm rozseit cwe mham fivpwj qtv omaktaw +alzdrk tsxbuld mdbq pgbdtoo xwf vzalric nqe jqwlxsy cbtylu dtubxsl lqm +rqjmjcs exjpn kpilcgu ihcm lfadjm mlri hpd vqs cxqwqhu twxrtk +aeuvlcp aubvnw riedvz arypagp uuvg kliehx cokt ogh xsdw cdsyywv +ddwrgvp bscaq bbfv qrbutp +jpdg uey eyu uyarl zgbk qyhqq fdvlql zmwkp +kbt bkt lebhpfu smrzt xalw mmwa zmtzfry tkb +fcvcv oewfzu fvvcc mldww lwdmw +ejrltsu sqoyx wfvsdbp bfdspvw bfir jqhgrmt ofdmrjg ysq +jzwucwn erqjd eikq knpf cvk xvqnscy eei wvfjzmj xujq cqaim boev +jqhkmr ipjpj zwno ybu krhqjm zqfyyzb dyciy +ugwsw rpwteje qtvwi pwyhrzt hfcdfmc qbovk ibws +ffy kdder qjookz bfvmvvq yjzuaj fvxllfb pjyz jcezhye fimyydt qjookz qjookz +loupd nwsc yytvuqo ltcqxnf +iho ulvxguz fxbf iqu ofjtmvq xhs ybbusd kxg mebdnah ucttcf zufb +wzdb wumuhtv kef aavv buu xmjtlur faaccl wospwff bjasr eapfsi +jau qzszci ciu inagax +kui tqig fyovsp fvwol fyovsp mzth tcp nhoq +ajdla wtpj amylu jly tvq wjqef +ofqc einz bdze tows bdze eew +avwavzt aesrsjv lbmpi hllv chdbul ezelxn +imcprs cafb clfg rsjo iylqu nvk vkrq izezlnu vkqr tyhnv +rwj zboui reh buzio wuhpvid cpzy jrw tsbuiby hmxwqr ute +ixq luwbi uoiwsjh souz ysoubw uilbw ffwjvw ewzswoh hci zmfdaov whowzse +xrhgqf xrhgqf giyv giyv +toiqgzv gakg udgdlb wvi carrn pjyha muqclu +wuxthi srtszr ourab hpds bakvy fnk yefe yfee doowxcx +ijdc ujhvls xmy hwg yetsda qelbe nang xgywo wgh +bhm icq cnam dec enksf qfctz pwxoo bdf cnma xoowp rbls +jguzh fextz yax kesaunn waljo jltcza tfzxe dezs syi ebwxnks +flvq bzgd clvqw ahtyvu xbdyv wssxx boscm grgl nqcg +caskpli hqctxxc nwpyo wjlqfqf ebti dva +wmsz fzpd ikgeq gti ejftoou ezs cqef mybojc rgwz +mdaay yfppa pavl fuuvfkh hpod tpb dhxmia emdecm rbqcwbk vecyt +neha rmvl ndp vlrm dpn debghi vyhvc +bnp zkxdu iqqkesd abtlx hmjasdq kyvekr krt srrjyd oxmfev oot +dumlcqd ccm hyir oritdz madjjw +oakqrs advfmu verrc zkfdcn btndsp +onlkinl rdtm bscfxre bnu oumyrvv kgc zkj +tfxfsgm uwmic agswclg uofezgc +wpfdyjn kjlihk etbot fbu scm gwccce xgownte wig cuaijbo +bzbdk etozk qracb oftfoo lkooe +xupzw vmxwu sis wzpxu +gbz oqbgh jwgrru bzg kwmxcfc jrurgw +agyjnyc tuec imxlult omwiyjg fiwnoqx nhmnro qtg kbr agyjnyc +koiq llreotu elrtoul dubfvgy whq +htm lll crzppb gdjaae nsmxzh gnfvn obiuy ymspzbo iuboy +thm xlfrr pbxdfo mht tygi sapxgbv mmngzf dej +eus seu qmstw ues +yvfsw esut biblze kbjcpk estu xih qzki ezlbbi blzv +ohq ugc tqqeo jygvpwm vfs ldnfibp ycbpa sml rmime +kuuow gbg nzwdaf wiimtg lam oqmm +wsbwkdd hda nqk ticz mvt +gqbljyh zqugqs cjod sxwlqy qkfs wwvwvt dsojb qbhjlgy riusoa uosari +jkphfx dbt les jsvoij rnuw mxmmchu dol vto swn +qqxe vwvephr twdqlyg cvdu xjiych clooq vkwavl whvverp yuz vkwval +txtbudi tiutdbx wqhx tws utgbf amh hmf izsez ooz +egdube nhsxjs nxjshs xoy sjsxnh +egdziod diodegz ejxn zogedid uhhkr rnm cyvvuc uqbl +rbn pinwag sidwdwv jqdbe jlbemk blkeaqq ipfqbtn zkrbp +bdryz sbh wxvn mhot wemsfm oemkff +vxyn xvdwwo xhd vyca zxjaw vfkz xhg ofsphks dyq mmzzd +yjrqsjf iiesdh envwyx rmtbmiv ggzsg ukx bprfym qmyqc vag ymho hjtoh +fuxxrd wbweptd vkoffr wbweptd +gfwcez smetli yjyh pslpz qyokpsm qsy cxjymg wqfkf obuq awz +eqhm ceest kayf heqm +rdi dti vntcf ewkmpvf jjwoihc +sfq qlb xrm ocy vtnj zdznbal zvon stln zwnj wsgalvq vhphap +pya jay mgnyo pya xmapdn +hrwbj xhr gvwl ktq ktq gvwl +rzgqi hjwtthl kxhggbl wepc hgavj ctmqug +tzfwkc xeqfath iiuwq iiuwq dhwuvy +gibagy smq getjofc lum msq ulm xuxu bilrus ily +xlv ndrkch hdcknr nqltoze xvl +wmc vuzlrj mwc atp cvpx atv ujatz +hxpafgl ymjltv nvvpy ahycdk jhpdcks ettm lvqyw ertpivm dnezwxx usi kdhcay +vrh hqyomv mcq ilwjbkz yprjxad +ugv szfitxg zeluib pfj ijm zmiigxx gltxzz jzljhgh otskue +mxp bilj jlbi tce yfted zxsqas ftyed +ykasqv ehye kirmnl upmi dojwmw wzj ykasqv ifixn vreoypz +kerbgub nnroqk onkqnr gbebkur tjhl knjo ccsem yozvrcg +ygq evkoj wkn ffljhds scxeibh egsybeg mwvi vgjblj qda ywqpp +hocvpl ozgkxp xgmj ejzyxm +gernu kks lxe nxzv sypg xle goz +xoatis fjp wzlbo dzkonz jtutyj vdonj swro tqclemv xhomap ymeqkua vaxcw +mxcyjs ywyxndk wng vpftv nsuvu +jmiyyhh gwser shgcu jmyg cjzegc hmhe eopg kmkan +smdd dmds mgqhtkh qtamih haqmit skkcy +dnj rmggy rgymg uburbao rymgg +klcpjgq ons ajyv sqryt son pjlcgkq xlobdt +piw shonk tzi mcdumz noskh tebolw yaypn +ozm mvmjgtg nxj weommiq asnmhzq xjn uobztuo cqgjh utfb oydt ommiewq +qlwgsc vvpe xgft ahpjc zjtx iyof scwqlg dxgcokx ltrefj xyzq rwto +ggqdd dqgdg ggdqd kjkmmfp +htzjam fjbg iagc xls iagc iydtf ihxl boa iydtf +vhe nqj bwgdoi hhaoa qtulz +axvyja hpdkwee hnryj prou rgadv oubjdqg knjbc +caz xibj wqkzwe peioeya vmz hesy ftb +dudwcr gupj sjrtzc xsqbb hiet nujv bebcvsj eks uuzlcx gex +kywozi tfzuc mflssw hnxxxqt zzc tzfuc hkokuv mnjg lwkavjp lvpwjak xez +izgh zfv cingjt dkf cknite qox vfz zvf +ojpu dzk tehpgnt gntpteh +glxfxa uxq ajtles ahgzn ajlste zwgc mrpu adz wuunwhc zda +hdgdtn hnoyz aromkb qujfv yjgmn tbf atw +uyvsv oaopjv uyvemxk ldpp tthe iisjk txr hebmd yxevukm rkziao znt +ypdr mnwuzvw acpg kzwz ywbn wcrr umrnlbe lkult ljify azyhu mgqoo +abmpl omsd xmyl mxyl mgoq kracrf ufm ppwi zpggh +uxfdpv jnm vvc vchunhl ubv ktj mxolsxz +fcja eci edzrb nlvksaw lhf ycohh tfztt xso ceub tyv +rkwtp tcmmvv kufg cxui hdamg suuaej fgku cvjlv +oldbgy riadoyo djsi wca zxoeq pmemqap aijxa +nyy ruxcosx xisqoz yny jvzfpbe tlfdiaj ybd jifatdl zuzv +kxwdz qvrvx svllp ergmme +swjfuv eronk favcxfm acptbh pnbjn ciqcrlt rgvdnlt icgahb +ddza xxfn use obqka bfzwjp gmf bld fyvde mxdfdl +ame bmxbyf ame bmxbyf +rdgby pyfog dybrg gdryb lpztd +sntg impd uxgxai naoalb ntnk xgix +oadpmqj oso criln izih oos +ouzjq gtl ito xefqt phnv ouzjq hoyjjj +mlp rboq lpm roqb whvp +tghcw ggshevw dzsgj ggshevw kec ggshevw +kmwhb kfcb mbhkw gemz fdh +euve veue kplrq evue +hikfiw bcdktj hcnawja gjasvwc vcht igrzly rkxijxe ikfwhi dvmp +hvksis kafs ktcs sfyqzyt etctrgt vodwr wff tskc juobnm +dpcsodn ehwc pglywfl yhdp mdiyzx +ibog umftejh cfm pnxhna wqwx yabnk ygws dqw +dezz tqw qism rarfe fpmlab xvbau irwtfs wwmoyss yvn xetqp xtqep +pchqwk npsmd jefec qok uuc ucnpz rlkakn +kudh rjysb xrdbx bkbmjfo xrdbx +rogu ssdwsus voa ncw obkxsr +tflf hlevus scq rrbpat tau wxsq wxoblt +rzr lex kqdy whtj ffnys xlgkkff msjhy dimaq hrc wyde qkwf +ghtwd wernjpn tdgwh olrfvmr edq gxvp +rjirvf skhdgln aauit bipu mubjiwp kowz gyjfbjx cmgdqs +aftfpbv agajyy aqjll vsf twh robpys lebt eav yribup +sby ymkla sxkbfwl awmd nhb vlp +kizvjj ycjswr jkzjiv vuy jijzkv jcs +cwvch xzqfal tephz lqfzax cnkbdcr mql zflaxq +jjxzwl himpra ssjf bibfiui seeaq pzse +jogrn jogrn sqew jogrn oixgwr +khonpyw iiyxir vybhc ndnxxv kzlt ipmncn +okqkqu svbemi nfn ovd xgwy edd ujet nrrbv dde vdo +jobvf dus asvio vaosi sovia +knmz qbz nkmz zmkn +isbmopr unduey impobrs hea zswciev sopbmri duuj +ocs ntgnrdu kbvtzp cvyieu fiyn znmh lhrz ixtnzrj vktbpz lbpqx vzkpbt +muduhc sabc dlyoisz kuaz ogpyepw yuog ictiiqt +xjflsf nfklvml thfh uajnmby cichyj xxoqi lpime bxpyx +riahifn bohbgd obhdgb jni qzvkf ybp hjkkwq ytutd cakcsh smfdoe tuytd +iddku nccp zgtl yne ppzpqcx lwm +refpcz uqt uqt uqt +mtn czxkagb nmt caqacrg bcakxgz +itxjii uethxbj vpds bsqod diqax inv zrwt doepe +bfyaj nbvhg zmi buf +dtre dkwdr nrapm qtfth odvt bbcnae vxuk gqm enlg +ybt qcfozrk yzrh bfp euuozuz pzsdkxx mhi nbkzprb +vpuhqn gyx caint antci vfep incat kqdakdx +ddhi chgnjk ibg xbemitr mjtdph eovw +ngbtuvq qdttlsg dbqhhwk bkrqze qdttlsg qdttlsg +evn smvhi dgcmn xjo ascc ahbpj uvzc pwn tung +ksu thr omg onvsqzz rllakar ysfjtfj grxwyx oawix gpk suk +qvb iouav yhtndkd vuoia ouaiv +kud kofcip hcczrgc cvvxxlk rvyamwe duthdzr dftun +rgv ynw gph tmxwfup nwy +dnc trawj kwzbx trawj zvp +ogqxijy tbqtsg tbo vqinnlq jbvgl sfafh rve mcxqs ubh +qccr lpv puuvdyb tydaflf uxic +tlon tbfwkxg tlon tlon +iytiz qjlqaqw uixb lnt zwro uzgxqfi gklgnqs zwgoidw iifk wkwdo +tmvhxw tmvhxw tmvhxw fhiqpjy ejk kvysd +cmphg xjjz groiccd dvetuk xbwa zhm lyi ohhd neg bxaw yil +kdmzopy lxx bvhach goxmxu qbqvzcm qbbrhvb nrfom aixmio grpxz hbrqbbv lkucih +bnqn phqr uycuxc mopyyfh bbpesqm stgigq stggqi cwtjm asqhpl imvlxj lbmloo +pws iuvbvjr cwccm qbr srqnstz cjebq +bfh jobkcy gtbroe lpagq icmax jobyck fbh +ounqdo qrrr pwi alho rrqr beao rsioepe +vrccqge qvcgrce cbslkjs qnclw rvmjkw +aaxjns deupjs wtgxtp penad depbho tbrdt depbho qxg zhjxpgd +drqfo kbp jfa jaf +izn oczcitj cpae quvzqo iwwk jck idjdpm +ecort zgcvxx bvh vrprsf +fhubfvy ndcfjo kol hyufbfv hvpka +kpt zgajpc rjvsxa gayznjd +xeoixk peq kfu lqa mjnv mzvh bicl hlfk +wyt imdx lksy twy +xeptp ilxs qbsqzwn rsy slxi xtpep dsdkekl +rotvbt fuirp elos ciu nhx bxej trmtx ixn xbpc vrxtma +skcprn yns sao ghlq vftezvc aaryahy telt +fkaov gexa xijv yiksa xega dhgw okfva gxxs edkecag mqbqvrm nrzcqub +ljc jujxeof fdj gdzjzr mabbktu pmyrfv uspven zxry snt hrah +nhujhdr jdhrnuh midm bbavhpp cpjk zmpbasz eptrpou znq zqn +ywzfq wuu lfflon uuw rke qzwyf hjbms gakx +yqrq zsk jzn uuuzrml kzs lseupsg waynfh blech +gwyqej weyjqg uwuje uujwe +lxud rnwkc bgygkh csq rfvtos ystqp keb gkakodj uthcce eqxifl +elvj evj rfwo vvgkosh aarcgjs utsbh orwf jxcqvmh uowmktl qtgf +bqszre oxntty ombwiz mbiwzo +ccp iilcc tacf czk giwv erqi jgdfah wip xtrzhv wosvbyb +gymyw rwsxeg gvydr izyk spsonkg knospsg +djj tbr tbr tbr ice +yyzh zkykapw puydtik ysxc hjumhsd cuhhw dnnhida yyzh lnklymg +nhbcxsu ccrbbyw scbxunh ghxrkqh brcwcyb +latdaav sexa ipzuzjl ayusb etb fshh +giz akqd vjmabii arfuzgv efrww jxkvolg efrww vrnzgbx +jmcc vqy adkzj fqrkdo tjrczp ccmj cfponk rptzjc +jsviu sraw imsj fujm cdf xwqhl lhz ojejzuy trtqblg +ibz dulm muoq quom etvjzxn tuhrpp jfukac jqctqn qhgbae msgmcit ludm +zgx bpfa elhp rnyqtq wyceube nkeuxz +lzxfo vygpecv jszacku zfxlo +cpmv ysaaj xnp wbvqg hrsiuj venjxna yeqvwmk ftaga dcqxc jgapb rqdixp +xpbbe tyn hfdlu fto wrgzkou sxylv cqto wdv xqc pnu rapk +pkrxypl wnu oipq tzbhnc gpug tgzf ofjb +mvaz bwcv gll itgcye dessw szt gzimgeu bvmohh wbywyhc kzerxbr anjsive +lhvnrzs qkmjwy pnyciwp mgp jfdz ghvtf yusfzg upab +xbscukx aubulj snbcmc uscxkbx ddpucyg +hgv ollh yzpjmpy fcicyae vhg gvh +prd onyd iux oik xui +zipadig nvewx cir lbpcusx dljqy +ifyxzsc btmy lsu tmyb lus ldyzx +egmyxbe ieasvek dylmj qahtatr uyqgbk +mejjczw spj vaekp kdud +vwan mgenld mnlged vpfuil euoxlr rclkpi dfknyoa rhthij kcyxl qaxab crlpik +pqm eihogk iwml nuauxi ngilkoh jmu mbdi cqxz nblb rmuj zczdgp +pswbe mtzch wbeps fxtnc psa aioff pas +prwrpvz oadpqvz tgzrt giom pjyihh rxdir dmya xjolzxv +khdybe obqkjn kdq jkvmgwo enpat wyw qjbnko waid msest wwkoyts +yep liv ofmtpod imdd qyw +afnrx jgn gxarpb myltj ggrsajy mdaobjo vbtn vbtn zlziz eds +hqr kqu oub skoeqk icnfm cqvld aay bto +rga odaf exoosh pwevx zpbd plaa xoseoh +mbr gqu oxvchrt nqa larxmjx pfozej +ozuo ywubjbg xcua eblwqp nfdvw hmhen zkjfu gmhgp bsyi ktprtf +src vrysby srybvy znwjm hmypwdl gdmau pqe +cldr crhi lbaq fbuduyn hygbz uhida +qrxukq dygkp oaks soka oask +vpido ajgfq pwlv hezt fmg epwrxo rqvjke iovpd hhkjm +anxf ydl xnfa hqph olorp +exydcg onxjm psqlbv ehz boar hze qsblpv +mnzrvc ipj swg ijp sgw gdkntsd fzz grqwly +erpq qghpj fay gci uglm afy +jwbq hbxaub jpdilyt yvalrlk topl qup +eczonk ftcc paltirb owz tihhe dglxory wthvqcb qdnxm lirejh alyxsr +ooruaby gboyeu lkv arrz jcqyzl uxlfk fhmeony fcmh +wzr xjb pwmf okqj adwcedy lkidve uwekxf asbdzr biub +dikhur pxgh urdinjh wednf ulzdxs +iplf byt tyt qnnlba pzt bednml ljjtkvo tjovlkj uwms xat +htzk ltmfha xikeze atfmhl fchxhyz +lqala bqwgcul vetaa xuxjau zcb wtdmomu wfqmpq sief uyblyz ahv +aytvvo awm ojaaigg awm dbfaokz +abq npcyld fzbfku oia qss jkxldm wgtmki pasgxi dieix rpqnuac tecnfy +nmr qzfj qjfz lsz vnahex +djxoo jzlkh svy xige +tjlkkg glcuvmh fwzlhi ecun qlgulj hrfhyql qgdlf ofakqdf zokkvm gelxkq oowgs +upfpk gfstjlv lxc rjd nhj sbq jpzsz zsjzp +favd nzqfdid nekfjsf mtjndu +sgdqx uvpuefv vhwrgd aivav gsqxd jdhfoq +llaf cthbgy njrpw fqgkx jzf xqkgf lnrfrm gkxqf +wzdwlc wisst alw kyjeur sjsqfcr tta bijnyn whfyoxl +dtjr baxkj lmnyrlg nrmyllg +mtgky xmwf zdko nnocxye gytkm ygp hixk xwmf +maudjy okgjga uadjmy dzfrk omd +azz ajdcqkd bcafn zaz dcjaqdk gylyzo +xzvfbf fopmfxu mvftgr mfupoxf coyhof talcc vpkslo diff --git a/2017/d05/ex1/ex1.py b/2017/d05/ex1/ex1.py new file mode 100755 index 0000000..7a09715 --- /dev/null +++ b/2017/d05/ex1/ex1.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python + +import itertools +import sys + + +def solve(input: str) -> int: + def parse(input: str) -> list[int]: + return [int(n) for n in input.splitlines()] + + instructions = parse(input) + offset = 0 + for i in itertools.count(): + if offset < 0 or offset >= len(instructions): + return i + instructions[offset] += 1 + offset += instructions[offset] - 1 # Account for previous increment + assert False # Sanity check + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d05/ex1/input b/2017/d05/ex1/input new file mode 100644 index 0000000..c584877 --- /dev/null +++ b/2017/d05/ex1/input @@ -0,0 +1,1090 @@ +2 +1 +2 +-2 +-2 +1 +1 +2 +-2 +0 +-3 +-9 +0 +0 +2 +-12 +-1 +-12 +0 +-16 +-14 +-14 +-3 +-9 +-11 +0 +-23 +-21 +2 +-4 +-28 +-27 +-4 +-19 +-9 +-8 +-25 +-27 +-1 +-29 +-13 +0 +-29 +-29 +-35 +2 +-3 +2 +-2 +-46 +-18 +1 +-47 +-6 +-27 +-47 +-43 +-40 +-25 +-37 +-4 +-31 +1 +-6 +-2 +-38 +-1 +-66 +-33 +-48 +-47 +-9 +-58 +-7 +-57 +-35 +-61 +-11 +0 +-76 +0 +-80 +-77 +-72 +-5 +-47 +-38 +-16 +-28 +-47 +-19 +-42 +-15 +-88 +-34 +-50 +-12 +-54 +-63 +-95 +-1 +-66 +-48 +-14 +-34 +-72 +-63 +-101 +-102 +-107 +-37 +-75 +-28 +-23 +-14 +-61 +-108 +-71 +-113 +-96 +-26 +-28 +-92 +-64 +-47 +-74 +-9 +-113 +-126 +-61 +-36 +-40 +-26 +-73 +-7 +-99 +-3 +-15 +-127 +-104 +-89 +-67 +-81 +-8 +-63 +-109 +-57 +-81 +-101 +-57 +-94 +-78 +-82 +-9 +-118 +-34 +-93 +-147 +-41 +0 +-44 +-57 +-11 +-22 +-86 +-6 +-55 +-47 +-49 +-124 +-139 +-144 +-7 +-23 +-128 +-97 +-27 +-151 +-104 +-94 +-177 +-165 +-136 +-167 +-53 +-15 +-8 +-72 +2 +-4 +-44 +-15 +-177 +-188 +-142 +-71 +-161 +-81 +-169 +-150 +-144 +-193 +-143 +-185 +-33 +-21 +-198 +-97 +-55 +-50 +-183 +-94 +-77 +-138 +-195 +-146 +-4 +-193 +-132 +-88 +-93 +-67 +-100 +-162 +-107 +-17 +-108 +-213 +-123 +-49 +-191 +-180 +-73 +-182 +-125 +-176 +-65 +-189 +-131 +-18 +-145 +-197 +-136 +-53 +-60 +-209 +-67 +-244 +-163 +-246 +-153 +-16 +-231 +-68 +-165 +-42 +-3 +-9 +-178 +-250 +-37 +-128 +-99 +-145 +-234 +-167 +-123 +-222 +-101 +-46 +-52 +-129 +-155 +-85 +-122 +-228 +-150 +-237 +-173 +-29 +-24 +-175 +-229 +-106 +-236 +-234 +-246 +-90 +-105 +-274 +-211 +-94 +-285 +-201 +-92 +-204 +-215 +-115 +-213 +-218 +-2 +-122 +-176 +-2 +-35 +-143 +2 +-190 +-216 +-38 +-247 +-309 +-18 +-119 +-198 +-275 +-91 +-151 +-195 +-299 +-192 +-25 +-162 +-37 +-70 +-30 +-42 +-249 +-156 +-319 +-317 +-264 +-19 +-47 +-38 +-235 +-184 +-25 +-43 +-127 +-168 +-138 +-35 +-24 +-257 +-30 +-259 +-22 +-69 +-80 +0 +-212 +-41 +-20 +-90 +-196 +-169 +-47 +-238 +-320 +-132 +-348 +-301 +-242 +-353 +-63 +-51 +-33 +-270 +-196 +-334 +-160 +-63 +-177 +-42 +-30 +-216 +-219 +-155 +-146 +-192 +-113 +-368 +-349 +-330 +-33 +-4 +-302 +-119 +-387 +-336 +2 +-201 +-344 +1 +-6 +-339 +-311 +-79 +-55 +-67 +-118 +-257 +-215 +-141 +-40 +-117 +-28 +-345 +-312 +-60 +-57 +-43 +-193 +-134 +-144 +-28 +-11 +-138 +-48 +-167 +-76 +-99 +-51 +-283 +-174 +-159 +-72 +-55 +-155 +-343 +-226 +-195 +-364 +-39 +-368 +-117 +-256 +-42 +-172 +-236 +-231 +-133 +-36 +-442 +-178 +-101 +-213 +-142 +-266 +-305 +-95 +-341 +-227 +-217 +-162 +-1 +-168 +-384 +-424 +2 +-394 +-96 +-458 +-258 +-232 +0 +-283 +-393 +-211 +0 +-466 +-431 +-455 +-430 +-459 +0 +-235 +-96 +-371 +-479 +-117 +-39 +-291 +-220 +-403 +-325 +-433 +-189 +-275 +-58 +-109 +-191 +-175 +-416 +-61 +-269 +-411 +-330 +-497 +-487 +-393 +-417 +-275 +-157 +-208 +-196 +-330 +-427 +-361 +-304 +-385 +-16 +-175 +-250 +-101 +-256 +-186 +-369 +-328 +-322 +-190 +-135 +-71 +-455 +-303 +-287 +-95 +-55 +-446 +-489 +-329 +-410 +-372 +-36 +-7 +-407 +-455 +-347 +-160 +-376 +-515 +-414 +-433 +-107 +-508 +-156 +-111 +-81 +-382 +-203 +-3 +-109 +-163 +-61 +-313 +-516 +-277 +-306 +-166 +-286 +-437 +-100 +-117 +-556 +-248 +-326 +-550 +-424 +-21 +-524 +-27 +-69 +-244 +-303 +-124 +-299 +-434 +-364 +-543 +-233 +-189 +-279 +-159 +-49 +-112 +-291 +-173 +-143 +-482 +-202 +-446 +-226 +-439 +-496 +-568 +-171 +-376 +-80 +-189 +-495 +-67 +-22 +-470 +-330 +-329 +-259 +-30 +-201 +-591 +-543 +-33 +-591 +-3 +-493 +-614 +-579 +-283 +-251 +-518 +-230 +-408 +-87 +-438 +-551 +-521 +-424 +0 +-552 +-87 +-311 +-570 +-250 +-552 +-316 +-239 +-628 +-508 +-142 +-56 +-288 +-38 +-567 +-477 +-195 +-337 +-23 +-78 +-237 +-569 +-533 +-345 +-220 +-16 +-223 +-565 +-488 +-152 +-517 +-448 +-563 +-73 +-153 +-275 +-186 +-308 +-576 +-64 +-293 +-118 +-138 +-422 +-645 +-302 +-193 +-171 +-190 +-218 +-330 +-96 +-454 +-343 +-399 +-327 +-484 +-379 +-362 +-484 +-477 +-490 +-243 +-551 +-649 +-418 +-54 +-137 +-355 +-624 +-18 +-294 +-333 +-425 +-540 +-322 +-77 +-201 +-550 +-318 +-571 +-396 +-616 +-626 +-404 +-105 +-661 +-538 +-398 +-690 +-353 +-445 +-523 +-72 +-1 +-502 +-711 +-274 +-81 +-272 +-644 +-598 +-593 +-716 +-355 +-620 +-550 +-427 +-647 +-723 +-275 +-500 +-49 +-4 +-575 +-268 +-336 +-674 +-742 +-285 +-672 +-622 +-591 +-421 +-574 +-167 +-38 +-314 +-597 +-255 +-277 +-651 +-571 +-153 +-292 +-5 +-101 +-348 +-48 +-119 +-448 +-685 +-389 +-471 +-646 +-285 +-239 +-249 +-465 +-198 +-43 +-522 +-19 +-82 +-240 +-521 +-136 +-586 +-195 +-446 +-587 +-58 +-263 +-550 +-449 +-220 +-39 +-691 +-386 +-199 +-96 +-144 +-151 +-593 +-237 +-414 +-238 +-377 +-280 +-638 +-729 +-235 +-603 +-214 +-245 +-714 +-323 +-297 +-558 +-416 +-388 +-271 +-622 +-62 +-726 +-242 +-550 +-277 +-709 +-62 +-266 +-632 +-411 +-327 +-574 +-183 +-467 +-332 +-804 +-693 +-809 +-240 +-496 +-380 +-749 +-466 +-738 +-761 +-832 +-398 +-105 +-675 +-772 +-136 +-4 +-46 +-58 +-836 +-688 +-722 +-466 +-346 +-117 +-183 +-330 +-794 +-101 +-253 +-2 +-519 +-113 +-115 +-439 +-118 +-398 +-326 +-409 +-723 +-719 +-354 +-200 +-647 +-520 +-29 +-130 +-564 +-880 +-823 +-309 +-352 +-822 +-326 +-302 +-452 +-281 +-467 +-316 +-115 +-623 +-625 +-142 +-262 +-382 +-85 +-743 +-340 +-50 +-270 +-118 +-683 +-218 +-595 +-217 +-371 +-397 +-443 +-755 +-909 +-378 +-843 +-644 +-303 +-642 +-798 +-90 +-562 +2 +-733 +-792 +-235 +-536 +-132 +-481 +-386 +-795 +-167 +-145 +-725 +-403 +-533 +-761 +-599 +-732 +-719 +-250 +-239 +-626 +-318 +-135 +-756 +-308 +-287 +-130 +-277 +-265 +-709 +-252 +-679 +-126 +-794 +-6 +-194 +-715 +-703 +-373 +-481 +-928 +-710 +-155 +-431 +-780 +-658 +-897 +-947 +-55 +-271 +-927 +-554 +-165 +-763 +-895 +-329 +-132 +-293 +-134 +-524 +-824 +-277 +-187 +-849 +-193 +-167 +-175 +-125 +-489 +-36 +-960 +-931 +-533 +-9 +-599 +-589 +-795 +-418 +-679 +-793 +-592 +-24 +-100 +-664 +-382 +-524 +-549 +-124 +-899 +-583 +-470 +-897 +-309 +-886 +-291 +-971 +-123 +-122 +-841 +-218 +-62 +-434 +-113 +-138 +-358 +-569 +-182 +-839 +-621 +-596 +-977 +-297 +-590 +-738 +-503 +-334 +-756 +-245 +-505 +-107 +-376 +-958 +-937 +-986 +-942 +-589 +-541 +-612 +-932 +-314 +-114 +-213 +-922 +-31 +-380 +-152 +-512 +-521 +-34 +-613 +-759 +-781 +-256 +-297 +-155 +-853 +-169 +-842 +-567 +-533 +-709 +-19 +-517 +-542 +-376 +-149 +-934 +-496 +-782 +-469 +-320 +-219 +-902 +-155 +-971 +-1074 diff --git a/2017/d05/ex2/ex2.py b/2017/d05/ex2/ex2.py new file mode 100755 index 0000000..10f1f4d --- /dev/null +++ b/2017/d05/ex2/ex2.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python + +import itertools +import sys + + +def solve(input: str) -> int: + def parse(input: str) -> list[int]: + return [int(n) for n in input.splitlines()] + + instructions = parse(input) + offset = 0 + for i in itertools.count(): + if offset < 0 or offset >= len(instructions): + return i + delta = -1 if instructions[offset] >= 3 else 1 + instructions[offset] += delta + offset += instructions[offset] - delta # Account for previous increment + assert False # Sanity check + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d05/ex2/input b/2017/d05/ex2/input new file mode 100644 index 0000000..c584877 --- /dev/null +++ b/2017/d05/ex2/input @@ -0,0 +1,1090 @@ +2 +1 +2 +-2 +-2 +1 +1 +2 +-2 +0 +-3 +-9 +0 +0 +2 +-12 +-1 +-12 +0 +-16 +-14 +-14 +-3 +-9 +-11 +0 +-23 +-21 +2 +-4 +-28 +-27 +-4 +-19 +-9 +-8 +-25 +-27 +-1 +-29 +-13 +0 +-29 +-29 +-35 +2 +-3 +2 +-2 +-46 +-18 +1 +-47 +-6 +-27 +-47 +-43 +-40 +-25 +-37 +-4 +-31 +1 +-6 +-2 +-38 +-1 +-66 +-33 +-48 +-47 +-9 +-58 +-7 +-57 +-35 +-61 +-11 +0 +-76 +0 +-80 +-77 +-72 +-5 +-47 +-38 +-16 +-28 +-47 +-19 +-42 +-15 +-88 +-34 +-50 +-12 +-54 +-63 +-95 +-1 +-66 +-48 +-14 +-34 +-72 +-63 +-101 +-102 +-107 +-37 +-75 +-28 +-23 +-14 +-61 +-108 +-71 +-113 +-96 +-26 +-28 +-92 +-64 +-47 +-74 +-9 +-113 +-126 +-61 +-36 +-40 +-26 +-73 +-7 +-99 +-3 +-15 +-127 +-104 +-89 +-67 +-81 +-8 +-63 +-109 +-57 +-81 +-101 +-57 +-94 +-78 +-82 +-9 +-118 +-34 +-93 +-147 +-41 +0 +-44 +-57 +-11 +-22 +-86 +-6 +-55 +-47 +-49 +-124 +-139 +-144 +-7 +-23 +-128 +-97 +-27 +-151 +-104 +-94 +-177 +-165 +-136 +-167 +-53 +-15 +-8 +-72 +2 +-4 +-44 +-15 +-177 +-188 +-142 +-71 +-161 +-81 +-169 +-150 +-144 +-193 +-143 +-185 +-33 +-21 +-198 +-97 +-55 +-50 +-183 +-94 +-77 +-138 +-195 +-146 +-4 +-193 +-132 +-88 +-93 +-67 +-100 +-162 +-107 +-17 +-108 +-213 +-123 +-49 +-191 +-180 +-73 +-182 +-125 +-176 +-65 +-189 +-131 +-18 +-145 +-197 +-136 +-53 +-60 +-209 +-67 +-244 +-163 +-246 +-153 +-16 +-231 +-68 +-165 +-42 +-3 +-9 +-178 +-250 +-37 +-128 +-99 +-145 +-234 +-167 +-123 +-222 +-101 +-46 +-52 +-129 +-155 +-85 +-122 +-228 +-150 +-237 +-173 +-29 +-24 +-175 +-229 +-106 +-236 +-234 +-246 +-90 +-105 +-274 +-211 +-94 +-285 +-201 +-92 +-204 +-215 +-115 +-213 +-218 +-2 +-122 +-176 +-2 +-35 +-143 +2 +-190 +-216 +-38 +-247 +-309 +-18 +-119 +-198 +-275 +-91 +-151 +-195 +-299 +-192 +-25 +-162 +-37 +-70 +-30 +-42 +-249 +-156 +-319 +-317 +-264 +-19 +-47 +-38 +-235 +-184 +-25 +-43 +-127 +-168 +-138 +-35 +-24 +-257 +-30 +-259 +-22 +-69 +-80 +0 +-212 +-41 +-20 +-90 +-196 +-169 +-47 +-238 +-320 +-132 +-348 +-301 +-242 +-353 +-63 +-51 +-33 +-270 +-196 +-334 +-160 +-63 +-177 +-42 +-30 +-216 +-219 +-155 +-146 +-192 +-113 +-368 +-349 +-330 +-33 +-4 +-302 +-119 +-387 +-336 +2 +-201 +-344 +1 +-6 +-339 +-311 +-79 +-55 +-67 +-118 +-257 +-215 +-141 +-40 +-117 +-28 +-345 +-312 +-60 +-57 +-43 +-193 +-134 +-144 +-28 +-11 +-138 +-48 +-167 +-76 +-99 +-51 +-283 +-174 +-159 +-72 +-55 +-155 +-343 +-226 +-195 +-364 +-39 +-368 +-117 +-256 +-42 +-172 +-236 +-231 +-133 +-36 +-442 +-178 +-101 +-213 +-142 +-266 +-305 +-95 +-341 +-227 +-217 +-162 +-1 +-168 +-384 +-424 +2 +-394 +-96 +-458 +-258 +-232 +0 +-283 +-393 +-211 +0 +-466 +-431 +-455 +-430 +-459 +0 +-235 +-96 +-371 +-479 +-117 +-39 +-291 +-220 +-403 +-325 +-433 +-189 +-275 +-58 +-109 +-191 +-175 +-416 +-61 +-269 +-411 +-330 +-497 +-487 +-393 +-417 +-275 +-157 +-208 +-196 +-330 +-427 +-361 +-304 +-385 +-16 +-175 +-250 +-101 +-256 +-186 +-369 +-328 +-322 +-190 +-135 +-71 +-455 +-303 +-287 +-95 +-55 +-446 +-489 +-329 +-410 +-372 +-36 +-7 +-407 +-455 +-347 +-160 +-376 +-515 +-414 +-433 +-107 +-508 +-156 +-111 +-81 +-382 +-203 +-3 +-109 +-163 +-61 +-313 +-516 +-277 +-306 +-166 +-286 +-437 +-100 +-117 +-556 +-248 +-326 +-550 +-424 +-21 +-524 +-27 +-69 +-244 +-303 +-124 +-299 +-434 +-364 +-543 +-233 +-189 +-279 +-159 +-49 +-112 +-291 +-173 +-143 +-482 +-202 +-446 +-226 +-439 +-496 +-568 +-171 +-376 +-80 +-189 +-495 +-67 +-22 +-470 +-330 +-329 +-259 +-30 +-201 +-591 +-543 +-33 +-591 +-3 +-493 +-614 +-579 +-283 +-251 +-518 +-230 +-408 +-87 +-438 +-551 +-521 +-424 +0 +-552 +-87 +-311 +-570 +-250 +-552 +-316 +-239 +-628 +-508 +-142 +-56 +-288 +-38 +-567 +-477 +-195 +-337 +-23 +-78 +-237 +-569 +-533 +-345 +-220 +-16 +-223 +-565 +-488 +-152 +-517 +-448 +-563 +-73 +-153 +-275 +-186 +-308 +-576 +-64 +-293 +-118 +-138 +-422 +-645 +-302 +-193 +-171 +-190 +-218 +-330 +-96 +-454 +-343 +-399 +-327 +-484 +-379 +-362 +-484 +-477 +-490 +-243 +-551 +-649 +-418 +-54 +-137 +-355 +-624 +-18 +-294 +-333 +-425 +-540 +-322 +-77 +-201 +-550 +-318 +-571 +-396 +-616 +-626 +-404 +-105 +-661 +-538 +-398 +-690 +-353 +-445 +-523 +-72 +-1 +-502 +-711 +-274 +-81 +-272 +-644 +-598 +-593 +-716 +-355 +-620 +-550 +-427 +-647 +-723 +-275 +-500 +-49 +-4 +-575 +-268 +-336 +-674 +-742 +-285 +-672 +-622 +-591 +-421 +-574 +-167 +-38 +-314 +-597 +-255 +-277 +-651 +-571 +-153 +-292 +-5 +-101 +-348 +-48 +-119 +-448 +-685 +-389 +-471 +-646 +-285 +-239 +-249 +-465 +-198 +-43 +-522 +-19 +-82 +-240 +-521 +-136 +-586 +-195 +-446 +-587 +-58 +-263 +-550 +-449 +-220 +-39 +-691 +-386 +-199 +-96 +-144 +-151 +-593 +-237 +-414 +-238 +-377 +-280 +-638 +-729 +-235 +-603 +-214 +-245 +-714 +-323 +-297 +-558 +-416 +-388 +-271 +-622 +-62 +-726 +-242 +-550 +-277 +-709 +-62 +-266 +-632 +-411 +-327 +-574 +-183 +-467 +-332 +-804 +-693 +-809 +-240 +-496 +-380 +-749 +-466 +-738 +-761 +-832 +-398 +-105 +-675 +-772 +-136 +-4 +-46 +-58 +-836 +-688 +-722 +-466 +-346 +-117 +-183 +-330 +-794 +-101 +-253 +-2 +-519 +-113 +-115 +-439 +-118 +-398 +-326 +-409 +-723 +-719 +-354 +-200 +-647 +-520 +-29 +-130 +-564 +-880 +-823 +-309 +-352 +-822 +-326 +-302 +-452 +-281 +-467 +-316 +-115 +-623 +-625 +-142 +-262 +-382 +-85 +-743 +-340 +-50 +-270 +-118 +-683 +-218 +-595 +-217 +-371 +-397 +-443 +-755 +-909 +-378 +-843 +-644 +-303 +-642 +-798 +-90 +-562 +2 +-733 +-792 +-235 +-536 +-132 +-481 +-386 +-795 +-167 +-145 +-725 +-403 +-533 +-761 +-599 +-732 +-719 +-250 +-239 +-626 +-318 +-135 +-756 +-308 +-287 +-130 +-277 +-265 +-709 +-252 +-679 +-126 +-794 +-6 +-194 +-715 +-703 +-373 +-481 +-928 +-710 +-155 +-431 +-780 +-658 +-897 +-947 +-55 +-271 +-927 +-554 +-165 +-763 +-895 +-329 +-132 +-293 +-134 +-524 +-824 +-277 +-187 +-849 +-193 +-167 +-175 +-125 +-489 +-36 +-960 +-931 +-533 +-9 +-599 +-589 +-795 +-418 +-679 +-793 +-592 +-24 +-100 +-664 +-382 +-524 +-549 +-124 +-899 +-583 +-470 +-897 +-309 +-886 +-291 +-971 +-123 +-122 +-841 +-218 +-62 +-434 +-113 +-138 +-358 +-569 +-182 +-839 +-621 +-596 +-977 +-297 +-590 +-738 +-503 +-334 +-756 +-245 +-505 +-107 +-376 +-958 +-937 +-986 +-942 +-589 +-541 +-612 +-932 +-314 +-114 +-213 +-922 +-31 +-380 +-152 +-512 +-521 +-34 +-613 +-759 +-781 +-256 +-297 +-155 +-853 +-169 +-842 +-567 +-533 +-709 +-19 +-517 +-542 +-376 +-149 +-934 +-496 +-782 +-469 +-320 +-219 +-902 +-155 +-971 +-1074 diff --git a/2017/d06/ex1/ex1.py b/2017/d06/ex1/ex1.py new file mode 100755 index 0000000..e729e49 --- /dev/null +++ b/2017/d06/ex1/ex1.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python + +import itertools +import sys + +MemoryBlocks = tuple[int, ...] + + +def solve(input: str) -> int: + def parse(input: str) -> MemoryBlocks: + return tuple(int(n) for n in input.split()) + + def redistribute(nums: MemoryBlocks) -> MemoryBlocks: + res = list(nums) + i = res.index(max(res)) # Quick and hasty `argmax` + n, res[i] = res[i], 0 + common, remain = n // len(res), n % len(res) + for j in range(i + 1, i + remain + 1): + res[j % len(res)] += 1 + for j in range(len(res)): + res[j] += common + return tuple(res) + + blocks = parse(input) + seen: set[MemoryBlocks] = set() + for i in itertools.count(): + if blocks in seen: + return i + seen.add(blocks) + blocks = redistribute(blocks) + assert False # Sanity check + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d06/ex1/input b/2017/d06/ex1/input new file mode 100644 index 0000000..d369702 --- /dev/null +++ b/2017/d06/ex1/input @@ -0,0 +1 @@ +2 8 8 5 4 2 3 1 5 5 1 2 15 13 5 14 diff --git a/2017/d06/ex2/ex2.py b/2017/d06/ex2/ex2.py new file mode 100755 index 0000000..a7ad7d8 --- /dev/null +++ b/2017/d06/ex2/ex2.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python + +import itertools +import sys + +MemoryBlocks = tuple[int, ...] + + +def solve(input: str) -> int: + def parse(input: str) -> MemoryBlocks: + return tuple(int(n) for n in input.split()) + + def redistribute(nums: MemoryBlocks) -> MemoryBlocks: + res = list(nums) + i = res.index(max(res)) # Quick and hasty `argmax` + n, res[i] = res[i], 0 + common, remain = n // len(res), n % len(res) + for j in range(i + 1, i + remain + 1): + res[j % len(res)] += 1 + for j in range(len(res)): + res[j] += common + return tuple(res) + + blocks = parse(input) + count: dict[MemoryBlocks, int] = {} + for i in itertools.count(): + if blocks in count: + return i - count[blocks] + count[blocks] = i + blocks = redistribute(blocks) + assert False # Sanity check + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d06/ex2/input b/2017/d06/ex2/input new file mode 100644 index 0000000..d369702 --- /dev/null +++ b/2017/d06/ex2/input @@ -0,0 +1 @@ +2 8 8 5 4 2 3 1 5 5 1 2 15 13 5 14 diff --git a/2017/d07/ex1/ex1.py b/2017/d07/ex1/ex1.py new file mode 100755 index 0000000..a859fa6 --- /dev/null +++ b/2017/d07/ex1/ex1.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python + +import sys +from typing import NamedTuple + + +class ProgramYell(NamedTuple): + weight: int + children: set[str] + + +Tower = dict[str, ProgramYell] + + +def solve(input: str) -> str: + def parse_line(line: str) -> tuple[str, ProgramYell]: + name, rest = line.split(" ", 1) + weight, rest = rest.split(")") + children = set(rest.removeprefix(" -> ").split(", ")) if rest else set() + return name, ProgramYell(int(weight[1:]), children) + + def parse(input: str) -> Tower: + return {name: yell for name, yell in map(parse_line, input.splitlines())} + + def find_base(tower: Tower) -> str: + candidates = set(tower.keys()) + for yell in tower.values(): + candidates -= yell.children + assert len(candidates) == 1 + return candidates.pop() + + tower = parse(input) + return find_base(tower) + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d07/ex1/input b/2017/d07/ex1/input new file mode 100644 index 0000000..cd0fc4a --- /dev/null +++ b/2017/d07/ex1/input @@ -0,0 +1,1241 @@ +bqyqwn (68) -> wscqe, cwxspl, syogw, xnxudsh +ddswb (34) +hnkvw (320) +ibqmynm (252) -> oglcdgs, tkjofj, upurae, oypvhy, bzfkt, hdvcz, cfwxyl +rkerea (87) +lcmlbj (66) +vtccvv (69) +nachvlp (20) +tmkli (66) +exuyuk (82) +ojzogs (79) +egkiqcp (37) -> rxjnad, psetts +xadjes (10) +fivkqxx (121) -> acvzsbe, kkmax, qcmwsvm +krgtrdn (53) +mxemqqb (267) -> iuuouds, qqmvd +iwwqvoa (24) +yyecrv (59) +zjpkoar (40) +ilsgqdw (37) +bmlfd (43) +nxqwag (81) +ubbwvvl (44) +khfzis (48) -> ztxcc, bvejguc +gvtcy (39) +xbxxe (173) -> bzjxil, amklj +qejgaf (25) +uunpyb (82) +dmidur (57) +fklfgd (65) +vcjfe (22) +rkjfx (33) +ioglbe (88) +tymkixg (36) +qbhhtw (90) +afbrhy (79) +nswcez (47) +wzjonl (16) +xviqup (95) +claolm (312) -> ndmkbul, rpjfkh +qhlhfk (387) -> iwwqvoa, rmshk, ftezz +vtokttx (55) +boalcdm (13) +angpy (62) -> fitha, itxgz, pyiexlj, wqshh, rloxobx +gwcdf (32) +jpscxfh (46) -> qsakd, exuyuk, dqdmie, kjwfeoj +qkzpcyy (96) +fifams (415) +yseezd (11) +qcmwsvm (37) +hfnhd (152) -> vdcfh, ufrhi +wfgzr (82) +sjoov (6) +fonrb (7531) -> xohxq, cmsqe, jefsr +pyhof (21) +pplis (9) +fosdh (90) +pjkyydd (15) +wvmtyez (46) +bzfkt (66) -> rauho, xctuhbx +zyqssjb (13) -> olebdv, byahs, xajzwdh +wotus (119) -> dndrnc, tebkmhi, qejgaf +rusndcc (39) -> xcfxvd, kvylxr, vwkegak, oiuztx +stofi (16) +mgqil (66) -> noibcw, nptqxtu +qjzss (31) +hawhqex (71) +kjjee (174) -> lltgjo, gwcdf +gdamb (99) +diqdy (183) -> gackyrq, vcjfe, lcnsf +sfwzqk (54) -> rkuzg, ewvvb +vktjns (45) +urwaex (59) +nyouzhg (17) -> lofybs, baedi +mklqpn (9) +iktget (33) +gxtfu (57) +xkymbld (37) -> mqgbif, ptxfk +qjeuqe (92) +benqzp (92) -> wvmtyez, gmveehb +rkctaq (20) +sbwoye (50) +bujufb (148) -> tduxvx, lxzvkpk, jllqymn, csrpy +cwfydbh (369) -> qcmtgvr, tyvjs +cjjytkr (305) -> trszl, fgzgfc +qsakd (82) +domway (2464) -> kgphv, pjujovx, hrdggo +mrpji (61) +kzrgfb (92) +hocazx (818) -> bmukspb, mgbwxw, gyirkcj, kgxfc +bobvssz (25) -> srvqt, alhghui, wnjaw, qhlhfk, lsbvzaf, qjkfys, nnncfl +rrzyzq (76) +eaufvn (78) -> dtazpb, nlajc +tduix (18) +yzcez (62) -> rlxto, vkaxa +uvpuko (91) +xtnmps (95) -> ptatzl, bujufb, oybbzr, zwopz, phqpwkw +ibeis (54) +ofkvpq (500) -> auvuxv, stqmwk, dptekr +pmolg (166) -> uuunqk, uolqt +byedxex (180) -> gsaqlad, ebwubc +aicjff (67) +vtcxw (860) -> ezlfnhs, aizdt, ylbftp +nzuswm (80) -> ojzogs, qfopwo +hgwbg (89) +sflonq (190) -> gppwsbp, mpvgy +pqiuhyp (52) -> xbtjl, jykseco, aftnyad, xaden, urdgg, ijkpfv, ejekn +ccgjf (99) +devsz (38) +vmmtsr (33) +ebwubc (70) +mgcnohi (69) +klege (92) +jtlqxy (66) +ofbqk (148) +ewluica (22) +mulvwn (290) -> ubbwvvl, jmuqp, dnovxt +trlcj (245) +uezwz (20) +bbtnj (170) -> xvwok, rqyxzn +ndticx (54) -> rbtco, bobvssz, umtxk, domway, wugia, ubvttg, ydpemw +lxwkpqh (325) -> xoigv, fqsjaz +mpvgy (35) +ujgeml (94) +jkoir (6) +kemkz (98) +dtqgdc (90) +girxc (147) -> zylotoh, qtxmjwm +olawkuc (79) -> earmfdp, wnowypb +umrqldb (99) +oyurlfq (57) +flgpg (188) -> jimltsw, xhgza +wawtrk (80) +nlajc (85) +ewqcktv (1364) -> hfnhd, amqvr, ntxcpwl +dmvyuf (35) +vtdbov (50) +xnszvs (65) +mjrktxe (50) -> eoxwp, jgsmitm, isrgei, rnbgz, kymbvpp, ktjdpt, mgzocpe +zicvok (81) +tkmfbk (93) -> ffhsg, kynezb +vlwvot (84) +oybbzr (1007) -> qstlv, nayvvrh, izxpf, habni, ckfefl, fjdlcbh, thhakxn +qiksfr (44) +wowxv (92) +fmdba (44) +zgxbjj (96) +jncjxue (66) +xquhgig (190) -> rqhfxty, maftysp +habni (27) -> xwknab, xukfcd, scvhl, tcbgf +iftcnc (50) +dqdmie (82) +otlvq (40) -> hjsrvj, rtbcch, vpirde +mgzocpe (51) -> zkwajbd, mrpji +fkzxb (89) +jlsmm (32) +igdkn (43) -> dgtxjuj, jxyakll, kptdem +rftuf (43) +uolqt (9) +rtwlo (78) -> wgbvle, npttye, claolm, ydffzgu, mgbgb, jwjuth, mulvwn +nrgzcge (132) -> bywbrk, vazoq, eaufvn +juoaena (94) +wfsaglg (54) -> nlfdps, tdkdiqe +jfsgqq (100) -> crslvc, esized +mcucysr (49) +tcbgf (28) +mlalrpt (166) -> jtbrjm, fyaxzl +srvqt (155) -> jyftx, dtijfqc, phcqntb, uyhrcfl +xohxq (1457) -> czbydf, wgdnyy +lqbmor (230) -> rkjfx, vmmtsr +jjsyexg (38) +ynvesz (88) -> rqaxn, afntec +ibbxb (194) -> imiimt, llikz +ktasnia (49) -> thkjz, cjgtra, tzngdx, cqjsqh, vtjtyp, lyzaead, xrtzs +vsjjq (30) +yjnzgl (67) +mcrhiy (6559) -> mkgafux, gugxitg, tymmo +nlgymop (139) -> tymkixg, crchwpb +ybosi (18) +rhqfb (179) -> okurp, gpwbcg, invqsb +kzjozhi (90) +ixncawy (28) +ooczbeh (36) +ubvttg (796) -> wuuvnlz, donzb, bwgimi, rywtmt, rusndcc, ceagctk +ohcoit (6) +exrud (176) -> hpziqqg, abxglwt, gozhrsf, oqjqu, vhkodl +opvrgh (79) +blyms (46) +vfrylx (10) -> qhkniqm, bmcwbsi +ndmkbul (55) +mohey (86) -> tbmyue, ibeis +wktzh (93) +ystgyng (50) +jclntv (87) +dsjcqpn (133) -> slufzy, gbbpqj, jxawk +fitha (68) -> faqngn, xguqqao, athuly, fmdsfus +xyang (225) -> njxrb, mfwuqb +acjedny (49) +mfwuqb (60) +ayuma (81) +qqmchoq (7) +yzjhmqq (171) -> dinpz, upozls +qfopwo (79) +srypr (64) +tvwmzal (236) -> cpujsn, ewluica +umtxk (2942) -> jyazs, scnhwcs, fmpvv, aahqvqy +gkwyfz (49) +dodrbx (227) -> uhtnl, vxnsova +sfdclf (238) +kksizqf (44) +dfofyir (236) -> ddswb, grxdbx +qakiz (37) +ceagctk (255) -> bwvlnlt, rkazlp, vbejzc, njhlrtm +hnjszii (284) -> zkdwz, bwlit +gbbpqj (34) +bvaoy (114) -> mogwbda, rodntl +vkihn (36) +symdxo (8) +nduildw (30) +nxhfgx (18) +chgfb (16) +gugaaiq (40) +euvrdg (79) +ckzaj (67) +jupzgjm (90) +llalaql (27) +qdnghwn (16) +iffluz (515) -> bbbvmxo, reomle, vspqi +nvrjzg (214) -> nzfko, qqmchoq +xvwok (34) +enmjipp (95) +jtbrjm (18) +rlxto (83) +xpotznx (41) +lslhph (59) +vhkodl (221) -> otlvq, fioegdo, rreidgp, fivkqxx, xahvbm +mncivb (88) +hbhfdlh (89) +mkgafux (688) -> admjq, tqtut, emkgc +tymmo (22) -> uxjaa, nlgymop, dcvfkk, yzjhmqq, iqjqlfq, faopk +vxslvq (37) -> jmvcgo, ioglbe +rxjnad (80) +ejdxula (92) -> kviiza, uqmaluk, nasbs +xvzoy (35) +vukpdsr (162) -> gumncu, mlzmimg, vjobpzv +xoigv (10) +iuehdsr (21) +jzgvab (9) +odxpup (89) +vwkegak (92) +bsvgagj (41) +mxwgu (310) -> yeyxf, qdnghwn +jynmg (1140) -> wotus, mohey, fiynyre +qftwuv (36) +veabcj (67) +zaargo (30) -> ytrsmfx, jtlqxy +xfbfvuu (65) +gpwbcg (5) +elysbb (81) +engpslr (85) +tqbtvqc (31) +faqngn (98) +jykseco (166) -> xawzbz, fsdoohr +nfywcyp (62) +rreidgp (168) -> vfupn, xyvnk +obmcr (89) +spnllx (76) +mbbuqoi (35) +wjxgg (177) -> symdxo, dsptf, yaxeloo, yxrhis +chcjswk (89) +anamgt (346) -> ywwxi, rnbvid +zjwqc (26) +wxgoew (1481) -> hnjszii, ygqxl, xhkwrs +dydcy (76) -> drnki, uxolsws, lrcstqr +npttye (42) -> wkrgvo, jhydv, enmjipp, hnyjyga +yjwvnhl (219) +fykgs (43) +vrmqym (97) -> lrmnb, nvigovl +gkfdg (226) -> ohcoit, jkoir +ictsk (122) -> devsz, jjsyexg +gixezcy (37) +rywtmt (158) -> nevrtrs, sybvdj, qcorw +pwhtvdh (40) +yapfoe (59) +xnnbqju (90) -> xzsmw, petvm, xyxidwf +vxiwms (99) +htaszsq (87) +mgbwxw (52) -> afbrhy, jrsfu +rdzsisf (59) +qvxanzu (262) -> nxhfgx, vvzmdr, inddon, ybosi +ysbhsn (181) -> wleavrv, kmvvxon +tirifqs (6489) -> ofbqk, iqdiez, kspsz, kejph +rnkbli (84) +bjbndbg (169) -> oqsdzpe, sbwoye, yhukqf +dndrnc (25) +oxzhz (86) -> bcbftl, hjzgzoe +ufrhi (68) +gsyeaes (26) +kgbzu (180) -> wzczb, bzqjb +dgtxjuj (97) +xulgx (5) +wleavrv (16) +qnhbmzp (118) -> wktzh, zodwdpq +csrpy (62) -> zmoxc, ccgjf, umrqldb, gdamb +ldqyt (50) +btwmd (54) +volompq (96) +qmshniw (443) +lrmnb (98) +yijwaf (32) +paoxff (98) +ulbute (95) +lyzaead (939) -> jfqddfd, ucpkpfb, sbmwazv +rodntl (60) +tykcvi (9) +aftnyad (188) -> rfqddq, recxxj +zdelqb (155) -> jaasf, snqnh +akwcv (65) +nszqngg (44) +eavas (45) -> ytsmc, mrxdp, prjpkm, nzawh +fqvbdq (96) -> tzimies, jduij +mabcqcb (194) -> itutdol, vtokttx +trvtkqj (49) +ynlzggk (36) +pggjo (19) +jajdx (19) +ackyirz (16) +gtiopzn (49) +idvnxqp (5) +njsjq (273) -> vptdap, eteyvz +qkjdjpe (44) +dzfon (61) -> wksjlix, zicvok, utiwem +nxmhned (166) -> pekohn, xnszvs +pnqycz (43) -> gkkit, khyca, yudzxoa +lvkeqm (192) -> lneyu, uopxjn +qvrvcu (19) +hvwyae (23) +ocgbpez (114) -> gjgrhw, bvtgvu +mehuxr (53) +pmdcajx (7) +ybixf (299) -> xvhgvw, ooczbeh, ksbwlir, pkzwosb +inlft (36) +hshafy (65) +nzfko (7) +vcnael (95) +nxuer (13) +pulql (59) -> akwcv, uijffti, ysxvzdu, xfbfvuu +hlbotz (13) +zhrdezs (28) +aqxaecv (297) +ppjapn (27) +bbbvmxo (21) -> rceksnv, uhnlse, rswnjx, ogcmm +ikvzux (44) +hdvcz (156) -> zisdcf, keurs, bjops +ytsmc (22) +jiwfia (13) +jthpj (44) +dtijfqc (76) +vgfhpwb (99) +sjmhuxn (11) -> aceyee, iohigm, zildb, vrmqym, pxxabj, gjjfx +byahs (65) +qllime (202) -> dspkk, wgtnepi +ksbwlir (36) +hzawlq (16) +kgwftu (87) +qtzelhq (62) +wabzx (209) -> sfazwz, lnndami +dyazidi (219) +resoi (25) +hgwkyu (91) +urdgg (166) -> srypr, fnayjx +hsfhqhe (17) +metif (68) +ifxzdfy (96) -> ssnpxj, ejhojmh +jefsr (477) -> fqvbdq, xsygbj, rcluk, dcero, lfgqgs +oglcdgs (140) -> dmvyuf, xvzoy +jrhzmbj (45) +mlvhqpe (91) -> qsstg, tnrrui, utsnke, gxtfu +iffxdk (87) +xboqv (17) +hppxlu (174) -> lkjhmiq, kntwy, auhnyn +pralyx (191) -> dmkfnm, xcmzg +osnkrr (53) +nhvyso (77) +mogwbda (60) +rqaxn (96) +vxnsova (5) +xsxnizc (50) +hskhxx (36) +ogcmm (57) +drnki (25) +ecjxs (197) +dnniv (16) +wnjaw (369) -> brvxyyg, hsvmept, praagwp +xjcxk (24) +aahqvqy (74) +hpwaux (97) +sadyx (59) +dptekr (112) -> xiqthw, ihtfo +mlmhe (4563) -> uwxjkq, uqals, ofkvpq, pyxdkm +yytmc (66) +hmbuu (16) +ezzpr (94) +zpxgfq (118) -> tqplqn, fysxwmd +hgkmod (75) +earmfdp (83) +mxpgmte (5) +kcfgbv (73) -> fdeowqq, pbzvjg, tzrqwt +jtxjj (120) -> hiuviy, sadyx +dsptf (8) +dsezlbe (54) +onzind (245) -> wayzzn, ystgyng +pjndde (422) -> yseezd, cseckdt +rnbgz (131) -> iuehdsr, xgzluhk +yswonja (195) -> gachtig, bjadb, gtiopzn +piizso (59) +msqxo (47) +jacmj (29) +hjsrvj (64) +prcxksh (20) +aceyee (219) -> gixezcy, zqwqcnq +pkipy (95) +czbydf (75) +bpguivk (32) +utapoe (84) +qjdou (87) +njhlrtm (38) +pkzwosb (36) +wpphwjv (83) +teqej (66) +lneyu (64) +dicalia (44) +opzxu (46) +gasejp (15) +llikz (22) +uhtnl (5) +kntwy (25) +wzbewii (157) -> myetb, dhwakp, vqtalpm +vkaxa (83) +kwnqw (49) +uhnlse (57) +zqamk (37518) -> mflijpx, ikzap, wzimze, agjpn +fnnykbh (91) -> nxqwag, tpcbt, elysbb, xlaqpg +ytrsmfx (66) +pyiexlj (92) -> oozbxqb, kzrgfb, klege, csfjt +yaxeloo (8) +tzbmy (71) +pjecv (56) +gsaqlad (70) +gmzcjo (76) +cuscn (114) -> fmdba, ikvzux +rbzmniw (52959) -> tespoy, tirifqs, exrud +jzoxv (52) +egizyey (78) -> metif, towuup +uxolsws (25) +twyhx (86) +nqjydpi (44) -> rpgzp, nszqngg, jthpj, qiksfr +avecfoq (95) +wltax (21) +xfyqx (20) +tnrrui (57) +gmveehb (46) +kymbvpp (67) -> qzvobt, osnkrr +xbccghy (66) +iqdiez (134) -> wkkmvcn, nkzgse +pmopji (128) -> gpcyq, qsdyww +cfwxyl (210) +khzqqwi (12) +wjrhp (992) -> nyouzhg, ccxff, qmifv, oonpy, vutdji, owukmji +yvlajs (35) +hkltivy (26) +vylzag (33) +mieynp (21) +jppbvbo (929) -> ynvesz, tvwmzal, mbwaxn +yxxgd (296) +utiwem (81) +ihvefep (110) -> ffzzzc, ckzaj, zfyqzi +vfupn (32) +jhydv (95) +vspqi (201) -> wzjonl, dnniv, pdazlob +iohigm (248) -> icxzod, mclqrmw, pjkyydd +hzehjo (43) +kwhgtnk (78) +npxexv (66) +lycfbo (89) +vezhmd (47) +amqvr (274) -> aditjen, xvdmeo +vbqpp (35) +upurae (33) -> rdzsisf, lslhph, urwaex +uvkwg (88) +wapknj (2443) -> xulgx, idvnxqp +mvgmf (105) -> dicalia, qhkhuow, phnuqn +qmifv (163) -> hzawlq, ackyirz +xlacmu (87) +aesiz (86) +jjiikvt (25) +prjpkm (22) +rbtco (1110) -> dfofyir, qnhbmzp, dzfon, zmdkea, valby, mabcqcb, mifwbmm +greav (20) +dmkfnm (30) +ftezz (24) +iuuouds (14) +jwjuth (390) -> hmbuu, oxlzlor +gzwrv (212) -> efqjc, gasejp, qqooh +wgdnyy (75) +rqhfxty (53) +qhpvuzi (75) +cvxqnh (53) +stqmwk (96) -> vcnael, dhobx +wuuvnlz (206) -> pznkdcr, ucfipvi, jfhzgp +nnyws (190) +bbbhx (5) +qdfvw (69) -> hgwkyu, uvpuko, wclnx +inddon (18) +gyirkcj (138) -> inlft, vkihn +lrtzi (53) +pjlxc (62) +slufzy (34) +zkdwz (20) +tigvdj (44217) -> xtnmps, ylnobx, mlmhe +vptdap (23) +aemkbp (35) -> dwrtbo, rkerea, iffxdk +dpngy (17) +nzhbfc (207) -> hvgozl, hsfhqhe +wayzzn (50) +myhnuu (66) +jrsfu (79) +gqeiy (257) -> opvrgh, sibvtz +xgzluhk (21) +fiynyre (156) -> mieqogh, zpaivc +vqtalpm (26) +thkjz (437) -> insleik, ayjse, sgovqnf, wjxgg, euwab +ylbftp (82) -> epcjds, gsyeaes +ndikjqv (22) +tqplqn (36) +aifpxqv (89) +hjbfr (20) +lltgjo (32) +picnycy (33) +kplvk (24) +ptatzl (314) -> sfdclf, ibbxb, slzpby, kjjee, bbtnj, gkfdg, nzuswm +qtxmjwm (7) +ckudisa (78) +opskc (35) +qhkniqm (96) +rqyxzn (34) +vdcfh (68) +hpziqqg (637) -> ypqkl, nmazby, hxswr +vrfme (20) +ozdnanh (34) +qcmtgvr (12) +gvdlvgg (20) +krnbkr (82) -> qladcl, tefdmi, ocdpr +fyxttac (39) +hbbpp (95) +hjzgzoe (38) +hjqsj (85) +asevk (44) -> hpwaux, byojhfr +fgzgfc (44) +ejtdhx (57) +ntxcpwl (36) -> kerjk, nggubzz, utapoe +fqsjaz (10) +hxswr (74) -> bixxpzd, htaszsq +dinpz (20) +yxxdal (44) +wozakri (251) -> mgcpbp, omslcm +dhwakp (26) +kvylxr (92) +lsbvzaf (75) -> ibqrz, cokvree, volompq, zgxbjj +bixxpzd (87) +xbtjl (294) +dyfzj (95) +utsnke (57) +sxjlr (91) +ckfefl (115) -> khzqqwi, fzwzr +ezlfnhs (62) -> qftwuv, ynlzggk +xguqqao (98) +jazqb (7378) -> xadcuw, hocazx, cqvdpy +dsmjo (32) +gpcyq (55) +dhvsrt (7) +jllqymn (110) -> dzwfsix, paeel, jclntv, qjdou +zkgdtp (90) +mjqkaqs (50) +nzcqte (140) -> wkkdc, pwhtvdh, gugaaiq +woypnze (91) +dcriqom (79) +zppujp (34) +aqacmr (18) +rkazlp (38) +fysxwmd (36) +mzutqi (571) -> qdfvw, mxwgu, yswonja +zfyqzi (67) +wqshh (460) +rztur (86) +bdlnohy (584) -> dodrbx, qwotm, cbavt, mvgmf, igcmpn +qqmvd (14) +uwxge (94) +ijkpfv (218) -> rxcgwd, steez +slzpby (136) -> nxxlbnt, ozdnanh, zppujp +dzuqljn (7) -> spnllx, fpeiss, hjzkjuw, pjoqde +dporud (50) +hrdggo (152) -> agztuz, mehuxr +kigyp (65) -> hjqsj, ijtis, engpslr +qcorw (83) +cmsqe (12) -> njsjq, zqpxn, pulql, fkttd, wozakri +keurs (18) +pyxdkm (872) -> xnnbqju, oxzhz, zaargo +pjhpwh (35) +vdlbwyo (24) +ocdpr (44) +gacseeh (89) +xzsmw (24) +liujmc (41) +myetb (26) +xawzbz (64) +qmyfg (114) -> weipv, woypnze +heisrl (36) +mlzmimg (24) +ayjse (75) -> veabcj, aicjff +htitjjt (203) -> nswcez, msqxo +xhkwrs (324) +tdkdiqe (87) +ukgbdva (65) +qmcphv (32) +fmhfnhv (24) +nhjtvk (47) +sbmqxu (25) +ewobo (25) +hvgozl (17) +ysxvzdu (65) +sfazwz (68) +hlwesdc (24) +wgbvle (422) +ugzmeb (77) +hbptt (138) -> uezwz, gbckkh, gvdlvgg +auezw (95) +lkuwf (95) +cneno (190) -> uwjobru, jeadxth +wkrgvo (95) +koxzeku (79) +vehziv (67) +codkti (71) -> tqbtvqc, oausk +kjwfeoj (82) +dcvfkk (111) -> uahcz, xsxnizc +lcnsf (22) +zzwmn (40) +bywbrk (80) -> rnkbli, vlwvot +jpmrs (94) +lfgqgs (187) -> vbjpz, hlbotz, boalcdm +xbnmg (48) -> aesiz, tqelui +pcvfgti (29) +ucpkpfb (181) +blkewbk (64) -> jlsryou, idokb, avecfoq, ozyqew +mbwaxn (240) -> nachvlp, prcxksh +wgsgaj (17) +fzwzr (12) +mgcpbp (34) +jxyakll (97) +fdeowqq (77) +zxmwy (35) +yudzxoa (84) +wwbebbr (95) +wgtnepi (66) +wkkdc (40) +xlccnkv (13) +yxrhis (8) +uwjobru (22) +csfzl (64) +dspkk (66) +xwknab (28) +fmdsfus (98) +vpirde (64) +nulax (10) +ymkgx (23) +psetts (80) +ucfipvi (67) +hsdym (340) -> onjqcrh, eitdb, ycuuwxa, mxemqqb, pnqycz, wexncjl +wqojj (22) +xiiqh (98) +cqjsqh (360) -> bzmqg, jpscxfh, ercxmph +wnowypb (83) +snqnh (95) +mifwbmm (114) -> tfezflv, qxrspl +fcgkmq (68) -> thftfut, svtqdbd +gachtig (49) +qxnvoh (214) +ihtfo (87) +qxrspl (95) +nnciip (95) +ercxmph (318) -> ixncawy, zhrdezs +iqmpc (53) +rnbvid (49) +xukfcd (28) +bjadb (49) +niifkl (90) +kxrbd (20) +lrcstqr (25) +gackyrq (22) +cbavt (161) -> qvrvcu, uhuees, pggjo, jajdx +mahlbe (6) +llpbev (29) +efqjc (15) +efvqwzi (7) +epqowm (45) +fjdlcbh (139) +csfjt (92) +zrnlkl (63) -> dyfzj, xviqup, atrzkqf, ulbute +xsygbj (130) -> vdlbwyo, ciquv, msdcz, kplvk +cdfmatu (80) +xeihyok (81) -> uunpyb, wfgzr +ssnpxj (56) +wclnx (91) +nnncfl (335) -> sgytd, nreuwh +cdjxwb (99) -> buznuv, hkltivy +aditjen (7) +auhnyn (25) +nvigovl (98) +yeyxf (16) +uwxjkq (905) -> jblwph, cdjxwb, dydcy +lkjhmiq (25) +teygd (170) -> llpbev, nrxyk +jaasf (95) +dwrtbo (87) +hwgwzv (57) -> qqqbf, fnslg +alhghui (279) -> qbhhtw, ltytvpb +mjqzvuu (195) -> hvwyae, tmzxl +wzczb (61) +ciquv (24) +gozhrsf (762) -> ifxzdfy, uuxpvxf, zyqssjb +khyca (84) +atrzkqf (95) +psjec (97) +xyxidwf (24) +esized (69) +towuup (68) +trszl (44) +fkttd (141) -> hbhfdlh, hgwbg +olvztw (21) +tebkmhi (25) +ltytvpb (90) +msdcz (24) +csdap (27) +vqinar (2904) -> qhbrmur, nrgxdmx, angpy, gcswiam +yxbaldn (122) -> vxiwms, syvza +swgjx (6) +mflijpx (75) -> oxypy, rtwlo, vwnvlh +pygrhr (144) -> rdorrx, pjecv +alneot (25) +wdbmakv (42933) -> ktasnia, mxnaq, mcrhiy +fjticim (35) +rsfxf (123) -> yjnzgl, glrmew +tyvjs (12) +gbckkh (20) +dgqfrv (35) +oozbxqb (92) +oypvhy (140) -> yvlajs, pjhpwh +fnslg (52) +vhzfut (96) -> obzrtar, qtzelhq +iqjqlfq (59) -> gmzcjo, rrzyzq +amklj (23) +tvbgr (80) +qsrxouy (96) +rauho (72) +tzrqwt (77) +pdazlob (16) +uhuees (19) +qebqgxd (94) +ffhsg (79) +hzuyh (50) +oiuztx (92) +wjdeth (5) +bjops (18) +bwvlnlt (38) +baedi (89) +irokors (39) -> xiiqh, paoxff +zvtfm (41) +aizdt (54) -> zjpkoar, zzwmn +ffzzzc (67) +oxoul (12) -> fkzxb, chcjswk +dcero (34) -> ssvfbfs, nxbec +rloxobx (421) -> jiwfia, nxuer, xfcktep +foznw (146) -> dpngy, wgsgaj, xboqv +buznuv (26) +tduxvx (326) -> iktget, vylzag, picnycy, lfdery +hiuviy (59) +dtazpb (85) +oxlzlor (16) +bvejguc (68) +uwjkolt (52) -> tvxvtce, igdkn, rteyxil, qvxanzu, qllime +rvqopbu (67) +owukmji (195) +pbzvjg (77) +agztuz (53) +zpaivc (19) +nofpmh (290) -> efvqwzi, pmdcajx +mhnnmp (8) -> qbaosu, pjndde, anamgt, bcesxba, blkewbk +zfqmic (67) -> lkuwf, pkipy +tespoy (5) -> bdlnohy, jppbvbo, fgsmzi, sjmhuxn +qhbrmur (1450) -> kcfgbv, dyomhm, nofpmh +lkdyq (57) +fuaio (16) +ccxff (53) -> cgveph, tzbmy +fioegdo (140) -> opzxu, blyms +bgnfpcr (75) +bmukspb (106) -> jzoxv, gqvmeg +sbmwazv (39) -> arrvxtj, hawhqex +xqwfgy (1496) -> cywvxf, bjbndbg, mlvhqpe +jfqddfd (64) -> ewgadin, fyxttac, gvtcy +empixc (142) -> hlwesdc, xjcxk, fmhfnhv +zmdkea (154) -> bgnfpcr, hgkmod +jeadxth (22) +ucilvib (40) -> ddgnyfo, koxzeku +rteyxil (334) +clqfbvi (66) +lfdery (33) +ijtis (85) +rmshk (24) +kptdem (97) +ropdc (226) -> usevjww, agthzo +talptwp (77) +bzqjb (61) +idokb (95) +kynezb (79) +tvxvtce (52) -> ujgeml, jpmrs, lpsaav +athuly (98) +vazoq (248) +rxcgwd (38) +tfezflv (95) +cywvxf (279) -> greav, kybtla +lfliwg (65) +qjkfys (353) -> bjhxuqc, cvxqnh +vvzmdr (18) +gwuixj (31) +svtqdbd (61) +nqfqgj (22) -> niifkl, fosdh +lxzvkpk (458) +gewpohj (16410) -> cvqbwem, uzljl, zlhpt, vtcxw, iffluz +bggovyb (144) -> supjxi, mieynp, wltax, pyhof +pbdafpz (236) -> wjdeth, zacwh, mxpgmte, wjgjhc +pqrpkmd (34) +maftysp (53) +qqqbf (52) +fpeiss (76) +qsstg (57) +oqeam (128) -> qjzss, gwuixj +brvxyyg (30) +oqmxlu (39) +tlpfhx (147) -> heisrl, hskhxx +icush (877) -> rsfxf, zfqmic, axzszf, gzwrv, cujuai +jagajrh (93) +kejph (98) -> alneot, jjiikvt +acvzsbe (37) +gqvmeg (52) +olebdv (65) +tqtut (74) -> ykitsi, wxvjyn +tzngdx (486) -> pvyrkg, hppxlu, eovobtl, diqdy +vmsoc (61) -> euvrdg, dcriqom +qiznqk (77) +kspsz (112) -> tduix, aqacmr +kybtla (20) +ktjdpt (23) -> tdmirp, qhpvuzi +jmvcgo (88) +hjzkjuw (76) +qinne (35) +ypqkl (64) -> qjeuqe, wowxv +epcjds (26) +mrxdp (22) +pznkdcr (67) +kmvvxon (16) +xlaqpg (81) +nhtfal (23) +bxqqvue (5668) -> zqbpucs, mhnnmp, ewqcktv +ipnvjje (80) +noibcw (95) +pywtg (16) +omslcm (34) +sxdngcn (6) +insleik (209) +wxvjyn (63) +ntezb (25) +klkwsa (57) +figvamv (32) +phqpwkw (1192) -> egkiqcp, ecjxs, foznw, tokyi +onjqcrh (67) -> lkdyq, tptqtpq, dmidur, klkwsa +igytdcp (160) -> vtdbov, dporud +vrtgae (66) +bwgimi (242) -> eohjrft, ankrgg, kvvkbhi +bzjxil (23) +ankrgg (55) +okurp (5) +rndvcf (39) +rkgoovn (104) -> qyfsc, lytrpo +thftfut (61) +jduij (65) +invra (180) -> sxdngcn, mahlbe, swgjx +wkkmvcn (7) +igcmpn (55) -> bcadp, sxjlr +pgaiut (90) -> vtccvv, mgcnohi +iytvm (15) -> juoaena, qebqgxd, uwxge +glrmew (67) +uqmaluk (70) +qstlv (75) -> qmcphv, bpguivk +gtbgp (234) -> ilsgqdw, qakiz, zesfmu +rziopi (57) -> flgpg, nqjydpi, xbnmg, xxdcgas, vhzfut, sfwzqk, kirnt +rdorrx (56) +oxypy (1992) -> sflonq, igytdcp, nzcqte, sjbfmfa +pekohn (65) +praagwp (30) +qqooh (15) +nzawh (22) +ywwxi (49) +phnuqn (44) +ylnobx (5204) -> rziopi, mzutqi, lcitl +gumncu (24) +cjgtra (900) -> nfkfex, rhqfb, oyyctv +gjgrhw (94) +paeel (87) +xiqthw (87) +ogowst (176) -> pdzooh, xlccnkv +mevujmj (83) +tlqjsb (994) -> odxpup, znagag, obmcr +ejoxsy (38) -> lxwkpqh, zdelqb, xyang, gtbgp, onzind, wabzx, kzjtb +agthzo (15) +xyvnk (32) +crchwpb (36) +pjoqde (76) +fgcajp (50) +tefdmi (44) +xctuhbx (72) +tokyi (79) -> yapfoe, yyecrv +njxrb (60) +qotyaq (7) +dnbejx (70) +uhrdeol (171) -> qinne, opskc, zxmwy, dgqfrv +cwxspl (12) -> nnciip, hbbpp +nggubzz (84) +uuunqk (9) +lxttas (133) +xvdmeo (7) +gkkit (84) +wexncjl (295) +jgsmitm (173) +pxxabj (33) -> wgupfl, lpdhdvy, lfliwg, fklfgd +ruedk (146) -> kgwftu, xlacmu +ydpemw (3192) -> ymkgx, nhtfal +ibqrz (96) +oyyctv (34) -> ipnvjje, tvbgr +xfcktep (13) +jblwph (81) -> lxexhp, vbqpp +steez (38) +xnxudsh (78) -> pjlxc, nfywcyp +rxjly (133) -> rftuf, hzehjo +eteyvz (23) +eohjrft (55) +wqilo (32) +tbmyue (54) +nkwwia (1405) -> dsjcqpn, irokors, wzbewii +oausk (31) +rpjfkh (55) +mxnaq (3937) -> glcsinj, icush, wjrhp +kviiza (70) +anggtqq (86) +uuxpvxf (114) -> nhjtvk, vezhmd +yrolq (64) +tkjofj (60) -> mjqkaqs, lnfjj, nakli +nasbs (70) +usevjww (15) +valby (106) -> vgfhpwb, xtnvc +zxygmaq (10) +tdmirp (75) +zodwdpq (93) +uyhrcfl (76) +mqgbif (73) +oqjqu (67) -> xbxxe, yjwvnhl, vmsoc, tlpfhx, rxjly, dyazidi +euwab (49) -> cdfmatu, wawtrk +admjq (40) -> qvaayfl, uqynzy +petvm (24) +zqpxn (196) -> himyt, zvtfm, xpotznx +nxxlbnt (34) +kpbawoe (26) +zlhpt (74) -> zvbqni, iytvm, htitjjt, aqxaecv +kkmax (37) +recxxj (53) +ejhojmh (56) +dnovxt (44) +crslvc (69) +fnayjx (64) +lytrpo (47) +auvuxv (242) -> wqojj, ndikjqv +zesfmu (37) +cnffplo (166) -> fuaio, pywtg +dfmjy (399) -> isxysg, dxlpr +xcfxvd (92) +xznhz (54) +mclqrmw (15) +cqvdpy (62) -> yzcez, nvrjzg, sebvkw, pgaiut, bggovyb, wfsaglg, teygd +fewgct (90) +xaden (108) -> jagajrh, fucxhz +xvhgvw (36) +ejekn (98) -> kemkz, souqntk +hsvmept (30) +zwopz (60) -> byedxex, yxbaldn, hnkvw, lvkeqm, kigyp, ruedk +uqynzy (80) +axzszf (167) -> iiuqtqw, vktjns +gugxitg (553) -> trlcj, olawkuc, xeihyok +wugia (2689) -> temju, xkymbld, ntlrkw +lxexhp (35) +scnhwcs (74) +yhukqf (50) +upozls (20) +qladcl (44) +wjgjhc (5) +fucxhz (93) +nayvvrh (25) -> ejtdhx, oyurlfq +oonpy (15) -> wyryqvy, zkgdtp +xowkw (41) +zildb (116) -> umjcr, pinqp, piizso +hrrld (1802) -> pqiuhyp, nkwwia, exsmez, rarkt, hsdym +lzojty (214) +uzljl (710) -> pmolg, benqzp, khfzis +vyinb (154) -> fzyim, vrfme, hjbfr +syogw (36) -> mevujmj, wpphwjv +qyfsc (47) +wvvivob (6) +wksjlix (81) +reomle (191) -> jacmj, amcixd +fzyim (20) +zfipnh (21) +uopxjn (64) +gaxdd (25) +dzwfsix (87) +nrxyk (29) +vbjpz (13) +kgxfc (30) -> kzjozhi, dtqgdc +nfkfex (134) -> vsjjq, nduildw +cpujsn (22) +weipv (91) +wjceo (184) -> resoi, gaxdd +unkkoph (119) -> myhnuu, lcmlbj +lnfjj (50) +bmmzqxb (81) +gzocw (110) -> qkjdjpe, yxxdal +uxjaa (131) -> coapfqs, kxrbd, rkctaq, xfyqx +jimltsw (16) +nptqxtu (95) +rpwdig (10) +xflhoc (20092) -> bqyqwn, hycgb, nrgzcge +jfofam (6042) -> gewpohj, ndticx, xflhoc +syvza (99) +whrinsh (34) +coapfqs (20) +souqntk (98) +rpgzp (44) +wgupfl (65) +jxawk (34) +zeolg (214) +qzvobt (53) +nmazby (120) -> yijwaf, idmqvse, dsmjo, wqilo +yuiyjpc (862) -> eavas, lxttas, codkti +rkuzg (83) +gdvuw (179) -> vrtgae, teqej +pinqp (59) +xtnvc (99) +gppwsbp (35) +exsmez (1357) -> pralyx, tkmfbk, unkkoph +ewvvb (83) +nlfdps (87) +jmuqp (44) +mieuhe (97) +donzb (407) +igbzlxl (27) +invqsb (5) +xxdcgas (30) -> auezw, wwbebbr +qhkhuow (44) +sgytd (62) +ikzap (5388) -> mjrktxe, tlqjsb, yuiyjpc +kvvkbhi (55) +xahvbm (222) -> udgssh, bbbhx +iiuqtqw (45) +isrgei (173) +ntlrkw (36) -> gkwyfz, acjedny, mcucysr +qxugs (31) -> iqmpc, lrtzi, krgtrdn +sebvkw (214) -> qotyaq, dhvsrt +gcswiam (1183) -> vahmn, cwfydbh, cjjytkr +ncuzpin (39) +sybvdj (83) +obzrtar (62) +thhakxn (103) -> pplis, tykcvi, mklqpn, jzgvab +vtjtyp (152) -> dhisacj, zpxgfq, oqeam, fcgkmq, nnyws, qxugs, oxoul +icxzod (15) +nakli (50) +bzmqg (374) +dhisacj (73) -> rndvcf, oqmxlu, ncuzpin +pdzooh (13) +pvyrkg (51) -> yytmc, clqfbvi, tmkli +scvhl (28) +qwotm (169) -> pqrpkmd, whrinsh +dcpzwz (87) -> wxgoew, xqwfgy, hrjlzxr, wapknj, ejoxsy +qsdyww (55) +puvmdie (41) +umjcr (59) +himyt (41) +tptqtpq (57) +zkwajbd (61) +vutdji (31) -> bsvgagj, puvmdie, liujmc, xowkw +lpsaav (94) +bmcwbsi (96) +rtbcch (64) +nadbegy (66) +jyazs (74) +xcmzg (30) +abxglwt (191) -> pmopji, jtxjj, asevk, yznmd, jfsgqq +tzimies (65) +jfhzgp (67) +wyryqvy (90) +kirnt (134) -> bmlfd, fykgs +xhgza (16) +xajzwdh (65) +tpcbt (81) +zmoxc (99) +bcbftl (38) +arrvxtj (71) +imiimt (22) +tqelui (86) +sibvtz (79) +pchfpqp (86) +faopk (147) -> figvamv, jlsmm +wscqe (14) -> ezzpr, chyun +emkgc (142) -> lcrbt, pcvfgti +nreuwh (62) +vahmn (49) -> twyhx, rztur, pchfpqp, anggtqq +eourjv (204) -> kpbawoe, zjwqc +ssvfbfs (96) +dxlpr (8) +sgovqnf (69) -> kzsoasg, dnbejx +eoxwp (133) -> zxygmaq, xadjes, nulax, rpwdig +ydffzgu (380) -> olvztw, zfipnh +byojhfr (97) +nlwakg (161) +ztxcc (68) +zisdcf (18) +itutdol (55) +cseckdt (11) +zqwqcnq (37) +fhqhu (188) -> igbzlxl, llalaql, ppjapn, csdap +kzsoasg (70) +cvqbwem (92) -> wjceo, gqqsfsr, vukpdsr, cneno, bvaoy +pjujovx (96) -> ayuma, bmmzqxb +vjobpzv (24) +kerjk (84) +qvaayfl (80) +bcesxba (444) +hnyjyga (95) +gjjfx (131) -> btwmd, xznhz, dsezlbe +idmqvse (32) +ygqxl (16) -> nhvyso, talptwp, qiznqk, ugzmeb +ozyqew (95) +itxgz (370) -> epqowm, jrhzmbj +afntec (96) +cgveph (71) +isxysg (8) +cqlvkj (65) +ykitsi (63) +bjhxuqc (53) +uahcz (50) +vbejzc (38) +cujuai (157) -> ldqyt, fgcajp +kgphv (246) -> wvvivob, sjoov +gqqsfsr (78) -> ckudisa, kwhgtnk +dofou (44) +uijffti (65) +nkzgse (7) +xrtzs (96) -> ictsk, invra, rkgoovn, gzocw, hbptt, ucilvib, cnffplo +zvbqni (105) -> qkzpcyy, qsrxouy +zqbpucs (568) -> dfmjy, fnnykbh, gqeiy, fifams +lnndami (68) +rcluk (156) -> fjticim, mbbuqoi +zylotoh (7) +phcqntb (76) +amcixd (29) +jlsryou (95) +rceksnv (57) +vwnvlh (1534) -> krnbkr, egizyey, empixc, lzojty, vyinb, zeolg, qxnvoh +chyun (94) +hrjlzxr (1124) -> ybixf, qmshniw, zrnlkl +bwlit (20) +grxdbx (34) +eqgvf (9) -> wdbmakv, zqamk, hvecp, rbzmniw, jfofam, tigvdj +uqals (78) -> ropdc, pbdafpz, mgqil, pygrhr, eourjv +veuzidj (49) -> kmhug, yrolq, csfzl +eovobtl (149) -> hzuyh, iftcnc +udgssh (5) +nxbec (96) +dyomhm (40) -> npxexv, xbccghy, jncjxue, nadbegy +fsdoohr (64) +lcrbt (29) +rarkt (1387) -> mjqzvuu, nzhbfc, veuzidj +temju (53) -> qpzszp, cqlvkj +nrgxdmx (1352) -> mlalrpt, nqfqgj, cuscn, ogowst, vfrylx +tlpfggk (25) +wzimze (4005) -> uwjkolt, jynmg, ibqmynm +ddgnyfo (79) +fyaxzl (18) +qpzszp (65) +eitdb (197) -> trvtkqj, kwnqw +fgsmzi (525) -> dzuqljn, ihvefep, uhrdeol, gdvuw +nevrtrs (83) +jyftx (76) +lcitl (1114) -> nlwakg, hwgwzv, girxc +kzjtb (78) -> gacseeh, lycfbo, aifpxqv +zacwh (5) +glcsinj (90) -> aemkbp, yxxgd, fhqhu, xquhgig, nxmhned, lqbmor, qmyfg +rswnjx (57) +cokvree (96) +ewgadin (39) +oqsdzpe (50) +yznmd (62) -> uvkwg, mncivb +lpdhdvy (65) +kmhug (64) +bvtgvu (94) +hycgb (237) -> zmciyk, ysbhsn, vxslvq +ycuuwxa (161) -> vehziv, rvqopbu +mieqogh (19) +xadcuw (1626) -> chgfb, stofi +supjxi (21) +rfqddq (53) +qbaosu (314) -> hshafy, ukgbdva +ptxfk (73) +lofybs (89) +agjpn (8265) -> ocgbpez, ejdxula, kgbzu +mgbgb (334) -> kksizqf, dofou +izxpf (39) -> ewobo, ntezb, sbmqxu, tlpfggk +znagag (89) +zmciyk (19) -> mieuhe, psjec +dhobx (95) +hvecp (90) -> hrrld, jazqb, fonrb, dcpzwz, vqinar, bxqqvue +sjbfmfa (80) -> fewgct, jupzgjm +fmpvv (74) +bcadp (91) +tmzxl (23) diff --git a/2017/d07/ex2/ex2.py b/2017/d07/ex2/ex2.py new file mode 100755 index 0000000..c3e2db9 --- /dev/null +++ b/2017/d07/ex2/ex2.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python + +import sys +from collections import Counter +from typing import NamedTuple + + +class ProgramYell(NamedTuple): + weight: int + children: set[str] + + +Tower = dict[str, ProgramYell] + + +def solve(input: str) -> int: + def parse_line(line: str) -> tuple[str, ProgramYell]: + name, rest = line.split(" ", 1) + weight, rest = rest.split(")") + children = set(rest.removeprefix(" -> ").split(", ")) if rest else set() + return name, ProgramYell(int(weight[1:]), children) + + def parse(input: str) -> Tower: + return {name: yell for name, yell in map(parse_line, input.splitlines())} + + def find_base(tower: Tower) -> str: + candidates = set(tower.keys()) + for yell in tower.values(): + candidates -= yell.children + assert len(candidates) == 1 + return candidates.pop() + + def compute_weights(tower: Tower, base: str) -> dict[str, int]: + def helper(base: str) -> int: + total = ( + sum(helper(child) for child in tower[base].children) + + tower[base].weight + ) + res[base] = total + return total + + res: dict[str, int] = {} + helper(base) + return res + + def fix_balance(tower: Tower) -> int: + base = find_base(tower) + weights = compute_weights(tower, base) + + balanced_weight = -1 # Will be updated to the correct value afterwards + while True: + children = tower[base].children + subtowers = Counter(weights[child] for child in children) + if len(subtowers) == 1: + assert balanced_weight != -1 # Sanity check + return balanced_weight - sum(weights[child] for child in children) + assert len(subtowers) == 2 # Sanity check + balanced_weight, unbalanced_weight = (v for v, _ in subtowers.most_common()) + base = next( + child for child in children if weights[child] == unbalanced_weight + ) + + tower = parse(input) + return fix_balance(tower) + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d07/ex2/input b/2017/d07/ex2/input new file mode 100644 index 0000000..cd0fc4a --- /dev/null +++ b/2017/d07/ex2/input @@ -0,0 +1,1241 @@ +bqyqwn (68) -> wscqe, cwxspl, syogw, xnxudsh +ddswb (34) +hnkvw (320) +ibqmynm (252) -> oglcdgs, tkjofj, upurae, oypvhy, bzfkt, hdvcz, cfwxyl +rkerea (87) +lcmlbj (66) +vtccvv (69) +nachvlp (20) +tmkli (66) +exuyuk (82) +ojzogs (79) +egkiqcp (37) -> rxjnad, psetts +xadjes (10) +fivkqxx (121) -> acvzsbe, kkmax, qcmwsvm +krgtrdn (53) +mxemqqb (267) -> iuuouds, qqmvd +iwwqvoa (24) +yyecrv (59) +zjpkoar (40) +ilsgqdw (37) +bmlfd (43) +nxqwag (81) +ubbwvvl (44) +khfzis (48) -> ztxcc, bvejguc +gvtcy (39) +xbxxe (173) -> bzjxil, amklj +qejgaf (25) +uunpyb (82) +dmidur (57) +fklfgd (65) +vcjfe (22) +rkjfx (33) +ioglbe (88) +tymkixg (36) +qbhhtw (90) +afbrhy (79) +nswcez (47) +wzjonl (16) +xviqup (95) +claolm (312) -> ndmkbul, rpjfkh +qhlhfk (387) -> iwwqvoa, rmshk, ftezz +vtokttx (55) +boalcdm (13) +angpy (62) -> fitha, itxgz, pyiexlj, wqshh, rloxobx +gwcdf (32) +jpscxfh (46) -> qsakd, exuyuk, dqdmie, kjwfeoj +qkzpcyy (96) +fifams (415) +yseezd (11) +qcmwsvm (37) +hfnhd (152) -> vdcfh, ufrhi +wfgzr (82) +sjoov (6) +fonrb (7531) -> xohxq, cmsqe, jefsr +pyhof (21) +pplis (9) +fosdh (90) +pjkyydd (15) +wvmtyez (46) +bzfkt (66) -> rauho, xctuhbx +zyqssjb (13) -> olebdv, byahs, xajzwdh +wotus (119) -> dndrnc, tebkmhi, qejgaf +rusndcc (39) -> xcfxvd, kvylxr, vwkegak, oiuztx +stofi (16) +mgqil (66) -> noibcw, nptqxtu +qjzss (31) +hawhqex (71) +kjjee (174) -> lltgjo, gwcdf +gdamb (99) +diqdy (183) -> gackyrq, vcjfe, lcnsf +sfwzqk (54) -> rkuzg, ewvvb +vktjns (45) +urwaex (59) +nyouzhg (17) -> lofybs, baedi +mklqpn (9) +iktget (33) +gxtfu (57) +xkymbld (37) -> mqgbif, ptxfk +qjeuqe (92) +benqzp (92) -> wvmtyez, gmveehb +rkctaq (20) +sbwoye (50) +bujufb (148) -> tduxvx, lxzvkpk, jllqymn, csrpy +cwfydbh (369) -> qcmtgvr, tyvjs +cjjytkr (305) -> trszl, fgzgfc +qsakd (82) +domway (2464) -> kgphv, pjujovx, hrdggo +mrpji (61) +kzrgfb (92) +hocazx (818) -> bmukspb, mgbwxw, gyirkcj, kgxfc +bobvssz (25) -> srvqt, alhghui, wnjaw, qhlhfk, lsbvzaf, qjkfys, nnncfl +rrzyzq (76) +eaufvn (78) -> dtazpb, nlajc +tduix (18) +yzcez (62) -> rlxto, vkaxa +uvpuko (91) +xtnmps (95) -> ptatzl, bujufb, oybbzr, zwopz, phqpwkw +ibeis (54) +ofkvpq (500) -> auvuxv, stqmwk, dptekr +pmolg (166) -> uuunqk, uolqt +byedxex (180) -> gsaqlad, ebwubc +aicjff (67) +vtcxw (860) -> ezlfnhs, aizdt, ylbftp +nzuswm (80) -> ojzogs, qfopwo +hgwbg (89) +sflonq (190) -> gppwsbp, mpvgy +pqiuhyp (52) -> xbtjl, jykseco, aftnyad, xaden, urdgg, ijkpfv, ejekn +ccgjf (99) +devsz (38) +vmmtsr (33) +ebwubc (70) +mgcnohi (69) +klege (92) +jtlqxy (66) +ofbqk (148) +ewluica (22) +mulvwn (290) -> ubbwvvl, jmuqp, dnovxt +trlcj (245) +uezwz (20) +bbtnj (170) -> xvwok, rqyxzn +ndticx (54) -> rbtco, bobvssz, umtxk, domway, wugia, ubvttg, ydpemw +lxwkpqh (325) -> xoigv, fqsjaz +mpvgy (35) +ujgeml (94) +jkoir (6) +kemkz (98) +dtqgdc (90) +girxc (147) -> zylotoh, qtxmjwm +olawkuc (79) -> earmfdp, wnowypb +umrqldb (99) +oyurlfq (57) +flgpg (188) -> jimltsw, xhgza +wawtrk (80) +nlajc (85) +ewqcktv (1364) -> hfnhd, amqvr, ntxcpwl +dmvyuf (35) +vtdbov (50) +xnszvs (65) +mjrktxe (50) -> eoxwp, jgsmitm, isrgei, rnbgz, kymbvpp, ktjdpt, mgzocpe +zicvok (81) +tkmfbk (93) -> ffhsg, kynezb +vlwvot (84) +oybbzr (1007) -> qstlv, nayvvrh, izxpf, habni, ckfefl, fjdlcbh, thhakxn +qiksfr (44) +wowxv (92) +fmdba (44) +zgxbjj (96) +jncjxue (66) +xquhgig (190) -> rqhfxty, maftysp +habni (27) -> xwknab, xukfcd, scvhl, tcbgf +iftcnc (50) +dqdmie (82) +otlvq (40) -> hjsrvj, rtbcch, vpirde +mgzocpe (51) -> zkwajbd, mrpji +fkzxb (89) +jlsmm (32) +igdkn (43) -> dgtxjuj, jxyakll, kptdem +rftuf (43) +uolqt (9) +rtwlo (78) -> wgbvle, npttye, claolm, ydffzgu, mgbgb, jwjuth, mulvwn +nrgzcge (132) -> bywbrk, vazoq, eaufvn +juoaena (94) +wfsaglg (54) -> nlfdps, tdkdiqe +jfsgqq (100) -> crslvc, esized +mcucysr (49) +tcbgf (28) +mlalrpt (166) -> jtbrjm, fyaxzl +srvqt (155) -> jyftx, dtijfqc, phcqntb, uyhrcfl +xohxq (1457) -> czbydf, wgdnyy +lqbmor (230) -> rkjfx, vmmtsr +jjsyexg (38) +ynvesz (88) -> rqaxn, afntec +ibbxb (194) -> imiimt, llikz +ktasnia (49) -> thkjz, cjgtra, tzngdx, cqjsqh, vtjtyp, lyzaead, xrtzs +vsjjq (30) +yjnzgl (67) +mcrhiy (6559) -> mkgafux, gugxitg, tymmo +nlgymop (139) -> tymkixg, crchwpb +ybosi (18) +rhqfb (179) -> okurp, gpwbcg, invqsb +kzjozhi (90) +ixncawy (28) +ooczbeh (36) +ubvttg (796) -> wuuvnlz, donzb, bwgimi, rywtmt, rusndcc, ceagctk +ohcoit (6) +exrud (176) -> hpziqqg, abxglwt, gozhrsf, oqjqu, vhkodl +opvrgh (79) +blyms (46) +vfrylx (10) -> qhkniqm, bmcwbsi +ndmkbul (55) +mohey (86) -> tbmyue, ibeis +wktzh (93) +ystgyng (50) +jclntv (87) +dsjcqpn (133) -> slufzy, gbbpqj, jxawk +fitha (68) -> faqngn, xguqqao, athuly, fmdsfus +xyang (225) -> njxrb, mfwuqb +acjedny (49) +mfwuqb (60) +ayuma (81) +qqmchoq (7) +yzjhmqq (171) -> dinpz, upozls +qfopwo (79) +srypr (64) +tvwmzal (236) -> cpujsn, ewluica +umtxk (2942) -> jyazs, scnhwcs, fmpvv, aahqvqy +gkwyfz (49) +dodrbx (227) -> uhtnl, vxnsova +sfdclf (238) +kksizqf (44) +dfofyir (236) -> ddswb, grxdbx +qakiz (37) +ceagctk (255) -> bwvlnlt, rkazlp, vbejzc, njhlrtm +hnjszii (284) -> zkdwz, bwlit +gbbpqj (34) +bvaoy (114) -> mogwbda, rodntl +vkihn (36) +symdxo (8) +nduildw (30) +nxhfgx (18) +chgfb (16) +gugaaiq (40) +euvrdg (79) +ckzaj (67) +jupzgjm (90) +llalaql (27) +qdnghwn (16) +iffluz (515) -> bbbvmxo, reomle, vspqi +nvrjzg (214) -> nzfko, qqmchoq +xvwok (34) +enmjipp (95) +jtbrjm (18) +rlxto (83) +xpotznx (41) +lslhph (59) +vhkodl (221) -> otlvq, fioegdo, rreidgp, fivkqxx, xahvbm +mncivb (88) +hbhfdlh (89) +mkgafux (688) -> admjq, tqtut, emkgc +tymmo (22) -> uxjaa, nlgymop, dcvfkk, yzjhmqq, iqjqlfq, faopk +vxslvq (37) -> jmvcgo, ioglbe +rxjnad (80) +ejdxula (92) -> kviiza, uqmaluk, nasbs +xvzoy (35) +vukpdsr (162) -> gumncu, mlzmimg, vjobpzv +xoigv (10) +iuehdsr (21) +jzgvab (9) +odxpup (89) +vwkegak (92) +bsvgagj (41) +mxwgu (310) -> yeyxf, qdnghwn +jynmg (1140) -> wotus, mohey, fiynyre +qftwuv (36) +veabcj (67) +zaargo (30) -> ytrsmfx, jtlqxy +xfbfvuu (65) +gpwbcg (5) +elysbb (81) +engpslr (85) +tqbtvqc (31) +faqngn (98) +jykseco (166) -> xawzbz, fsdoohr +nfywcyp (62) +rreidgp (168) -> vfupn, xyvnk +obmcr (89) +spnllx (76) +mbbuqoi (35) +wjxgg (177) -> symdxo, dsptf, yaxeloo, yxrhis +chcjswk (89) +anamgt (346) -> ywwxi, rnbvid +zjwqc (26) +wxgoew (1481) -> hnjszii, ygqxl, xhkwrs +dydcy (76) -> drnki, uxolsws, lrcstqr +npttye (42) -> wkrgvo, jhydv, enmjipp, hnyjyga +yjwvnhl (219) +fykgs (43) +vrmqym (97) -> lrmnb, nvigovl +gkfdg (226) -> ohcoit, jkoir +ictsk (122) -> devsz, jjsyexg +gixezcy (37) +rywtmt (158) -> nevrtrs, sybvdj, qcorw +pwhtvdh (40) +yapfoe (59) +xnnbqju (90) -> xzsmw, petvm, xyxidwf +vxiwms (99) +htaszsq (87) +mgbwxw (52) -> afbrhy, jrsfu +rdzsisf (59) +qvxanzu (262) -> nxhfgx, vvzmdr, inddon, ybosi +ysbhsn (181) -> wleavrv, kmvvxon +tirifqs (6489) -> ofbqk, iqdiez, kspsz, kejph +rnkbli (84) +bjbndbg (169) -> oqsdzpe, sbwoye, yhukqf +dndrnc (25) +oxzhz (86) -> bcbftl, hjzgzoe +ufrhi (68) +gsyeaes (26) +kgbzu (180) -> wzczb, bzqjb +dgtxjuj (97) +xulgx (5) +wleavrv (16) +qnhbmzp (118) -> wktzh, zodwdpq +csrpy (62) -> zmoxc, ccgjf, umrqldb, gdamb +ldqyt (50) +btwmd (54) +volompq (96) +qmshniw (443) +lrmnb (98) +yijwaf (32) +paoxff (98) +ulbute (95) +lyzaead (939) -> jfqddfd, ucpkpfb, sbmwazv +rodntl (60) +tykcvi (9) +aftnyad (188) -> rfqddq, recxxj +zdelqb (155) -> jaasf, snqnh +akwcv (65) +nszqngg (44) +eavas (45) -> ytsmc, mrxdp, prjpkm, nzawh +fqvbdq (96) -> tzimies, jduij +mabcqcb (194) -> itutdol, vtokttx +trvtkqj (49) +ynlzggk (36) +pggjo (19) +jajdx (19) +ackyirz (16) +gtiopzn (49) +idvnxqp (5) +njsjq (273) -> vptdap, eteyvz +qkjdjpe (44) +dzfon (61) -> wksjlix, zicvok, utiwem +nxmhned (166) -> pekohn, xnszvs +pnqycz (43) -> gkkit, khyca, yudzxoa +lvkeqm (192) -> lneyu, uopxjn +qvrvcu (19) +hvwyae (23) +ocgbpez (114) -> gjgrhw, bvtgvu +mehuxr (53) +pmdcajx (7) +ybixf (299) -> xvhgvw, ooczbeh, ksbwlir, pkzwosb +inlft (36) +hshafy (65) +nzfko (7) +vcnael (95) +nxuer (13) +pulql (59) -> akwcv, uijffti, ysxvzdu, xfbfvuu +hlbotz (13) +zhrdezs (28) +aqxaecv (297) +ppjapn (27) +bbbvmxo (21) -> rceksnv, uhnlse, rswnjx, ogcmm +ikvzux (44) +hdvcz (156) -> zisdcf, keurs, bjops +ytsmc (22) +jiwfia (13) +jthpj (44) +dtijfqc (76) +vgfhpwb (99) +sjmhuxn (11) -> aceyee, iohigm, zildb, vrmqym, pxxabj, gjjfx +byahs (65) +qllime (202) -> dspkk, wgtnepi +ksbwlir (36) +hzawlq (16) +kgwftu (87) +qtzelhq (62) +wabzx (209) -> sfazwz, lnndami +dyazidi (219) +resoi (25) +hgwkyu (91) +urdgg (166) -> srypr, fnayjx +hsfhqhe (17) +metif (68) +ifxzdfy (96) -> ssnpxj, ejhojmh +jefsr (477) -> fqvbdq, xsygbj, rcluk, dcero, lfgqgs +oglcdgs (140) -> dmvyuf, xvzoy +jrhzmbj (45) +mlvhqpe (91) -> qsstg, tnrrui, utsnke, gxtfu +iffxdk (87) +xboqv (17) +hppxlu (174) -> lkjhmiq, kntwy, auhnyn +pralyx (191) -> dmkfnm, xcmzg +osnkrr (53) +nhvyso (77) +mogwbda (60) +rqaxn (96) +vxnsova (5) +xsxnizc (50) +hskhxx (36) +ogcmm (57) +drnki (25) +ecjxs (197) +dnniv (16) +wnjaw (369) -> brvxyyg, hsvmept, praagwp +xjcxk (24) +aahqvqy (74) +hpwaux (97) +sadyx (59) +dptekr (112) -> xiqthw, ihtfo +mlmhe (4563) -> uwxjkq, uqals, ofkvpq, pyxdkm +yytmc (66) +hmbuu (16) +ezzpr (94) +zpxgfq (118) -> tqplqn, fysxwmd +hgkmod (75) +earmfdp (83) +mxpgmte (5) +kcfgbv (73) -> fdeowqq, pbzvjg, tzrqwt +jtxjj (120) -> hiuviy, sadyx +dsptf (8) +dsezlbe (54) +onzind (245) -> wayzzn, ystgyng +pjndde (422) -> yseezd, cseckdt +rnbgz (131) -> iuehdsr, xgzluhk +yswonja (195) -> gachtig, bjadb, gtiopzn +piizso (59) +msqxo (47) +jacmj (29) +hjsrvj (64) +prcxksh (20) +aceyee (219) -> gixezcy, zqwqcnq +pkipy (95) +czbydf (75) +bpguivk (32) +utapoe (84) +qjdou (87) +njhlrtm (38) +pkzwosb (36) +wpphwjv (83) +teqej (66) +lneyu (64) +dicalia (44) +opzxu (46) +gasejp (15) +llikz (22) +uhtnl (5) +kntwy (25) +wzbewii (157) -> myetb, dhwakp, vqtalpm +vkaxa (83) +kwnqw (49) +uhnlse (57) +zqamk (37518) -> mflijpx, ikzap, wzimze, agjpn +fnnykbh (91) -> nxqwag, tpcbt, elysbb, xlaqpg +ytrsmfx (66) +pyiexlj (92) -> oozbxqb, kzrgfb, klege, csfjt +yaxeloo (8) +tzbmy (71) +pjecv (56) +gsaqlad (70) +gmzcjo (76) +cuscn (114) -> fmdba, ikvzux +rbzmniw (52959) -> tespoy, tirifqs, exrud +jzoxv (52) +egizyey (78) -> metif, towuup +uxolsws (25) +twyhx (86) +nqjydpi (44) -> rpgzp, nszqngg, jthpj, qiksfr +avecfoq (95) +wltax (21) +xfyqx (20) +tnrrui (57) +gmveehb (46) +kymbvpp (67) -> qzvobt, osnkrr +xbccghy (66) +iqdiez (134) -> wkkmvcn, nkzgse +pmopji (128) -> gpcyq, qsdyww +cfwxyl (210) +khzqqwi (12) +wjrhp (992) -> nyouzhg, ccxff, qmifv, oonpy, vutdji, owukmji +yvlajs (35) +hkltivy (26) +vylzag (33) +mieynp (21) +jppbvbo (929) -> ynvesz, tvwmzal, mbwaxn +yxxgd (296) +utiwem (81) +ihvefep (110) -> ffzzzc, ckzaj, zfyqzi +vfupn (32) +jhydv (95) +vspqi (201) -> wzjonl, dnniv, pdazlob +iohigm (248) -> icxzod, mclqrmw, pjkyydd +hzehjo (43) +kwhgtnk (78) +npxexv (66) +lycfbo (89) +vezhmd (47) +amqvr (274) -> aditjen, xvdmeo +vbqpp (35) +upurae (33) -> rdzsisf, lslhph, urwaex +uvkwg (88) +wapknj (2443) -> xulgx, idvnxqp +mvgmf (105) -> dicalia, qhkhuow, phnuqn +qmifv (163) -> hzawlq, ackyirz +xlacmu (87) +aesiz (86) +jjiikvt (25) +prjpkm (22) +rbtco (1110) -> dfofyir, qnhbmzp, dzfon, zmdkea, valby, mabcqcb, mifwbmm +greav (20) +dmkfnm (30) +ftezz (24) +iuuouds (14) +jwjuth (390) -> hmbuu, oxlzlor +gzwrv (212) -> efqjc, gasejp, qqooh +wgdnyy (75) +rqhfxty (53) +qhpvuzi (75) +cvxqnh (53) +stqmwk (96) -> vcnael, dhobx +wuuvnlz (206) -> pznkdcr, ucfipvi, jfhzgp +nnyws (190) +bbbhx (5) +qdfvw (69) -> hgwkyu, uvpuko, wclnx +inddon (18) +gyirkcj (138) -> inlft, vkihn +lrtzi (53) +pjlxc (62) +slufzy (34) +zkdwz (20) +tigvdj (44217) -> xtnmps, ylnobx, mlmhe +vptdap (23) +aemkbp (35) -> dwrtbo, rkerea, iffxdk +dpngy (17) +nzhbfc (207) -> hvgozl, hsfhqhe +wayzzn (50) +myhnuu (66) +jrsfu (79) +gqeiy (257) -> opvrgh, sibvtz +xgzluhk (21) +fiynyre (156) -> mieqogh, zpaivc +vqtalpm (26) +thkjz (437) -> insleik, ayjse, sgovqnf, wjxgg, euwab +ylbftp (82) -> epcjds, gsyeaes +ndikjqv (22) +tqplqn (36) +aifpxqv (89) +hjbfr (20) +lltgjo (32) +picnycy (33) +kplvk (24) +ptatzl (314) -> sfdclf, ibbxb, slzpby, kjjee, bbtnj, gkfdg, nzuswm +qtxmjwm (7) +ckudisa (78) +opskc (35) +qhkniqm (96) +rqyxzn (34) +vdcfh (68) +hpziqqg (637) -> ypqkl, nmazby, hxswr +vrfme (20) +ozdnanh (34) +qcmtgvr (12) +gvdlvgg (20) +krnbkr (82) -> qladcl, tefdmi, ocdpr +fyxttac (39) +hbbpp (95) +hjzgzoe (38) +hjqsj (85) +asevk (44) -> hpwaux, byojhfr +fgzgfc (44) +ejtdhx (57) +ntxcpwl (36) -> kerjk, nggubzz, utapoe +fqsjaz (10) +hxswr (74) -> bixxpzd, htaszsq +dinpz (20) +yxxdal (44) +wozakri (251) -> mgcpbp, omslcm +dhwakp (26) +kvylxr (92) +lsbvzaf (75) -> ibqrz, cokvree, volompq, zgxbjj +bixxpzd (87) +xbtjl (294) +dyfzj (95) +utsnke (57) +sxjlr (91) +ckfefl (115) -> khzqqwi, fzwzr +ezlfnhs (62) -> qftwuv, ynlzggk +xguqqao (98) +jazqb (7378) -> xadcuw, hocazx, cqvdpy +dsmjo (32) +gpcyq (55) +dhvsrt (7) +jllqymn (110) -> dzwfsix, paeel, jclntv, qjdou +zkgdtp (90) +mjqkaqs (50) +nzcqte (140) -> wkkdc, pwhtvdh, gugaaiq +woypnze (91) +dcriqom (79) +zppujp (34) +aqacmr (18) +rkazlp (38) +fysxwmd (36) +mzutqi (571) -> qdfvw, mxwgu, yswonja +zfyqzi (67) +wqshh (460) +rztur (86) +bdlnohy (584) -> dodrbx, qwotm, cbavt, mvgmf, igcmpn +qqmvd (14) +uwxge (94) +ijkpfv (218) -> rxcgwd, steez +slzpby (136) -> nxxlbnt, ozdnanh, zppujp +dzuqljn (7) -> spnllx, fpeiss, hjzkjuw, pjoqde +dporud (50) +hrdggo (152) -> agztuz, mehuxr +kigyp (65) -> hjqsj, ijtis, engpslr +qcorw (83) +cmsqe (12) -> njsjq, zqpxn, pulql, fkttd, wozakri +keurs (18) +pyxdkm (872) -> xnnbqju, oxzhz, zaargo +pjhpwh (35) +vdlbwyo (24) +ocdpr (44) +gacseeh (89) +xzsmw (24) +liujmc (41) +myetb (26) +xawzbz (64) +qmyfg (114) -> weipv, woypnze +heisrl (36) +mlzmimg (24) +ayjse (75) -> veabcj, aicjff +htitjjt (203) -> nswcez, msqxo +xhkwrs (324) +tdkdiqe (87) +ukgbdva (65) +qmcphv (32) +fmhfnhv (24) +nhjtvk (47) +sbmqxu (25) +ewobo (25) +hvgozl (17) +ysxvzdu (65) +sfazwz (68) +hlwesdc (24) +wgbvle (422) +ugzmeb (77) +hbptt (138) -> uezwz, gbckkh, gvdlvgg +auezw (95) +lkuwf (95) +cneno (190) -> uwjobru, jeadxth +wkrgvo (95) +koxzeku (79) +vehziv (67) +codkti (71) -> tqbtvqc, oausk +kjwfeoj (82) +dcvfkk (111) -> uahcz, xsxnizc +lcnsf (22) +zzwmn (40) +bywbrk (80) -> rnkbli, vlwvot +jpmrs (94) +lfgqgs (187) -> vbjpz, hlbotz, boalcdm +xbnmg (48) -> aesiz, tqelui +pcvfgti (29) +ucpkpfb (181) +blkewbk (64) -> jlsryou, idokb, avecfoq, ozyqew +mbwaxn (240) -> nachvlp, prcxksh +wgsgaj (17) +fzwzr (12) +mgcpbp (34) +jxyakll (97) +fdeowqq (77) +zxmwy (35) +yudzxoa (84) +wwbebbr (95) +wgtnepi (66) +wkkdc (40) +xlccnkv (13) +yxrhis (8) +uwjobru (22) +csfzl (64) +dspkk (66) +xwknab (28) +fmdsfus (98) +vpirde (64) +nulax (10) +ymkgx (23) +psetts (80) +ucfipvi (67) +hsdym (340) -> onjqcrh, eitdb, ycuuwxa, mxemqqb, pnqycz, wexncjl +wqojj (22) +xiiqh (98) +cqjsqh (360) -> bzmqg, jpscxfh, ercxmph +wnowypb (83) +snqnh (95) +mifwbmm (114) -> tfezflv, qxrspl +fcgkmq (68) -> thftfut, svtqdbd +gachtig (49) +qxnvoh (214) +ihtfo (87) +qxrspl (95) +nnciip (95) +ercxmph (318) -> ixncawy, zhrdezs +iqmpc (53) +rnbvid (49) +xukfcd (28) +bjadb (49) +niifkl (90) +kxrbd (20) +lrcstqr (25) +gackyrq (22) +cbavt (161) -> qvrvcu, uhuees, pggjo, jajdx +mahlbe (6) +llpbev (29) +efqjc (15) +efvqwzi (7) +epqowm (45) +fjdlcbh (139) +csfjt (92) +zrnlkl (63) -> dyfzj, xviqup, atrzkqf, ulbute +xsygbj (130) -> vdlbwyo, ciquv, msdcz, kplvk +cdfmatu (80) +xeihyok (81) -> uunpyb, wfgzr +ssnpxj (56) +wclnx (91) +nnncfl (335) -> sgytd, nreuwh +cdjxwb (99) -> buznuv, hkltivy +aditjen (7) +auhnyn (25) +nvigovl (98) +yeyxf (16) +uwxjkq (905) -> jblwph, cdjxwb, dydcy +lkjhmiq (25) +teygd (170) -> llpbev, nrxyk +jaasf (95) +dwrtbo (87) +hwgwzv (57) -> qqqbf, fnslg +alhghui (279) -> qbhhtw, ltytvpb +mjqzvuu (195) -> hvwyae, tmzxl +wzczb (61) +ciquv (24) +gozhrsf (762) -> ifxzdfy, uuxpvxf, zyqssjb +khyca (84) +atrzkqf (95) +psjec (97) +xyxidwf (24) +esized (69) +towuup (68) +trszl (44) +fkttd (141) -> hbhfdlh, hgwbg +olvztw (21) +tebkmhi (25) +ltytvpb (90) +msdcz (24) +csdap (27) +vqinar (2904) -> qhbrmur, nrgxdmx, angpy, gcswiam +yxbaldn (122) -> vxiwms, syvza +swgjx (6) +mflijpx (75) -> oxypy, rtwlo, vwnvlh +pygrhr (144) -> rdorrx, pjecv +alneot (25) +wdbmakv (42933) -> ktasnia, mxnaq, mcrhiy +fjticim (35) +rsfxf (123) -> yjnzgl, glrmew +tyvjs (12) +gbckkh (20) +dgqfrv (35) +oozbxqb (92) +oypvhy (140) -> yvlajs, pjhpwh +fnslg (52) +vhzfut (96) -> obzrtar, qtzelhq +iqjqlfq (59) -> gmzcjo, rrzyzq +amklj (23) +tvbgr (80) +qsrxouy (96) +rauho (72) +tzrqwt (77) +pdazlob (16) +uhuees (19) +qebqgxd (94) +ffhsg (79) +hzuyh (50) +oiuztx (92) +wjdeth (5) +bjops (18) +bwvlnlt (38) +baedi (89) +irokors (39) -> xiiqh, paoxff +zvtfm (41) +aizdt (54) -> zjpkoar, zzwmn +ffzzzc (67) +oxoul (12) -> fkzxb, chcjswk +dcero (34) -> ssvfbfs, nxbec +rloxobx (421) -> jiwfia, nxuer, xfcktep +foznw (146) -> dpngy, wgsgaj, xboqv +buznuv (26) +tduxvx (326) -> iktget, vylzag, picnycy, lfdery +hiuviy (59) +dtazpb (85) +oxlzlor (16) +bvejguc (68) +uwjkolt (52) -> tvxvtce, igdkn, rteyxil, qvxanzu, qllime +rvqopbu (67) +owukmji (195) +pbzvjg (77) +agztuz (53) +zpaivc (19) +nofpmh (290) -> efvqwzi, pmdcajx +mhnnmp (8) -> qbaosu, pjndde, anamgt, bcesxba, blkewbk +zfqmic (67) -> lkuwf, pkipy +tespoy (5) -> bdlnohy, jppbvbo, fgsmzi, sjmhuxn +qhbrmur (1450) -> kcfgbv, dyomhm, nofpmh +lkdyq (57) +fuaio (16) +ccxff (53) -> cgveph, tzbmy +fioegdo (140) -> opzxu, blyms +bgnfpcr (75) +bmukspb (106) -> jzoxv, gqvmeg +sbmwazv (39) -> arrvxtj, hawhqex +xqwfgy (1496) -> cywvxf, bjbndbg, mlvhqpe +jfqddfd (64) -> ewgadin, fyxttac, gvtcy +empixc (142) -> hlwesdc, xjcxk, fmhfnhv +zmdkea (154) -> bgnfpcr, hgkmod +jeadxth (22) +ucilvib (40) -> ddgnyfo, koxzeku +rteyxil (334) +clqfbvi (66) +lfdery (33) +ijtis (85) +rmshk (24) +kptdem (97) +ropdc (226) -> usevjww, agthzo +talptwp (77) +bzqjb (61) +idokb (95) +kynezb (79) +tvxvtce (52) -> ujgeml, jpmrs, lpsaav +athuly (98) +vazoq (248) +rxcgwd (38) +tfezflv (95) +cywvxf (279) -> greav, kybtla +lfliwg (65) +qjkfys (353) -> bjhxuqc, cvxqnh +vvzmdr (18) +gwuixj (31) +svtqdbd (61) +nqfqgj (22) -> niifkl, fosdh +lxzvkpk (458) +gewpohj (16410) -> cvqbwem, uzljl, zlhpt, vtcxw, iffluz +bggovyb (144) -> supjxi, mieynp, wltax, pyhof +pbdafpz (236) -> wjdeth, zacwh, mxpgmte, wjgjhc +pqrpkmd (34) +maftysp (53) +qqqbf (52) +fpeiss (76) +qsstg (57) +oqeam (128) -> qjzss, gwuixj +brvxyyg (30) +oqmxlu (39) +tlpfhx (147) -> heisrl, hskhxx +icush (877) -> rsfxf, zfqmic, axzszf, gzwrv, cujuai +jagajrh (93) +kejph (98) -> alneot, jjiikvt +acvzsbe (37) +gqvmeg (52) +olebdv (65) +tqtut (74) -> ykitsi, wxvjyn +tzngdx (486) -> pvyrkg, hppxlu, eovobtl, diqdy +vmsoc (61) -> euvrdg, dcriqom +qiznqk (77) +kspsz (112) -> tduix, aqacmr +kybtla (20) +ktjdpt (23) -> tdmirp, qhpvuzi +jmvcgo (88) +hjzkjuw (76) +qinne (35) +ypqkl (64) -> qjeuqe, wowxv +epcjds (26) +mrxdp (22) +pznkdcr (67) +kmvvxon (16) +xlaqpg (81) +nhtfal (23) +bxqqvue (5668) -> zqbpucs, mhnnmp, ewqcktv +ipnvjje (80) +noibcw (95) +pywtg (16) +omslcm (34) +sxdngcn (6) +insleik (209) +wxvjyn (63) +ntezb (25) +klkwsa (57) +figvamv (32) +phqpwkw (1192) -> egkiqcp, ecjxs, foznw, tokyi +onjqcrh (67) -> lkdyq, tptqtpq, dmidur, klkwsa +igytdcp (160) -> vtdbov, dporud +vrtgae (66) +bwgimi (242) -> eohjrft, ankrgg, kvvkbhi +bzjxil (23) +ankrgg (55) +okurp (5) +rndvcf (39) +rkgoovn (104) -> qyfsc, lytrpo +thftfut (61) +jduij (65) +invra (180) -> sxdngcn, mahlbe, swgjx +wkkmvcn (7) +igcmpn (55) -> bcadp, sxjlr +pgaiut (90) -> vtccvv, mgcnohi +iytvm (15) -> juoaena, qebqgxd, uwxge +glrmew (67) +uqmaluk (70) +qstlv (75) -> qmcphv, bpguivk +gtbgp (234) -> ilsgqdw, qakiz, zesfmu +rziopi (57) -> flgpg, nqjydpi, xbnmg, xxdcgas, vhzfut, sfwzqk, kirnt +rdorrx (56) +oxypy (1992) -> sflonq, igytdcp, nzcqte, sjbfmfa +pekohn (65) +praagwp (30) +qqooh (15) +nzawh (22) +ywwxi (49) +phnuqn (44) +ylnobx (5204) -> rziopi, mzutqi, lcitl +gumncu (24) +cjgtra (900) -> nfkfex, rhqfb, oyyctv +gjgrhw (94) +paeel (87) +xiqthw (87) +ogowst (176) -> pdzooh, xlccnkv +mevujmj (83) +tlqjsb (994) -> odxpup, znagag, obmcr +ejoxsy (38) -> lxwkpqh, zdelqb, xyang, gtbgp, onzind, wabzx, kzjtb +agthzo (15) +xyvnk (32) +crchwpb (36) +pjoqde (76) +fgcajp (50) +tefdmi (44) +xctuhbx (72) +tokyi (79) -> yapfoe, yyecrv +njxrb (60) +qotyaq (7) +dnbejx (70) +uhrdeol (171) -> qinne, opskc, zxmwy, dgqfrv +cwxspl (12) -> nnciip, hbbpp +nggubzz (84) +uuunqk (9) +lxttas (133) +xvdmeo (7) +gkkit (84) +wexncjl (295) +jgsmitm (173) +pxxabj (33) -> wgupfl, lpdhdvy, lfliwg, fklfgd +ruedk (146) -> kgwftu, xlacmu +ydpemw (3192) -> ymkgx, nhtfal +ibqrz (96) +oyyctv (34) -> ipnvjje, tvbgr +xfcktep (13) +jblwph (81) -> lxexhp, vbqpp +steez (38) +xnxudsh (78) -> pjlxc, nfywcyp +rxjly (133) -> rftuf, hzehjo +eteyvz (23) +eohjrft (55) +wqilo (32) +tbmyue (54) +nkwwia (1405) -> dsjcqpn, irokors, wzbewii +oausk (31) +rpjfkh (55) +mxnaq (3937) -> glcsinj, icush, wjrhp +kviiza (70) +anggtqq (86) +uuxpvxf (114) -> nhjtvk, vezhmd +yrolq (64) +tkjofj (60) -> mjqkaqs, lnfjj, nakli +nasbs (70) +usevjww (15) +valby (106) -> vgfhpwb, xtnvc +zxygmaq (10) +tdmirp (75) +zodwdpq (93) +uyhrcfl (76) +mqgbif (73) +oqjqu (67) -> xbxxe, yjwvnhl, vmsoc, tlpfhx, rxjly, dyazidi +euwab (49) -> cdfmatu, wawtrk +admjq (40) -> qvaayfl, uqynzy +petvm (24) +zqpxn (196) -> himyt, zvtfm, xpotznx +nxxlbnt (34) +kpbawoe (26) +zlhpt (74) -> zvbqni, iytvm, htitjjt, aqxaecv +kkmax (37) +recxxj (53) +ejhojmh (56) +dnovxt (44) +crslvc (69) +fnayjx (64) +lytrpo (47) +auvuxv (242) -> wqojj, ndikjqv +zesfmu (37) +cnffplo (166) -> fuaio, pywtg +dfmjy (399) -> isxysg, dxlpr +xcfxvd (92) +xznhz (54) +mclqrmw (15) +cqvdpy (62) -> yzcez, nvrjzg, sebvkw, pgaiut, bggovyb, wfsaglg, teygd +fewgct (90) +xaden (108) -> jagajrh, fucxhz +xvhgvw (36) +ejekn (98) -> kemkz, souqntk +hsvmept (30) +zwopz (60) -> byedxex, yxbaldn, hnkvw, lvkeqm, kigyp, ruedk +uqynzy (80) +axzszf (167) -> iiuqtqw, vktjns +gugxitg (553) -> trlcj, olawkuc, xeihyok +wugia (2689) -> temju, xkymbld, ntlrkw +lxexhp (35) +scnhwcs (74) +yhukqf (50) +upozls (20) +qladcl (44) +wjgjhc (5) +fucxhz (93) +nayvvrh (25) -> ejtdhx, oyurlfq +oonpy (15) -> wyryqvy, zkgdtp +xowkw (41) +zildb (116) -> umjcr, pinqp, piizso +hrrld (1802) -> pqiuhyp, nkwwia, exsmez, rarkt, hsdym +lzojty (214) +uzljl (710) -> pmolg, benqzp, khfzis +vyinb (154) -> fzyim, vrfme, hjbfr +syogw (36) -> mevujmj, wpphwjv +qyfsc (47) +wvvivob (6) +wksjlix (81) +reomle (191) -> jacmj, amcixd +fzyim (20) +zfipnh (21) +uopxjn (64) +gaxdd (25) +dzwfsix (87) +nrxyk (29) +vbjpz (13) +kgxfc (30) -> kzjozhi, dtqgdc +nfkfex (134) -> vsjjq, nduildw +cpujsn (22) +weipv (91) +wjceo (184) -> resoi, gaxdd +unkkoph (119) -> myhnuu, lcmlbj +lnfjj (50) +bmmzqxb (81) +gzocw (110) -> qkjdjpe, yxxdal +uxjaa (131) -> coapfqs, kxrbd, rkctaq, xfyqx +jimltsw (16) +nptqxtu (95) +rpwdig (10) +xflhoc (20092) -> bqyqwn, hycgb, nrgzcge +jfofam (6042) -> gewpohj, ndticx, xflhoc +syvza (99) +whrinsh (34) +coapfqs (20) +souqntk (98) +rpgzp (44) +wgupfl (65) +jxawk (34) +zeolg (214) +qzvobt (53) +nmazby (120) -> yijwaf, idmqvse, dsmjo, wqilo +yuiyjpc (862) -> eavas, lxttas, codkti +rkuzg (83) +gdvuw (179) -> vrtgae, teqej +pinqp (59) +xtnvc (99) +gppwsbp (35) +exsmez (1357) -> pralyx, tkmfbk, unkkoph +ewvvb (83) +nlfdps (87) +jmuqp (44) +mieuhe (97) +donzb (407) +igbzlxl (27) +invqsb (5) +xxdcgas (30) -> auezw, wwbebbr +qhkhuow (44) +sgytd (62) +ikzap (5388) -> mjrktxe, tlqjsb, yuiyjpc +kvvkbhi (55) +xahvbm (222) -> udgssh, bbbhx +iiuqtqw (45) +isrgei (173) +ntlrkw (36) -> gkwyfz, acjedny, mcucysr +qxugs (31) -> iqmpc, lrtzi, krgtrdn +sebvkw (214) -> qotyaq, dhvsrt +gcswiam (1183) -> vahmn, cwfydbh, cjjytkr +ncuzpin (39) +sybvdj (83) +obzrtar (62) +thhakxn (103) -> pplis, tykcvi, mklqpn, jzgvab +vtjtyp (152) -> dhisacj, zpxgfq, oqeam, fcgkmq, nnyws, qxugs, oxoul +icxzod (15) +nakli (50) +bzmqg (374) +dhisacj (73) -> rndvcf, oqmxlu, ncuzpin +pdzooh (13) +pvyrkg (51) -> yytmc, clqfbvi, tmkli +scvhl (28) +qwotm (169) -> pqrpkmd, whrinsh +dcpzwz (87) -> wxgoew, xqwfgy, hrjlzxr, wapknj, ejoxsy +qsdyww (55) +puvmdie (41) +umjcr (59) +himyt (41) +tptqtpq (57) +zkwajbd (61) +vutdji (31) -> bsvgagj, puvmdie, liujmc, xowkw +lpsaav (94) +bmcwbsi (96) +rtbcch (64) +nadbegy (66) +jyazs (74) +xcmzg (30) +abxglwt (191) -> pmopji, jtxjj, asevk, yznmd, jfsgqq +tzimies (65) +jfhzgp (67) +wyryqvy (90) +kirnt (134) -> bmlfd, fykgs +xhgza (16) +xajzwdh (65) +tpcbt (81) +zmoxc (99) +bcbftl (38) +arrvxtj (71) +imiimt (22) +tqelui (86) +sibvtz (79) +pchfpqp (86) +faopk (147) -> figvamv, jlsmm +wscqe (14) -> ezzpr, chyun +emkgc (142) -> lcrbt, pcvfgti +nreuwh (62) +vahmn (49) -> twyhx, rztur, pchfpqp, anggtqq +eourjv (204) -> kpbawoe, zjwqc +ssvfbfs (96) +dxlpr (8) +sgovqnf (69) -> kzsoasg, dnbejx +eoxwp (133) -> zxygmaq, xadjes, nulax, rpwdig +ydffzgu (380) -> olvztw, zfipnh +byojhfr (97) +nlwakg (161) +ztxcc (68) +zisdcf (18) +itutdol (55) +cseckdt (11) +zqwqcnq (37) +fhqhu (188) -> igbzlxl, llalaql, ppjapn, csdap +kzsoasg (70) +cvqbwem (92) -> wjceo, gqqsfsr, vukpdsr, cneno, bvaoy +pjujovx (96) -> ayuma, bmmzqxb +vjobpzv (24) +kerjk (84) +qvaayfl (80) +bcesxba (444) +hnyjyga (95) +gjjfx (131) -> btwmd, xznhz, dsezlbe +idmqvse (32) +ygqxl (16) -> nhvyso, talptwp, qiznqk, ugzmeb +ozyqew (95) +itxgz (370) -> epqowm, jrhzmbj +afntec (96) +cgveph (71) +isxysg (8) +cqlvkj (65) +ykitsi (63) +bjhxuqc (53) +uahcz (50) +vbejzc (38) +cujuai (157) -> ldqyt, fgcajp +kgphv (246) -> wvvivob, sjoov +gqqsfsr (78) -> ckudisa, kwhgtnk +dofou (44) +uijffti (65) +nkzgse (7) +xrtzs (96) -> ictsk, invra, rkgoovn, gzocw, hbptt, ucilvib, cnffplo +zvbqni (105) -> qkzpcyy, qsrxouy +zqbpucs (568) -> dfmjy, fnnykbh, gqeiy, fifams +lnndami (68) +rcluk (156) -> fjticim, mbbuqoi +zylotoh (7) +phcqntb (76) +amcixd (29) +jlsryou (95) +rceksnv (57) +vwnvlh (1534) -> krnbkr, egizyey, empixc, lzojty, vyinb, zeolg, qxnvoh +chyun (94) +hrjlzxr (1124) -> ybixf, qmshniw, zrnlkl +bwlit (20) +grxdbx (34) +eqgvf (9) -> wdbmakv, zqamk, hvecp, rbzmniw, jfofam, tigvdj +uqals (78) -> ropdc, pbdafpz, mgqil, pygrhr, eourjv +veuzidj (49) -> kmhug, yrolq, csfzl +eovobtl (149) -> hzuyh, iftcnc +udgssh (5) +nxbec (96) +dyomhm (40) -> npxexv, xbccghy, jncjxue, nadbegy +fsdoohr (64) +lcrbt (29) +rarkt (1387) -> mjqzvuu, nzhbfc, veuzidj +temju (53) -> qpzszp, cqlvkj +nrgxdmx (1352) -> mlalrpt, nqfqgj, cuscn, ogowst, vfrylx +tlpfggk (25) +wzimze (4005) -> uwjkolt, jynmg, ibqmynm +ddgnyfo (79) +fyaxzl (18) +qpzszp (65) +eitdb (197) -> trvtkqj, kwnqw +fgsmzi (525) -> dzuqljn, ihvefep, uhrdeol, gdvuw +nevrtrs (83) +jyftx (76) +lcitl (1114) -> nlwakg, hwgwzv, girxc +kzjtb (78) -> gacseeh, lycfbo, aifpxqv +zacwh (5) +glcsinj (90) -> aemkbp, yxxgd, fhqhu, xquhgig, nxmhned, lqbmor, qmyfg +rswnjx (57) +cokvree (96) +ewgadin (39) +oqsdzpe (50) +yznmd (62) -> uvkwg, mncivb +lpdhdvy (65) +kmhug (64) +bvtgvu (94) +hycgb (237) -> zmciyk, ysbhsn, vxslvq +ycuuwxa (161) -> vehziv, rvqopbu +mieqogh (19) +xadcuw (1626) -> chgfb, stofi +supjxi (21) +rfqddq (53) +qbaosu (314) -> hshafy, ukgbdva +ptxfk (73) +lofybs (89) +agjpn (8265) -> ocgbpez, ejdxula, kgbzu +mgbgb (334) -> kksizqf, dofou +izxpf (39) -> ewobo, ntezb, sbmqxu, tlpfggk +znagag (89) +zmciyk (19) -> mieuhe, psjec +dhobx (95) +hvecp (90) -> hrrld, jazqb, fonrb, dcpzwz, vqinar, bxqqvue +sjbfmfa (80) -> fewgct, jupzgjm +fmpvv (74) +bcadp (91) +tmzxl (23) diff --git a/2017/d08/ex1/ex1.py b/2017/d08/ex1/ex1.py new file mode 100755 index 0000000..c762819 --- /dev/null +++ b/2017/d08/ex1/ex1.py @@ -0,0 +1,71 @@ +#!/usr/bin/env python + +import enum +import operator +import sys +from collections import defaultdict +from typing import NamedTuple + + +class Operation(enum.StrEnum): + INC = "inc" + DEC = "dec" + + +class Comparator(enum.StrEnum): + GT = ">" + GE = ">=" + LT = "<" + LE = "<=" + EQ = "==" + NE = "!=" + + def __call__(self, lhs: int, rhs: int) -> bool: + return getattr(operator, self.name.lower())(lhs, rhs) + + +class Condition(NamedTuple): + target: str + comp: Comparator + value: int + + def eval(self, registers: dict[str, int]) -> bool: + return self.comp(registers[self.target], self.value) + + +class Instruction(NamedTuple): + target: str + op: Operation + amount: int + condition: Condition + + +def solve(input: str) -> int: + def parse_line(line: str) -> Instruction: + target, op, amount, _, comp_target, comp_op, comp_value = line.split() + return Instruction( + target, + Operation(op), + int(amount), + Condition(comp_target, Comparator(comp_op), int(comp_value)), + ) + + def parse(input: str) -> list[Instruction]: + return [parse_line(line) for line in input.splitlines()] + + program = parse(input) + regs: dict[str, int] = defaultdict(int) + for instr in program: + if not instr.condition.eval(regs): + continue + regs[instr.target] += instr.amount * (1 if instr.op == Operation.INC else -1) + return max(regs.values()) + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d08/ex1/input b/2017/d08/ex1/input new file mode 100644 index 0000000..e1d8dc5 --- /dev/null +++ b/2017/d08/ex1/input @@ -0,0 +1,1000 @@ +sd dec 441 if k != 0 +lp dec 419 if mxn >= 7 +w inc -592 if icg >= -9 +a dec -29 if q <= 9 +kt dec 486 if ms != 8 +kt inc -841 if kt > -488 +rz inc -592 if m <= 1 +xtz dec 780 if lp < 9 +iox dec 804 if icg != 6 +lp inc 360 if i == 9 +f dec -570 if gi >= 7 +um inc 87 if q != 4 +kt dec -242 if rz != -595 +j inc -154 if db != 0 +giq dec 728 if iox > -811 +a dec -9 if xtz > -781 +lp inc -261 if ms > 2 +w inc -816 if hey > -1 +mxn inc 680 if ms >= -9 +q inc -777 if w < -1400 +wm dec -353 if q == -774 +q inc 414 if hey == 0 +xdl inc 488 if kt != -1075 +gus dec -136 if fxx != -7 +f dec 852 if hey >= 10 +j inc 531 if ms <= -9 +km dec 231 if xdl >= 487 +fxx dec 579 if iox == -804 +km dec 23 if kt != -1076 +fxx inc -845 if xtz != -773 +mxn dec 335 if fxx != -1432 +q dec 184 if f == 0 +wm dec -330 if f == 0 +iox dec 677 if mxn != 339 +mxn inc -429 if hey < 1 +rz dec 101 if hey == 8 +k inc 17 if db == 0 +gus inc -328 if iox == -1481 +a inc 657 if rz <= -584 +wm dec -365 if rz < -590 +m inc -710 if w < -1399 +kt inc -246 if wm != 698 +w dec 976 if fxx >= -1431 +giq inc 319 if hey >= -5 +iox inc -563 if xdl < 495 +xdl dec -349 if f >= -9 +sd inc -296 if q >= -555 +xdl inc 406 if cl >= -2 +f inc 966 if hey >= -6 +lp dec -838 if iox > -2054 +k dec -674 if q < -542 +i inc -23 if k < 692 +mxn inc -221 if sd != -302 +mxn inc -830 if mxn > -309 +km inc -283 if db > -7 +icg inc 365 if xdl > 1234 +q inc -23 if m < -702 +wm dec -507 if rz < -582 +j inc -501 if gi != -10 +um inc 274 if a > 689 +db inc 814 if xdl != 1250 +fxx dec -172 if db != 822 +wm dec 581 if kt <= -1323 +gi dec -715 if kt >= -1339 +f inc -209 if i >= -31 +q inc 933 if fxx > -1246 +mxn dec -227 if gi > 713 +fxx dec -112 if xdl <= 1252 +hey dec -998 if xtz >= -781 +lp dec -743 if ms <= 4 +icg dec -581 if fxx > -1149 +gus inc 725 if k != 698 +icg dec 156 if kt != -1339 +gus dec 961 if i > -32 +giq dec -992 if kt <= -1327 +m inc -477 if xdl >= 1240 +db dec -258 if gus <= -424 +wm inc -72 if gi > 713 +i dec 923 if lp == 1581 +m inc -221 if iox == -2044 +j inc 410 if m < -1402 +kt inc 838 if a == 685 +i dec 528 if gi < 712 +iox dec -823 if i >= -952 +a dec -705 if icg > 799 +gi dec -538 if db > 1079 +xdl inc -507 if q > -571 +rz inc 37 if km > -546 +fxx dec -718 if ms <= -2 +xdl inc -742 if cl < 4 +q dec 591 if wm > 542 +a dec 100 if db != 1072 +fxx dec -392 if giq >= 579 +j inc 991 if i >= -942 +m inc 311 if sd != -296 +icg inc -286 if db != 1075 +m inc 906 if rz == -555 +um inc 150 if hey == 993 +rz inc -637 if fxx < -746 +ms dec 779 if f >= 751 +gus inc 928 if j != -100 +rz dec 769 if sd < -292 +xdl inc -556 if gus <= 505 +rz inc -94 if j < -82 +mxn dec -763 if cl == 0 +xdl dec -693 if gus <= 502 +db inc -879 if kt <= -1339 +w dec 651 if hey > 991 +um dec -898 if giq == 583 +xdl dec 501 if hey > 998 +wm dec 746 if lp < 1587 +iox inc 915 if um > 1251 +a inc 573 if q >= -1165 +j dec -459 if m <= -512 +km dec -601 if xdl >= 131 +km dec 801 if f >= 756 +ms inc 318 if j < -91 +hey dec -768 if i <= -945 +f inc -982 if xdl < 134 +i inc 210 if iox < -305 +icg inc -838 if xtz >= -784 +mxn dec 901 if f == -225 +m inc 601 if i <= -733 +iox inc -863 if cl >= -5 +ms dec -474 if db >= 1069 +xtz dec 708 if um >= 1253 +lp dec 0 if xdl < 130 +k inc -476 if sd <= -291 +um dec 475 if hey != 1756 +q inc 178 if k <= 215 +km dec 244 if a >= 1265 +j dec 485 if k < 209 +icg inc 429 if um >= 784 +ms inc -881 if kt > -1341 +cl inc -75 if iox < -1176 +icg dec -72 if gi == 715 +i inc 714 if lp >= 1572 +rz inc -881 if j >= -96 +ms dec -453 if i <= -29 +giq dec -500 if sd != -305 +sd dec -78 if lp != 1572 +a inc 313 if db == 1072 +w dec 97 if q == -978 +gus dec -203 if f != -225 +xdl dec -894 if j < -88 +q inc 71 if k != 213 +um dec -242 if wm > -207 +kt dec -997 if sd != -215 +cl dec 643 if lp != 1587 +hey inc -564 if fxx == -748 +ms dec 639 if m != 95 +ms dec 131 if w <= -3026 +xdl dec 241 if w != -3032 +mxn inc 404 if i == -28 +giq dec 111 if xdl >= 789 +wm inc 93 if j <= -88 +xdl inc 318 if um >= 1026 +gi dec -766 if a < 1587 +mxn inc 212 if w > -3040 +f dec -601 if giq == 1084 +m dec 135 if kt >= -334 +a dec -471 if rz >= -2940 +cl dec -379 if giq != 1080 +w inc -834 if db < 1077 +km inc -515 if f >= -226 +i inc 133 if a > 2043 +gus dec -368 if gi >= 1476 +db inc -629 if fxx > -758 +km inc -807 if a != 2052 +j dec -129 if cl > -267 +gi dec -443 if m <= -35 +kt dec -355 if sd != -218 +mxn inc -734 if xtz == -1488 +icg inc 468 if m == -34 +m inc 896 if iox <= -1168 +xdl inc -763 if j < 39 +db inc -51 if xdl >= 337 +sd dec 688 if icg >= 167 +w inc 307 if gi >= 1924 +ms inc 190 if xdl >= 331 +k inc 869 if fxx >= -750 +mxn inc -772 if ms >= -1771 +f inc -303 if q == -922 +kt dec 99 if ms < -1757 +j dec -733 if sd < -904 +wm inc -808 if gi <= 1933 +q dec -671 if i != 112 +cl inc -790 if xdl >= 330 +icg inc -617 if ms > -1774 +w inc 529 if xdl > 333 +w inc -413 if wm < -907 +db inc 780 if xdl > 330 +xtz inc -535 if um <= 1025 +mxn inc 415 if db > 1165 +xtz inc 170 if db != 1169 +k dec -365 if k <= 1091 +giq inc -695 if q < -233 +db inc -991 if a > 2057 +k dec 543 if fxx == -748 +kt inc 673 if hey <= 1209 +gi inc -23 if mxn <= -1917 +m inc -567 if sd > -916 +m dec -269 if wm == -912 +kt dec 601 if db != 1180 +km dec -781 if kt == -351 +rz inc -296 if wm != -912 +um inc 4 if gus != 874 +um inc -876 if q < -231 +gi dec -744 if xtz < -1320 +j inc -101 if q <= -236 +kt inc -959 if xtz == -1318 +icg dec 9 if m == 562 +kt inc -412 if gus > 867 +fxx dec 394 if gus > 867 +fxx dec 105 if xtz == -1318 +a dec -533 if giq != 396 +km dec -864 if um != 147 +mxn dec -240 if i != 114 +m inc -830 if km != -628 +iox inc 160 if mxn != -1690 +k inc 966 if j > 679 +xtz inc 482 if cl <= -1050 +f inc -430 if fxx < -1253 +sd inc 138 if sd > -915 +giq dec 736 if xtz == -836 +f dec 780 if ms >= -1767 +wm inc -362 if kt <= -1731 +um dec -195 if xtz >= -838 +um dec 888 if i >= 107 +i dec 754 if gus != 868 +hey inc -518 if kt <= -1726 +iox inc 843 if hey > 676 +ms dec -46 if a < 2587 +mxn inc 288 if gus >= 864 +gus inc -643 if mxn < -1393 +um inc 457 if rz >= -2936 +um dec -976 if xtz == -836 +m dec 783 if fxx > -1254 +gi inc -63 if m <= -1043 +lp dec -244 if cl > -1062 +sd inc 908 if km >= -637 +km inc -725 if kt <= -1731 +j dec -20 if k == 906 +wm dec -596 if kt >= -1740 +xtz dec 133 if km <= -1355 +db inc -792 if icg != -466 +db dec -851 if lp != 1835 +cl dec 707 if f > -1012 +iox dec 246 if iox >= -170 +um dec 719 if ms == -1720 +xtz dec -216 if icg != -464 +km dec 776 if w <= -3446 +j dec 388 if xdl != 339 +j dec 776 if kt == -1732 +mxn dec 615 if cl == -1761 +i inc 579 if gus < 226 +i inc -172 if xdl < 341 +ms inc 720 if lp < 1825 +ms dec -590 if hey < 690 +iox dec -781 if gus < 231 +mxn inc -145 if a >= 2577 +q inc -885 if f <= -1013 +xtz inc -148 if a != 2593 +km inc -586 if fxx < -1239 +um inc -988 if kt < -1724 +k dec -852 if xtz != -891 +j inc -365 if m != -1050 +gus inc -679 if cl != -1760 +um inc -342 if icg != -455 +hey inc -807 if mxn == -2157 +w dec 759 if w != -3439 +ms inc -328 if gus >= -455 +gi inc -179 if iox == 369 +ms inc 930 if giq != -345 +fxx inc 959 if giq == -338 +km dec -605 if db <= 1226 +um dec 954 if gus == -460 +f inc -325 if giq < -341 +cl dec -95 if cl <= -1752 +hey dec 825 if sd < 141 +db dec -608 if sd >= 139 +giq inc 141 if lp > 1821 +a dec 824 if km <= -2715 +k inc 982 if db < 1840 +k dec -6 if giq != -213 +xtz dec -59 if kt <= -1731 +fxx dec -589 if a == 1761 +m inc 874 if rz == -2936 +m dec 241 if xtz == -838 +gus dec 512 if w > -4208 +mxn inc 651 if gus == -973 +lp inc -553 if hey == -948 +giq inc 252 if lp > 1263 +km dec -360 if a == 1761 +giq inc -504 if a != 1770 +kt inc -815 if um <= -1146 +lp dec 343 if gi >= 1652 +w dec 6 if lp <= 937 +gus dec 806 if ms > -534 +q dec 262 if f > -1335 +rz dec -959 if sd <= 141 +w dec -958 if mxn == -2157 +gus inc 530 if xdl > 333 +lp dec -30 if hey > -949 +lp dec 345 if q != -509 +i inc 509 if km > -2363 +rz inc -576 if um == -1155 +km inc 622 if iox > 367 +k dec -833 if ms != -527 +um dec 586 if i == 1027 +q inc -724 if rz == -2553 +cl dec -372 if f <= -1330 +cl dec -944 if j > -442 +j dec 674 if hey != -958 +q inc -830 if j != -1135 +cl dec 594 if um < -1749 +gi dec -991 if q > -2066 +kt dec -528 if giq >= -465 +iox inc -291 if a > 1759 +q dec -395 if f != -1330 +um dec 244 if cl <= -1285 +a dec 961 if um < -1988 +iox inc -321 if w == -3253 +lp dec -307 if iox < -241 +m dec -188 if mxn == -2157 +um dec -481 if icg <= -450 +gi dec 303 if cl < -1294 +mxn dec -791 if wm != -684 +kt dec -368 if sd != 149 +mxn dec -783 if sd < 141 +gi dec 864 if m == 11 +gus dec -17 if w == -3253 +w dec 499 if giq > -464 +xtz inc 659 if q > -2067 +wm inc 572 if kt != -1654 +xtz dec -287 if xtz != -191 +sd inc 763 if kt <= -1658 +xdl inc 830 if gus == -1225 +icg inc 508 if km == -1737 +gi inc 756 if rz == -2560 +xtz inc 983 if km <= -1734 +w inc 717 if xtz > 1085 +q dec 52 if w < -3030 +xdl inc -373 if f <= -1321 +w dec -544 if icg > 56 +gus inc -120 if km > -1741 +mxn dec -16 if hey <= -947 +wm dec 591 if mxn != -576 +gus inc -355 if kt <= -1644 +xdl inc 898 if fxx <= -650 +f dec 71 if m != 11 +xtz dec 902 if fxx > -663 +kt dec -576 if db != 1831 +rz inc 465 if fxx < -650 +a dec 342 if fxx >= -666 +k inc 293 if cl != -1286 +iox dec 791 if db == 1839 +a dec 125 if kt != -1071 +gi dec 852 if xtz == 185 +f inc 982 if sd == 133 +mxn dec -426 if sd <= 146 +gus inc -100 if xdl <= 1696 +um inc 872 if xtz != 182 +db dec -10 if db < 1843 +q inc 209 if lp >= 920 +k inc -338 if hey >= -950 +m inc -601 if wm < -695 +w dec 725 if xdl >= 1694 +wm inc -913 if q >= -1901 +fxx inc 986 if sd <= 144 +a dec 329 if m == -590 +xtz inc 80 if q < -1893 +gus inc 234 if fxx == 328 +ms inc 110 if giq < -451 +gus dec -969 if sd != 134 +um dec 806 if ms <= -417 +gus dec -458 if icg < 53 +cl dec -272 if fxx > 326 +k inc -212 if sd != 143 +xtz dec 109 if fxx <= 324 +mxn dec 302 if m >= -599 +lp inc -240 if giq <= -451 +m dec -58 if wm != -1618 +xtz dec -178 if gus == -139 +giq inc -132 if xdl != 1694 +w inc -149 if a >= 962 +f inc -512 if lp <= 690 +lp dec -84 if sd < 147 +cl inc 657 if db <= 1851 +m inc -180 if hey == -948 +sd inc -711 if a < 974 +ms inc -905 if j != -1134 +f inc -852 if mxn >= -451 +lp inc 818 if i == 1027 +w dec -407 if wm <= -1610 +m dec -298 if gi > 926 +gi inc -17 if sd != -564 +ms inc 891 if kt != -1075 +xdl inc -498 if fxx != 337 +kt dec 153 if lp == 1575 +db inc -565 if f < -2690 +lp inc 812 if um <= -1438 +fxx inc 151 if um != -1429 +fxx dec 484 if km < -1732 +q inc 130 if f == -2690 +lp dec 926 if icg != 58 +giq dec -378 if k >= 3321 +cl dec 136 if ms == -1323 +xdl dec -889 if w != -3502 +hey dec 540 if hey == -948 +a dec 796 if xdl >= 1189 +xtz dec 197 if kt < -1066 +i dec 328 if db == 1284 +giq dec -697 if hey > -1482 +f inc -985 if icg != 51 +gi inc 128 if f > -3689 +j dec 638 if i != 699 +mxn inc 300 if icg < 55 +icg inc -846 if q <= -1900 +icg dec -845 if giq > -86 +cl dec 502 if hey < -1482 +db inc -18 if hey != -1483 +giq inc -398 if wm < -1615 +xtz inc -724 if gus > -146 +um inc -761 if gus >= -137 +gi dec 423 if mxn <= -146 +xtz dec -632 if ms >= -1326 +gi dec 990 if i == 693 +xtz dec 292 if i == 699 +q inc 881 if xtz >= -143 +xdl dec -25 if a <= 175 +f dec -599 if iox >= -1036 +giq dec -502 if gus == -139 +xdl dec 235 if gus >= -139 +q inc 704 if wm <= -1610 +ms inc 693 if i == 699 +k inc 407 if ms != -627 +f dec 107 if iox <= -1029 +xtz inc -328 if w != -3502 +j dec -474 if xdl < 994 +gus dec 82 if fxx != -12 +db dec -913 if xtz >= -143 +iox dec -932 if gus != -230 +giq inc -74 if q > -316 +ms inc -711 if gi != 1039 +w dec -29 if q >= -315 +um inc -851 if xtz == -141 +f inc -816 if ms <= -1348 +hey inc 813 if lp > 1468 +sd dec 483 if icg != 48 +w dec -199 if db <= 2181 +q inc -846 if sd != -572 +db inc -134 if k <= 3732 +um dec -185 if mxn > -145 +rz inc 559 if a < 174 +cl inc 650 if f != -3190 +gi inc 785 if cl >= -343 +w inc -227 if lp >= 1468 +gus inc -437 if wm < -1608 +kt inc -301 if w < -3499 +k dec -873 if km < -1736 +xdl dec -262 if q < -1155 +f dec 325 if mxn >= -149 +wm inc 523 if km < -1736 +gus dec -643 if db <= 2053 +gus dec 998 if iox > -95 +icg inc 774 if q < -1160 +k inc 789 if a > 159 +fxx dec 447 if xtz <= -133 +m inc -730 if rz <= -1526 +mxn dec -825 if cl > -346 +xtz inc 846 if sd > -576 +mxn inc 128 if cl < -352 +cl dec 99 if xtz <= 704 +lp dec -537 if ms >= -1341 +giq dec 784 if w == -3501 +iox inc 410 if giq <= -437 +f dec 314 if iox <= 317 +kt inc 520 if a == 169 +wm inc -419 if km >= -1740 +icg dec 900 if fxx != -450 +hey dec 564 if hey <= -670 +um inc 653 if lp < 2016 +hey dec 835 if fxx <= -447 +giq dec 542 if giq == -433 +gus dec 320 if cl > -354 +icg inc 75 if i > 695 +iox inc -949 if j <= -649 +q inc 0 if ms == -1341 +um dec 180 if rz != -1538 +i inc 534 if rz >= -1536 +i inc -316 if fxx == -452 +rz dec 225 if icg <= 2 +gus inc -416 if km != -1727 +icg inc -325 if m >= -1150 +rz dec 892 if gus < -742 +k inc -832 if j > -657 +wm inc -10 if gus <= -752 +f dec 179 if rz < -2644 +q inc 817 if kt > -859 +fxx inc 501 if xtz < 712 +m inc 111 if kt < -862 +ms dec -896 if gus != -749 +kt dec -925 if kt >= -862 +fxx inc -713 if cl <= -355 +xdl dec -120 if a == 172 +a dec -757 if hey != -2073 +gus inc 127 if mxn != -12 +xdl inc -627 if f == -3995 +kt dec 832 if lp < 2004 +w dec 208 if kt > 61 +kt dec 378 if lp >= 1998 +cl dec -371 if xdl > 1249 +f dec 708 if i < 927 +db dec 602 if ms > -443 +cl dec 247 if f > -4707 +um dec -394 if gi != 1040 +j dec 190 if giq >= -440 +gi inc 560 if q == -347 +xdl inc -601 if gus >= -630 +k dec 934 if iox == -641 +m inc -672 if icg >= -334 +w dec 104 if xdl != 647 +lp dec 36 if icg >= -329 +mxn dec 768 if m >= -1821 +f dec 555 if k == 3625 +w dec 440 if q >= -353 +lp dec -83 if kt != -316 +hey dec -168 if db != 2042 +giq dec 460 if xtz == 708 +fxx dec 446 if icg <= -325 +icg dec -22 if xtz != 717 +ms dec 920 if j != -841 +hey inc 213 if db < 2053 +mxn dec 862 if w < -4150 +rz dec 873 if xdl <= 656 +gi inc -584 if lp > 2047 +kt inc -29 if um <= -385 +m inc -883 if xtz < 715 +j inc 850 if iox == -641 +xdl dec 738 if w > -4154 +icg dec -851 if kt <= -329 +db inc -437 if ms > -449 +kt inc 280 if xtz > 702 +iox dec 924 if giq <= -899 +m dec 453 if cl < -344 +fxx inc -543 if i > 914 +rz inc 402 if f > -5269 +iox dec -260 if giq >= -900 +km dec -971 if sd >= -578 +wm inc 193 if k == 3630 +xdl dec -416 if a != 932 +lp inc 213 if icg == 545 +um inc 864 if wm <= -1516 +lp dec 343 if fxx <= -943 +rz inc 657 if kt > -50 +kt dec -253 if xdl <= 328 +km inc 256 if mxn > -781 +hey inc 856 if k == 3625 +gus inc 266 if f < -5264 +rz dec -139 if m <= -3151 +hey dec -669 if db == 1603 +gi inc -452 if ms == -445 +kt inc 123 if mxn == -783 +f inc -656 if sd > -562 +m inc -479 if i > 915 +um inc -288 if sd == -571 +giq dec -68 if gi == 9 +fxx dec -867 if fxx != -940 +um inc 80 if m > -3636 +i dec 980 if j < 9 +lp inc -932 if km < -764 +cl inc 387 if mxn != -788 +wm dec -492 if km != -766 +km inc 571 if m > -3634 +kt inc 903 if q >= -340 +wm inc 852 if k < 3616 +um dec -210 if m < -3629 +j inc -136 if m < -3623 +j dec -575 if i != 908 +sd inc 762 if xdl == 325 +gi inc -933 if kt != 314 +giq inc 272 if fxx < -939 +um inc -279 if iox <= -386 +xtz dec 303 if f < -5258 +xtz dec 344 if iox != -378 +giq dec -384 if f < -5264 +f inc -698 if mxn <= -778 +rz inc -185 if q <= -342 +um dec 272 if db <= 1613 +rz inc -650 if q <= -347 +xtz dec -621 if q <= -340 +kt inc 497 if sd < 200 +gus dec -786 if km < -203 +um dec 584 if a != 926 +hey dec 467 if xdl <= 318 +ms inc -975 if j == 448 +rz inc 763 if w <= -4144 +cl dec 923 if i >= 915 +km inc -294 if fxx >= -942 +fxx dec 218 if ms != -1420 +q inc 671 if gus < -350 +xdl dec 652 if i >= 913 +xtz dec -657 if gus > -367 +km dec 316 if j != 457 +wm dec 664 if fxx <= -932 +iox dec 463 if gus != -359 +hey inc -254 if fxx <= -940 +cl inc -684 if q > 317 +rz dec -287 if xtz < 1348 +lp dec 315 if lp != 1340 +hey dec -685 if q >= 325 +kt dec -360 if icg <= 553 +a inc 834 if um >= -646 +m inc -91 if sd < 183 +a dec 37 if k != 3617 +a inc -306 if sd != 201 +k dec 822 if q <= 327 +iox inc -885 if iox >= -850 +kt inc -835 if rz == -2113 +cl dec -99 if a < 586 +cl dec 635 if w != -4141 +kt inc -938 if giq == -173 +sd dec 599 if iox != -1720 +ms dec -484 if j != 448 +wm inc 669 if fxx == -945 +iox inc -633 if sd <= -402 +i dec -774 if f >= -5963 +f inc -783 if um < -646 +km inc 6 if xtz > 1333 +gus inc -986 if a == 583 +iox inc -233 if um <= -651 +xtz dec -857 if w != -4149 +wm inc -791 if a < 584 +j dec -41 if cl <= -2111 +xdl inc 77 if rz > -2123 +xdl inc -983 if ms != -1416 +fxx dec 247 if sd == -408 +k inc -362 if k > 2804 +xdl inc 13 if iox >= -2595 +db inc 473 if um <= -654 +w inc 307 if w > -4152 +xdl dec -237 if a <= 584 +wm inc 366 if giq == -173 +j dec 111 if i != 917 +k dec 790 if w != -3848 +sd dec -841 if wm == -2595 +i inc -538 if xdl == -989 +f dec 583 if rz > -2114 +xtz inc -886 if kt <= -590 +ms inc 151 if mxn == -783 +q dec -585 if fxx == -1184 +j dec -102 if km == -799 +xdl dec 504 if sd == 433 +fxx inc -208 if db > 2078 +m dec 471 if q >= 323 +icg inc -296 if i <= 919 +rz dec -601 if mxn > -791 +gus dec -870 if gi > -925 +um dec -171 if gi >= -927 +f inc 969 if gi != -932 +j dec 78 if xdl <= -1481 +m dec 115 if lp != 1019 +km inc 911 if ms != -1267 +gi inc 798 if i <= 920 +iox dec -780 if km < 122 +cl dec 670 if xdl > -1492 +gus inc 231 if kt != -602 +giq dec 584 if k <= 2021 +j dec -142 if k != 2020 +a inc 905 if xdl == -1487 +giq inc -1 if k > 2012 +j inc -123 if sd != 433 +a dec -615 if ms >= -1270 +q inc 848 if ms == -1269 +kt dec -69 if w < -3838 +fxx dec -676 if i > 926 +iox dec 980 if gi > -131 +fxx dec -716 if giq != -758 +fxx dec 937 if sd > 433 +sd inc 414 if i != 914 +cl inc -625 if giq <= -757 +gus dec 306 if fxx != -1390 +q inc 228 if lp != 1010 +ms inc 340 if gus == -549 +cl inc -185 if xtz == 461 +m dec -550 if f == -6363 +fxx dec 73 if lp >= 1019 +ms inc 651 if w != -3842 +giq inc 155 if xtz > 450 +wm dec -41 if icg < 253 +wm inc -535 if k != 2006 +j dec 181 if a >= 2094 +cl inc -70 if km <= 114 +i dec -910 if db < 2085 +mxn dec -616 if giq != -610 +ms inc 688 if lp <= 1019 +kt inc 264 if f == -6357 +gi inc -200 if xdl >= -1496 +rz dec -610 if km < 121 +w dec 82 if wm < -3085 +giq dec 136 if um != -483 +rz inc 804 if km < 121 +i dec 197 if um < -475 +cl dec 656 if ms == -241 +m inc 656 if w <= -3921 +lp inc -497 if gus > -557 +xtz inc 47 if w > -3926 +hey dec -130 if km <= 112 +gus inc 800 if gus > -555 +icg dec 229 if wm == -3089 +kt dec -746 if gi != -333 +xdl dec -365 if m == -2896 +gi dec 286 if j > 430 +wm inc 858 if q > 1393 +mxn dec 440 if iox >= -2798 +sd dec 651 if hey < -282 +um inc 135 if kt <= 220 +hey dec -639 if ms != -251 +lp dec 558 if q != 1393 +kt dec -264 if kt != 217 +sd inc -523 if k >= 2006 +k dec 938 if w <= -3917 +mxn inc -120 if um == -350 +giq inc -223 if icg > 16 +m dec 171 if xtz < 504 +um dec 850 if xdl == -1122 +iox inc 955 if km >= 118 +gi dec -910 if icg == 20 +db inc -39 if xdl > -1116 +mxn dec 481 if xtz > 491 +um dec 766 if iox >= -2798 +sd inc -103 if um != -1967 +q inc -673 if q <= 1403 +hey dec -471 if xdl == -1122 +j inc -818 if sd <= 212 +fxx dec -749 if ms > -238 +w inc 407 if xdl >= -1123 +mxn dec 138 if xtz >= 507 +rz dec 257 if db != 2071 +xdl dec 116 if lp > -38 +mxn inc -162 if xtz <= 495 +gi dec 669 if i < 1633 +gi dec 187 if ms == -251 +mxn dec 893 if xdl != -1229 +k inc 616 if i <= 1633 +xtz dec 881 if a <= 2105 +gus inc 732 if i != 1627 +kt inc 749 if a == 2103 +f inc -289 if rz <= -346 +um inc 919 if f < -6644 +wm inc -646 if m != -3067 +hey inc 1 if a != 2108 +xdl dec 725 if ms <= -238 +j dec -789 if k != 1695 +hey inc 317 if w < -3515 +kt inc 965 if gi >= -379 +wm inc 137 if a != 2101 +sd dec -783 if hey <= 1160 +gus dec -349 if um <= -1046 +ms inc -843 if sd == 1004 +k inc -298 if f >= -6661 +gus dec -15 if gi <= -365 +gus dec -411 if wm <= -2092 +cl inc 25 if icg != 30 +km inc 634 if m == -3067 +kt dec 856 if gus < 1766 +xdl inc -808 if fxx <= -1461 +xdl dec -883 if rz >= -358 +gus dec -311 if j > 1214 +sd dec 349 if xdl == -1888 +mxn dec -309 if j <= 1225 +giq dec 181 if ms >= -1087 +rz dec -951 if iox >= -2788 +k dec -824 if lp != -42 +fxx dec -984 if km <= 746 +mxn dec 333 if gus <= 2067 +fxx dec 742 if db >= 2078 +kt inc -367 if mxn > -1793 +i dec -853 if lp < -27 +kt dec -491 if wm < -2085 +ms inc 233 if wm != -2097 +i inc 729 if rz != -363 +ms dec 246 if km < 737 +xtz dec 455 if cl > -4106 +icg inc -755 if kt <= 1206 +wm dec -828 if mxn <= -1798 +giq inc 397 if xdl != -1888 +mxn dec 861 if cl != -4101 +fxx dec 406 if f <= -6653 +icg dec -101 if rz == -355 +gus dec -147 if cl <= -4101 +cl dec 717 if q > 728 +db dec -276 if m < -3061 +k dec -3 if sd > 651 +lp dec -357 if xtz < -827 +f dec -380 if lp <= 322 +cl inc -740 if gi > -368 +sd inc 744 if fxx >= -1221 +iox inc 39 if mxn != -2661 +fxx inc -569 if ms < -841 +j dec 19 if gus == 2216 +sd inc 826 if f < -6267 +cl dec -377 if f != -6272 +fxx dec 318 if icg >= -638 +db dec 638 if xdl == -1883 +q dec -923 if um >= -1055 +a inc 22 if q < 1656 +rz inc 129 if sd <= 1484 +db dec 408 if kt == 1199 +q inc -782 if iox <= -2750 +w dec 232 if fxx >= -2119 +gi dec -887 if km >= 738 +hey dec 35 if icg < -624 +xdl inc -379 if um > -1052 +hey inc -596 if icg != -638 +hey dec -945 if um >= -1047 +xdl dec -202 if k > 2219 +rz dec 76 if f < -6269 +xdl inc 289 if q <= 876 +rz inc 308 if kt >= 1190 +a inc -190 if lp != 317 +kt inc -195 if db >= 1944 +f dec 526 if q < 878 +wm dec -305 if xdl > -1777 +xdl dec -99 if k != 2215 +fxx inc 953 if wm == -1789 +hey dec 625 if rz == -1 +mxn dec 319 if mxn < -2644 +m dec 611 if f == -6798 +fxx dec -83 if icg < -639 +gi dec 567 if cl > -4830 +ms inc -95 if mxn < -2966 +um inc 862 if gus != 2215 +hey dec -341 if icg == -634 +iox dec 829 if f <= -6801 +giq dec 376 if kt == 1012 +lp dec -990 if um < -183 +iox inc -868 if kt >= 999 +iox dec -670 if f <= -6796 +fxx inc 895 if gus < 2209 +k inc -916 if q <= 873 +rz dec 646 if w >= -3747 +kt inc -807 if j == 1203 +fxx dec 568 if gi >= -43 +giq dec -966 if q < 877 +rz inc 250 if giq < -174 +iox inc -19 if i == 3212 +f inc -404 if k <= 1304 +gi dec -481 if kt >= 195 +giq dec -323 if gi < 424 +lp inc 873 if km >= 752 +icg dec 953 if um <= -182 +q dec 246 if db != 1942 +rz inc -987 if lp > 1307 +hey inc -728 if xtz <= -837 +fxx dec 743 if xtz != -843 +km dec 393 if km <= 740 +rz inc 635 if icg < -1578 +k dec -136 if km <= 742 +gus inc 715 if giq >= -185 +lp dec 782 if km >= 741 +ms dec -140 if sd != 1479 +iox inc -992 if sd != 1488 +wm inc 8 if ms >= -802 +giq dec 134 if xtz <= -830 +mxn dec 877 if xtz > -832 +lp inc -260 if ms > -815 +xdl inc 170 if w > -3742 +q inc -674 if gi != 434 +giq inc -760 if wm <= -1788 +km dec -96 if hey != 1802 +j inc 662 if fxx >= -1904 +gus dec 305 if a <= 1943 +db inc 881 if icg > -1583 +um inc -137 if rz >= -96 +mxn dec -755 if lp == 269 +lp inc -220 if hey > 1799 +cl inc 652 if xdl >= -1678 +gus inc -473 if a >= 1935 +k dec 80 if i != 3216 +gus inc 138 if xtz != -831 +mxn inc 654 if giq >= -1075 +xtz inc -677 if um >= -323 +cl inc -557 if hey >= 1807 +m dec 488 if lp == 49 +k inc -214 if q != -49 +k inc -584 if cl != -4727 +icg inc -423 if ms == -806 +gi dec -323 if fxx >= -1909 +ms dec -61 if giq != -1062 +wm dec 259 if q < -45 +f inc -634 if gi == 753 +iox inc 985 if gi > 750 +km dec -821 if db < 1950 +f inc 105 if gi < 763 +j inc -36 if q <= -44 +ms inc -244 if giq < -1063 +i dec 423 if cl == -4727 +kt dec 77 if sd == 1481 +db inc -779 if gi == 753 +gi dec -525 if iox <= -2985 +f dec 378 if rz != -86 +mxn dec 479 if km < 1671 +f inc -812 if kt > 118 +db inc -121 if kt < 128 +w inc 957 if mxn == -2042 +db inc -97 if mxn != -2052 +km inc 521 if q < -46 +a dec -669 if i >= 2783 +icg inc 47 if km > 2176 +gi inc 459 if gi != 760 +mxn dec 810 if hey >= 1803 +ms inc -896 if xtz != -1522 +fxx inc 331 if cl == -4727 +hey dec 104 if sd < 1482 +f dec -684 if f < -8923 +xtz dec 893 if giq > -1080 +um dec -749 if db < 962 +rz inc 823 if sd <= 1484 +a inc 4 if w > -2793 +cl dec -559 if a > 2614 +iox dec 116 if db <= 956 +cl dec -384 if gus == 2291 +lp inc 522 if kt > 118 +icg dec -250 if km <= 2186 +j inc -144 if mxn > -2843 +kt dec -682 if ms > -1891 +gi inc -320 if sd < 1489 +iox dec -955 if kt != 802 +mxn dec 949 if lp > 570 +mxn dec -84 if wm > -2050 +xtz dec 762 if kt == 802 +wm dec -74 if um != 422 +m inc -948 if gi >= 889 +w inc 90 if w != -2792 +j dec -516 if fxx <= -1568 +cl inc -457 if k <= 1232 +ms dec -288 if w != -2792 +ms inc 57 if db >= 946 +a dec -481 if w >= -2800 +icg dec -210 if ms != -1827 +giq inc 323 if a != 3098 +ms inc -646 if iox <= -3090 +mxn dec -390 if lp > 565 +db dec 634 if hey >= 1701 +iox inc 357 if w >= -2799 +hey inc 434 if icg != -1503 +um dec 763 if xtz == -3168 +giq dec 742 if m != -5115 +giq inc -645 if db < 318 +f inc -832 if ms == -2474 +xtz dec 921 if w > -2799 +f dec -259 if xtz <= -4086 +mxn dec -689 if ms == -2468 +kt inc -725 if iox != -2732 +sd inc -586 if rz <= 730 +w dec 94 if xdl > -1682 +lp inc -793 if km > 2185 +cl inc -764 if j < 2348 +lp dec 656 if fxx != -1577 +f dec -892 if db > 319 +i inc -441 if k <= 1230 +db dec 935 if q == -49 +q dec -926 if xtz > -4094 +q inc 729 if fxx == -1572 +lp inc 115 if k != 1233 +j dec -252 if mxn == -3318 +w inc 695 if gi <= 891 +j dec -721 if gi < 899 +sd dec -132 if sd == 896 +cl inc 856 if icg == -1503 +giq inc -142 if k >= 1218 +iox inc -328 if db <= -617 +db inc -199 if wm >= -1981 +km dec -364 if j == 3066 +cl dec -659 if sd >= 891 +xtz inc -207 if giq == -1632 +cl inc 928 if i <= 2339 +giq inc -897 if km != 2544 +mxn inc -61 if xdl > -1679 +f inc 953 if lp >= 30 +f dec -450 if giq > -2535 +w dec -962 if kt >= 68 +gi inc 317 if km < 2556 +kt dec -271 if k >= 1231 +iox dec 238 if i <= 2352 +xtz inc -840 if ms <= -2467 +giq dec 905 if f >= -8097 +kt dec 484 if icg <= -1502 +lp dec 675 if km >= 2539 +ms inc 772 if j <= 3073 +ms dec 297 if q > 1604 +kt inc 465 if hey > 1701 +w inc 987 if kt > 50 +xtz dec 180 if q == 1606 +um dec -823 if gus != 2284 +hey inc -964 if um == 487 +kt inc 387 if cl > -4046 +cl dec -167 if gi == 1209 diff --git a/2017/d08/ex2/ex2.py b/2017/d08/ex2/ex2.py new file mode 100755 index 0000000..ed45696 --- /dev/null +++ b/2017/d08/ex2/ex2.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python + +import enum +import itertools +import operator +import sys +from collections import defaultdict +from typing import NamedTuple + + +class Operation(enum.StrEnum): + INC = "inc" + DEC = "dec" + + +class Comparator(enum.StrEnum): + GT = ">" + GE = ">=" + LT = "<" + LE = "<=" + EQ = "==" + NE = "!=" + + def __call__(self, lhs: int, rhs: int) -> bool: + return getattr(operator, self.name.lower())(lhs, rhs) + + +class Condition(NamedTuple): + target: str + comp: Comparator + value: int + + def eval(self, registers: dict[str, int]) -> bool: + return self.comp(registers[self.target], self.value) + + +class Instruction(NamedTuple): + target: str + op: Operation + amount: int + condition: Condition + + +def solve(input: str) -> int: + def parse_line(line: str) -> Instruction: + target, op, amount, _, comp_target, comp_op, comp_value = line.split() + return Instruction( + target, + Operation(op), + int(amount), + Condition(comp_target, Comparator(comp_op), int(comp_value)), + ) + + def parse(input: str) -> list[Instruction]: + return [parse_line(line) for line in input.splitlines()] + + program = parse(input) + regs: dict[str, int] = defaultdict(int) + max_reg = 0 + for instr in program: + if not instr.condition.eval(regs): + continue + regs[instr.target] += instr.amount * (1 if instr.op == Operation.INC else -1) + max_reg = max(itertools.chain(regs.values(), [max_reg])) + return max_reg + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d08/ex2/input b/2017/d08/ex2/input new file mode 100644 index 0000000..e1d8dc5 --- /dev/null +++ b/2017/d08/ex2/input @@ -0,0 +1,1000 @@ +sd dec 441 if k != 0 +lp dec 419 if mxn >= 7 +w inc -592 if icg >= -9 +a dec -29 if q <= 9 +kt dec 486 if ms != 8 +kt inc -841 if kt > -488 +rz inc -592 if m <= 1 +xtz dec 780 if lp < 9 +iox dec 804 if icg != 6 +lp inc 360 if i == 9 +f dec -570 if gi >= 7 +um inc 87 if q != 4 +kt dec -242 if rz != -595 +j inc -154 if db != 0 +giq dec 728 if iox > -811 +a dec -9 if xtz > -781 +lp inc -261 if ms > 2 +w inc -816 if hey > -1 +mxn inc 680 if ms >= -9 +q inc -777 if w < -1400 +wm dec -353 if q == -774 +q inc 414 if hey == 0 +xdl inc 488 if kt != -1075 +gus dec -136 if fxx != -7 +f dec 852 if hey >= 10 +j inc 531 if ms <= -9 +km dec 231 if xdl >= 487 +fxx dec 579 if iox == -804 +km dec 23 if kt != -1076 +fxx inc -845 if xtz != -773 +mxn dec 335 if fxx != -1432 +q dec 184 if f == 0 +wm dec -330 if f == 0 +iox dec 677 if mxn != 339 +mxn inc -429 if hey < 1 +rz dec 101 if hey == 8 +k inc 17 if db == 0 +gus inc -328 if iox == -1481 +a inc 657 if rz <= -584 +wm dec -365 if rz < -590 +m inc -710 if w < -1399 +kt inc -246 if wm != 698 +w dec 976 if fxx >= -1431 +giq inc 319 if hey >= -5 +iox inc -563 if xdl < 495 +xdl dec -349 if f >= -9 +sd inc -296 if q >= -555 +xdl inc 406 if cl >= -2 +f inc 966 if hey >= -6 +lp dec -838 if iox > -2054 +k dec -674 if q < -542 +i inc -23 if k < 692 +mxn inc -221 if sd != -302 +mxn inc -830 if mxn > -309 +km inc -283 if db > -7 +icg inc 365 if xdl > 1234 +q inc -23 if m < -702 +wm dec -507 if rz < -582 +j inc -501 if gi != -10 +um inc 274 if a > 689 +db inc 814 if xdl != 1250 +fxx dec -172 if db != 822 +wm dec 581 if kt <= -1323 +gi dec -715 if kt >= -1339 +f inc -209 if i >= -31 +q inc 933 if fxx > -1246 +mxn dec -227 if gi > 713 +fxx dec -112 if xdl <= 1252 +hey dec -998 if xtz >= -781 +lp dec -743 if ms <= 4 +icg dec -581 if fxx > -1149 +gus inc 725 if k != 698 +icg dec 156 if kt != -1339 +gus dec 961 if i > -32 +giq dec -992 if kt <= -1327 +m inc -477 if xdl >= 1240 +db dec -258 if gus <= -424 +wm inc -72 if gi > 713 +i dec 923 if lp == 1581 +m inc -221 if iox == -2044 +j inc 410 if m < -1402 +kt inc 838 if a == 685 +i dec 528 if gi < 712 +iox dec -823 if i >= -952 +a dec -705 if icg > 799 +gi dec -538 if db > 1079 +xdl inc -507 if q > -571 +rz inc 37 if km > -546 +fxx dec -718 if ms <= -2 +xdl inc -742 if cl < 4 +q dec 591 if wm > 542 +a dec 100 if db != 1072 +fxx dec -392 if giq >= 579 +j inc 991 if i >= -942 +m inc 311 if sd != -296 +icg inc -286 if db != 1075 +m inc 906 if rz == -555 +um inc 150 if hey == 993 +rz inc -637 if fxx < -746 +ms dec 779 if f >= 751 +gus inc 928 if j != -100 +rz dec 769 if sd < -292 +xdl inc -556 if gus <= 505 +rz inc -94 if j < -82 +mxn dec -763 if cl == 0 +xdl dec -693 if gus <= 502 +db inc -879 if kt <= -1339 +w dec 651 if hey > 991 +um dec -898 if giq == 583 +xdl dec 501 if hey > 998 +wm dec 746 if lp < 1587 +iox inc 915 if um > 1251 +a inc 573 if q >= -1165 +j dec -459 if m <= -512 +km dec -601 if xdl >= 131 +km dec 801 if f >= 756 +ms inc 318 if j < -91 +hey dec -768 if i <= -945 +f inc -982 if xdl < 134 +i inc 210 if iox < -305 +icg inc -838 if xtz >= -784 +mxn dec 901 if f == -225 +m inc 601 if i <= -733 +iox inc -863 if cl >= -5 +ms dec -474 if db >= 1069 +xtz dec 708 if um >= 1253 +lp dec 0 if xdl < 130 +k inc -476 if sd <= -291 +um dec 475 if hey != 1756 +q inc 178 if k <= 215 +km dec 244 if a >= 1265 +j dec 485 if k < 209 +icg inc 429 if um >= 784 +ms inc -881 if kt > -1341 +cl inc -75 if iox < -1176 +icg dec -72 if gi == 715 +i inc 714 if lp >= 1572 +rz inc -881 if j >= -96 +ms dec -453 if i <= -29 +giq dec -500 if sd != -305 +sd dec -78 if lp != 1572 +a inc 313 if db == 1072 +w dec 97 if q == -978 +gus dec -203 if f != -225 +xdl dec -894 if j < -88 +q inc 71 if k != 213 +um dec -242 if wm > -207 +kt dec -997 if sd != -215 +cl dec 643 if lp != 1587 +hey inc -564 if fxx == -748 +ms dec 639 if m != 95 +ms dec 131 if w <= -3026 +xdl dec 241 if w != -3032 +mxn inc 404 if i == -28 +giq dec 111 if xdl >= 789 +wm inc 93 if j <= -88 +xdl inc 318 if um >= 1026 +gi dec -766 if a < 1587 +mxn inc 212 if w > -3040 +f dec -601 if giq == 1084 +m dec 135 if kt >= -334 +a dec -471 if rz >= -2940 +cl dec -379 if giq != 1080 +w inc -834 if db < 1077 +km inc -515 if f >= -226 +i inc 133 if a > 2043 +gus dec -368 if gi >= 1476 +db inc -629 if fxx > -758 +km inc -807 if a != 2052 +j dec -129 if cl > -267 +gi dec -443 if m <= -35 +kt dec -355 if sd != -218 +mxn inc -734 if xtz == -1488 +icg inc 468 if m == -34 +m inc 896 if iox <= -1168 +xdl inc -763 if j < 39 +db inc -51 if xdl >= 337 +sd dec 688 if icg >= 167 +w inc 307 if gi >= 1924 +ms inc 190 if xdl >= 331 +k inc 869 if fxx >= -750 +mxn inc -772 if ms >= -1771 +f inc -303 if q == -922 +kt dec 99 if ms < -1757 +j dec -733 if sd < -904 +wm inc -808 if gi <= 1933 +q dec -671 if i != 112 +cl inc -790 if xdl >= 330 +icg inc -617 if ms > -1774 +w inc 529 if xdl > 333 +w inc -413 if wm < -907 +db inc 780 if xdl > 330 +xtz inc -535 if um <= 1025 +mxn inc 415 if db > 1165 +xtz inc 170 if db != 1169 +k dec -365 if k <= 1091 +giq inc -695 if q < -233 +db inc -991 if a > 2057 +k dec 543 if fxx == -748 +kt inc 673 if hey <= 1209 +gi inc -23 if mxn <= -1917 +m inc -567 if sd > -916 +m dec -269 if wm == -912 +kt dec 601 if db != 1180 +km dec -781 if kt == -351 +rz inc -296 if wm != -912 +um inc 4 if gus != 874 +um inc -876 if q < -231 +gi dec -744 if xtz < -1320 +j inc -101 if q <= -236 +kt inc -959 if xtz == -1318 +icg dec 9 if m == 562 +kt inc -412 if gus > 867 +fxx dec 394 if gus > 867 +fxx dec 105 if xtz == -1318 +a dec -533 if giq != 396 +km dec -864 if um != 147 +mxn dec -240 if i != 114 +m inc -830 if km != -628 +iox inc 160 if mxn != -1690 +k inc 966 if j > 679 +xtz inc 482 if cl <= -1050 +f inc -430 if fxx < -1253 +sd inc 138 if sd > -915 +giq dec 736 if xtz == -836 +f dec 780 if ms >= -1767 +wm inc -362 if kt <= -1731 +um dec -195 if xtz >= -838 +um dec 888 if i >= 107 +i dec 754 if gus != 868 +hey inc -518 if kt <= -1726 +iox inc 843 if hey > 676 +ms dec -46 if a < 2587 +mxn inc 288 if gus >= 864 +gus inc -643 if mxn < -1393 +um inc 457 if rz >= -2936 +um dec -976 if xtz == -836 +m dec 783 if fxx > -1254 +gi inc -63 if m <= -1043 +lp dec -244 if cl > -1062 +sd inc 908 if km >= -637 +km inc -725 if kt <= -1731 +j dec -20 if k == 906 +wm dec -596 if kt >= -1740 +xtz dec 133 if km <= -1355 +db inc -792 if icg != -466 +db dec -851 if lp != 1835 +cl dec 707 if f > -1012 +iox dec 246 if iox >= -170 +um dec 719 if ms == -1720 +xtz dec -216 if icg != -464 +km dec 776 if w <= -3446 +j dec 388 if xdl != 339 +j dec 776 if kt == -1732 +mxn dec 615 if cl == -1761 +i inc 579 if gus < 226 +i inc -172 if xdl < 341 +ms inc 720 if lp < 1825 +ms dec -590 if hey < 690 +iox dec -781 if gus < 231 +mxn inc -145 if a >= 2577 +q inc -885 if f <= -1013 +xtz inc -148 if a != 2593 +km inc -586 if fxx < -1239 +um inc -988 if kt < -1724 +k dec -852 if xtz != -891 +j inc -365 if m != -1050 +gus inc -679 if cl != -1760 +um inc -342 if icg != -455 +hey inc -807 if mxn == -2157 +w dec 759 if w != -3439 +ms inc -328 if gus >= -455 +gi inc -179 if iox == 369 +ms inc 930 if giq != -345 +fxx inc 959 if giq == -338 +km dec -605 if db <= 1226 +um dec 954 if gus == -460 +f inc -325 if giq < -341 +cl dec -95 if cl <= -1752 +hey dec 825 if sd < 141 +db dec -608 if sd >= 139 +giq inc 141 if lp > 1821 +a dec 824 if km <= -2715 +k inc 982 if db < 1840 +k dec -6 if giq != -213 +xtz dec -59 if kt <= -1731 +fxx dec -589 if a == 1761 +m inc 874 if rz == -2936 +m dec 241 if xtz == -838 +gus dec 512 if w > -4208 +mxn inc 651 if gus == -973 +lp inc -553 if hey == -948 +giq inc 252 if lp > 1263 +km dec -360 if a == 1761 +giq inc -504 if a != 1770 +kt inc -815 if um <= -1146 +lp dec 343 if gi >= 1652 +w dec 6 if lp <= 937 +gus dec 806 if ms > -534 +q dec 262 if f > -1335 +rz dec -959 if sd <= 141 +w dec -958 if mxn == -2157 +gus inc 530 if xdl > 333 +lp dec -30 if hey > -949 +lp dec 345 if q != -509 +i inc 509 if km > -2363 +rz inc -576 if um == -1155 +km inc 622 if iox > 367 +k dec -833 if ms != -527 +um dec 586 if i == 1027 +q inc -724 if rz == -2553 +cl dec -372 if f <= -1330 +cl dec -944 if j > -442 +j dec 674 if hey != -958 +q inc -830 if j != -1135 +cl dec 594 if um < -1749 +gi dec -991 if q > -2066 +kt dec -528 if giq >= -465 +iox inc -291 if a > 1759 +q dec -395 if f != -1330 +um dec 244 if cl <= -1285 +a dec 961 if um < -1988 +iox inc -321 if w == -3253 +lp dec -307 if iox < -241 +m dec -188 if mxn == -2157 +um dec -481 if icg <= -450 +gi dec 303 if cl < -1294 +mxn dec -791 if wm != -684 +kt dec -368 if sd != 149 +mxn dec -783 if sd < 141 +gi dec 864 if m == 11 +gus dec -17 if w == -3253 +w dec 499 if giq > -464 +xtz inc 659 if q > -2067 +wm inc 572 if kt != -1654 +xtz dec -287 if xtz != -191 +sd inc 763 if kt <= -1658 +xdl inc 830 if gus == -1225 +icg inc 508 if km == -1737 +gi inc 756 if rz == -2560 +xtz inc 983 if km <= -1734 +w inc 717 if xtz > 1085 +q dec 52 if w < -3030 +xdl inc -373 if f <= -1321 +w dec -544 if icg > 56 +gus inc -120 if km > -1741 +mxn dec -16 if hey <= -947 +wm dec 591 if mxn != -576 +gus inc -355 if kt <= -1644 +xdl inc 898 if fxx <= -650 +f dec 71 if m != 11 +xtz dec 902 if fxx > -663 +kt dec -576 if db != 1831 +rz inc 465 if fxx < -650 +a dec 342 if fxx >= -666 +k inc 293 if cl != -1286 +iox dec 791 if db == 1839 +a dec 125 if kt != -1071 +gi dec 852 if xtz == 185 +f inc 982 if sd == 133 +mxn dec -426 if sd <= 146 +gus inc -100 if xdl <= 1696 +um inc 872 if xtz != 182 +db dec -10 if db < 1843 +q inc 209 if lp >= 920 +k inc -338 if hey >= -950 +m inc -601 if wm < -695 +w dec 725 if xdl >= 1694 +wm inc -913 if q >= -1901 +fxx inc 986 if sd <= 144 +a dec 329 if m == -590 +xtz inc 80 if q < -1893 +gus inc 234 if fxx == 328 +ms inc 110 if giq < -451 +gus dec -969 if sd != 134 +um dec 806 if ms <= -417 +gus dec -458 if icg < 53 +cl dec -272 if fxx > 326 +k inc -212 if sd != 143 +xtz dec 109 if fxx <= 324 +mxn dec 302 if m >= -599 +lp inc -240 if giq <= -451 +m dec -58 if wm != -1618 +xtz dec -178 if gus == -139 +giq inc -132 if xdl != 1694 +w inc -149 if a >= 962 +f inc -512 if lp <= 690 +lp dec -84 if sd < 147 +cl inc 657 if db <= 1851 +m inc -180 if hey == -948 +sd inc -711 if a < 974 +ms inc -905 if j != -1134 +f inc -852 if mxn >= -451 +lp inc 818 if i == 1027 +w dec -407 if wm <= -1610 +m dec -298 if gi > 926 +gi inc -17 if sd != -564 +ms inc 891 if kt != -1075 +xdl inc -498 if fxx != 337 +kt dec 153 if lp == 1575 +db inc -565 if f < -2690 +lp inc 812 if um <= -1438 +fxx inc 151 if um != -1429 +fxx dec 484 if km < -1732 +q inc 130 if f == -2690 +lp dec 926 if icg != 58 +giq dec -378 if k >= 3321 +cl dec 136 if ms == -1323 +xdl dec -889 if w != -3502 +hey dec 540 if hey == -948 +a dec 796 if xdl >= 1189 +xtz dec 197 if kt < -1066 +i dec 328 if db == 1284 +giq dec -697 if hey > -1482 +f inc -985 if icg != 51 +gi inc 128 if f > -3689 +j dec 638 if i != 699 +mxn inc 300 if icg < 55 +icg inc -846 if q <= -1900 +icg dec -845 if giq > -86 +cl dec 502 if hey < -1482 +db inc -18 if hey != -1483 +giq inc -398 if wm < -1615 +xtz inc -724 if gus > -146 +um inc -761 if gus >= -137 +gi dec 423 if mxn <= -146 +xtz dec -632 if ms >= -1326 +gi dec 990 if i == 693 +xtz dec 292 if i == 699 +q inc 881 if xtz >= -143 +xdl dec -25 if a <= 175 +f dec -599 if iox >= -1036 +giq dec -502 if gus == -139 +xdl dec 235 if gus >= -139 +q inc 704 if wm <= -1610 +ms inc 693 if i == 699 +k inc 407 if ms != -627 +f dec 107 if iox <= -1029 +xtz inc -328 if w != -3502 +j dec -474 if xdl < 994 +gus dec 82 if fxx != -12 +db dec -913 if xtz >= -143 +iox dec -932 if gus != -230 +giq inc -74 if q > -316 +ms inc -711 if gi != 1039 +w dec -29 if q >= -315 +um inc -851 if xtz == -141 +f inc -816 if ms <= -1348 +hey inc 813 if lp > 1468 +sd dec 483 if icg != 48 +w dec -199 if db <= 2181 +q inc -846 if sd != -572 +db inc -134 if k <= 3732 +um dec -185 if mxn > -145 +rz inc 559 if a < 174 +cl inc 650 if f != -3190 +gi inc 785 if cl >= -343 +w inc -227 if lp >= 1468 +gus inc -437 if wm < -1608 +kt inc -301 if w < -3499 +k dec -873 if km < -1736 +xdl dec -262 if q < -1155 +f dec 325 if mxn >= -149 +wm inc 523 if km < -1736 +gus dec -643 if db <= 2053 +gus dec 998 if iox > -95 +icg inc 774 if q < -1160 +k inc 789 if a > 159 +fxx dec 447 if xtz <= -133 +m inc -730 if rz <= -1526 +mxn dec -825 if cl > -346 +xtz inc 846 if sd > -576 +mxn inc 128 if cl < -352 +cl dec 99 if xtz <= 704 +lp dec -537 if ms >= -1341 +giq dec 784 if w == -3501 +iox inc 410 if giq <= -437 +f dec 314 if iox <= 317 +kt inc 520 if a == 169 +wm inc -419 if km >= -1740 +icg dec 900 if fxx != -450 +hey dec 564 if hey <= -670 +um inc 653 if lp < 2016 +hey dec 835 if fxx <= -447 +giq dec 542 if giq == -433 +gus dec 320 if cl > -354 +icg inc 75 if i > 695 +iox inc -949 if j <= -649 +q inc 0 if ms == -1341 +um dec 180 if rz != -1538 +i inc 534 if rz >= -1536 +i inc -316 if fxx == -452 +rz dec 225 if icg <= 2 +gus inc -416 if km != -1727 +icg inc -325 if m >= -1150 +rz dec 892 if gus < -742 +k inc -832 if j > -657 +wm inc -10 if gus <= -752 +f dec 179 if rz < -2644 +q inc 817 if kt > -859 +fxx inc 501 if xtz < 712 +m inc 111 if kt < -862 +ms dec -896 if gus != -749 +kt dec -925 if kt >= -862 +fxx inc -713 if cl <= -355 +xdl dec -120 if a == 172 +a dec -757 if hey != -2073 +gus inc 127 if mxn != -12 +xdl inc -627 if f == -3995 +kt dec 832 if lp < 2004 +w dec 208 if kt > 61 +kt dec 378 if lp >= 1998 +cl dec -371 if xdl > 1249 +f dec 708 if i < 927 +db dec 602 if ms > -443 +cl dec 247 if f > -4707 +um dec -394 if gi != 1040 +j dec 190 if giq >= -440 +gi inc 560 if q == -347 +xdl inc -601 if gus >= -630 +k dec 934 if iox == -641 +m inc -672 if icg >= -334 +w dec 104 if xdl != 647 +lp dec 36 if icg >= -329 +mxn dec 768 if m >= -1821 +f dec 555 if k == 3625 +w dec 440 if q >= -353 +lp dec -83 if kt != -316 +hey dec -168 if db != 2042 +giq dec 460 if xtz == 708 +fxx dec 446 if icg <= -325 +icg dec -22 if xtz != 717 +ms dec 920 if j != -841 +hey inc 213 if db < 2053 +mxn dec 862 if w < -4150 +rz dec 873 if xdl <= 656 +gi inc -584 if lp > 2047 +kt inc -29 if um <= -385 +m inc -883 if xtz < 715 +j inc 850 if iox == -641 +xdl dec 738 if w > -4154 +icg dec -851 if kt <= -329 +db inc -437 if ms > -449 +kt inc 280 if xtz > 702 +iox dec 924 if giq <= -899 +m dec 453 if cl < -344 +fxx inc -543 if i > 914 +rz inc 402 if f > -5269 +iox dec -260 if giq >= -900 +km dec -971 if sd >= -578 +wm inc 193 if k == 3630 +xdl dec -416 if a != 932 +lp inc 213 if icg == 545 +um inc 864 if wm <= -1516 +lp dec 343 if fxx <= -943 +rz inc 657 if kt > -50 +kt dec -253 if xdl <= 328 +km inc 256 if mxn > -781 +hey inc 856 if k == 3625 +gus inc 266 if f < -5264 +rz dec -139 if m <= -3151 +hey dec -669 if db == 1603 +gi inc -452 if ms == -445 +kt inc 123 if mxn == -783 +f inc -656 if sd > -562 +m inc -479 if i > 915 +um inc -288 if sd == -571 +giq dec -68 if gi == 9 +fxx dec -867 if fxx != -940 +um inc 80 if m > -3636 +i dec 980 if j < 9 +lp inc -932 if km < -764 +cl inc 387 if mxn != -788 +wm dec -492 if km != -766 +km inc 571 if m > -3634 +kt inc 903 if q >= -340 +wm inc 852 if k < 3616 +um dec -210 if m < -3629 +j inc -136 if m < -3623 +j dec -575 if i != 908 +sd inc 762 if xdl == 325 +gi inc -933 if kt != 314 +giq inc 272 if fxx < -939 +um inc -279 if iox <= -386 +xtz dec 303 if f < -5258 +xtz dec 344 if iox != -378 +giq dec -384 if f < -5264 +f inc -698 if mxn <= -778 +rz inc -185 if q <= -342 +um dec 272 if db <= 1613 +rz inc -650 if q <= -347 +xtz dec -621 if q <= -340 +kt inc 497 if sd < 200 +gus dec -786 if km < -203 +um dec 584 if a != 926 +hey dec 467 if xdl <= 318 +ms inc -975 if j == 448 +rz inc 763 if w <= -4144 +cl dec 923 if i >= 915 +km inc -294 if fxx >= -942 +fxx dec 218 if ms != -1420 +q inc 671 if gus < -350 +xdl dec 652 if i >= 913 +xtz dec -657 if gus > -367 +km dec 316 if j != 457 +wm dec 664 if fxx <= -932 +iox dec 463 if gus != -359 +hey inc -254 if fxx <= -940 +cl inc -684 if q > 317 +rz dec -287 if xtz < 1348 +lp dec 315 if lp != 1340 +hey dec -685 if q >= 325 +kt dec -360 if icg <= 553 +a inc 834 if um >= -646 +m inc -91 if sd < 183 +a dec 37 if k != 3617 +a inc -306 if sd != 201 +k dec 822 if q <= 327 +iox inc -885 if iox >= -850 +kt inc -835 if rz == -2113 +cl dec -99 if a < 586 +cl dec 635 if w != -4141 +kt inc -938 if giq == -173 +sd dec 599 if iox != -1720 +ms dec -484 if j != 448 +wm inc 669 if fxx == -945 +iox inc -633 if sd <= -402 +i dec -774 if f >= -5963 +f inc -783 if um < -646 +km inc 6 if xtz > 1333 +gus inc -986 if a == 583 +iox inc -233 if um <= -651 +xtz dec -857 if w != -4149 +wm inc -791 if a < 584 +j dec -41 if cl <= -2111 +xdl inc 77 if rz > -2123 +xdl inc -983 if ms != -1416 +fxx dec 247 if sd == -408 +k inc -362 if k > 2804 +xdl inc 13 if iox >= -2595 +db inc 473 if um <= -654 +w inc 307 if w > -4152 +xdl dec -237 if a <= 584 +wm inc 366 if giq == -173 +j dec 111 if i != 917 +k dec 790 if w != -3848 +sd dec -841 if wm == -2595 +i inc -538 if xdl == -989 +f dec 583 if rz > -2114 +xtz inc -886 if kt <= -590 +ms inc 151 if mxn == -783 +q dec -585 if fxx == -1184 +j dec -102 if km == -799 +xdl dec 504 if sd == 433 +fxx inc -208 if db > 2078 +m dec 471 if q >= 323 +icg inc -296 if i <= 919 +rz dec -601 if mxn > -791 +gus dec -870 if gi > -925 +um dec -171 if gi >= -927 +f inc 969 if gi != -932 +j dec 78 if xdl <= -1481 +m dec 115 if lp != 1019 +km inc 911 if ms != -1267 +gi inc 798 if i <= 920 +iox dec -780 if km < 122 +cl dec 670 if xdl > -1492 +gus inc 231 if kt != -602 +giq dec 584 if k <= 2021 +j dec -142 if k != 2020 +a inc 905 if xdl == -1487 +giq inc -1 if k > 2012 +j inc -123 if sd != 433 +a dec -615 if ms >= -1270 +q inc 848 if ms == -1269 +kt dec -69 if w < -3838 +fxx dec -676 if i > 926 +iox dec 980 if gi > -131 +fxx dec -716 if giq != -758 +fxx dec 937 if sd > 433 +sd inc 414 if i != 914 +cl inc -625 if giq <= -757 +gus dec 306 if fxx != -1390 +q inc 228 if lp != 1010 +ms inc 340 if gus == -549 +cl inc -185 if xtz == 461 +m dec -550 if f == -6363 +fxx dec 73 if lp >= 1019 +ms inc 651 if w != -3842 +giq inc 155 if xtz > 450 +wm dec -41 if icg < 253 +wm inc -535 if k != 2006 +j dec 181 if a >= 2094 +cl inc -70 if km <= 114 +i dec -910 if db < 2085 +mxn dec -616 if giq != -610 +ms inc 688 if lp <= 1019 +kt inc 264 if f == -6357 +gi inc -200 if xdl >= -1496 +rz dec -610 if km < 121 +w dec 82 if wm < -3085 +giq dec 136 if um != -483 +rz inc 804 if km < 121 +i dec 197 if um < -475 +cl dec 656 if ms == -241 +m inc 656 if w <= -3921 +lp inc -497 if gus > -557 +xtz inc 47 if w > -3926 +hey dec -130 if km <= 112 +gus inc 800 if gus > -555 +icg dec 229 if wm == -3089 +kt dec -746 if gi != -333 +xdl dec -365 if m == -2896 +gi dec 286 if j > 430 +wm inc 858 if q > 1393 +mxn dec 440 if iox >= -2798 +sd dec 651 if hey < -282 +um inc 135 if kt <= 220 +hey dec -639 if ms != -251 +lp dec 558 if q != 1393 +kt dec -264 if kt != 217 +sd inc -523 if k >= 2006 +k dec 938 if w <= -3917 +mxn inc -120 if um == -350 +giq inc -223 if icg > 16 +m dec 171 if xtz < 504 +um dec 850 if xdl == -1122 +iox inc 955 if km >= 118 +gi dec -910 if icg == 20 +db inc -39 if xdl > -1116 +mxn dec 481 if xtz > 491 +um dec 766 if iox >= -2798 +sd inc -103 if um != -1967 +q inc -673 if q <= 1403 +hey dec -471 if xdl == -1122 +j inc -818 if sd <= 212 +fxx dec -749 if ms > -238 +w inc 407 if xdl >= -1123 +mxn dec 138 if xtz >= 507 +rz dec 257 if db != 2071 +xdl dec 116 if lp > -38 +mxn inc -162 if xtz <= 495 +gi dec 669 if i < 1633 +gi dec 187 if ms == -251 +mxn dec 893 if xdl != -1229 +k inc 616 if i <= 1633 +xtz dec 881 if a <= 2105 +gus inc 732 if i != 1627 +kt inc 749 if a == 2103 +f inc -289 if rz <= -346 +um inc 919 if f < -6644 +wm inc -646 if m != -3067 +hey inc 1 if a != 2108 +xdl dec 725 if ms <= -238 +j dec -789 if k != 1695 +hey inc 317 if w < -3515 +kt inc 965 if gi >= -379 +wm inc 137 if a != 2101 +sd dec -783 if hey <= 1160 +gus dec -349 if um <= -1046 +ms inc -843 if sd == 1004 +k inc -298 if f >= -6661 +gus dec -15 if gi <= -365 +gus dec -411 if wm <= -2092 +cl inc 25 if icg != 30 +km inc 634 if m == -3067 +kt dec 856 if gus < 1766 +xdl inc -808 if fxx <= -1461 +xdl dec -883 if rz >= -358 +gus dec -311 if j > 1214 +sd dec 349 if xdl == -1888 +mxn dec -309 if j <= 1225 +giq dec 181 if ms >= -1087 +rz dec -951 if iox >= -2788 +k dec -824 if lp != -42 +fxx dec -984 if km <= 746 +mxn dec 333 if gus <= 2067 +fxx dec 742 if db >= 2078 +kt inc -367 if mxn > -1793 +i dec -853 if lp < -27 +kt dec -491 if wm < -2085 +ms inc 233 if wm != -2097 +i inc 729 if rz != -363 +ms dec 246 if km < 737 +xtz dec 455 if cl > -4106 +icg inc -755 if kt <= 1206 +wm dec -828 if mxn <= -1798 +giq inc 397 if xdl != -1888 +mxn dec 861 if cl != -4101 +fxx dec 406 if f <= -6653 +icg dec -101 if rz == -355 +gus dec -147 if cl <= -4101 +cl dec 717 if q > 728 +db dec -276 if m < -3061 +k dec -3 if sd > 651 +lp dec -357 if xtz < -827 +f dec -380 if lp <= 322 +cl inc -740 if gi > -368 +sd inc 744 if fxx >= -1221 +iox inc 39 if mxn != -2661 +fxx inc -569 if ms < -841 +j dec 19 if gus == 2216 +sd inc 826 if f < -6267 +cl dec -377 if f != -6272 +fxx dec 318 if icg >= -638 +db dec 638 if xdl == -1883 +q dec -923 if um >= -1055 +a inc 22 if q < 1656 +rz inc 129 if sd <= 1484 +db dec 408 if kt == 1199 +q inc -782 if iox <= -2750 +w dec 232 if fxx >= -2119 +gi dec -887 if km >= 738 +hey dec 35 if icg < -624 +xdl inc -379 if um > -1052 +hey inc -596 if icg != -638 +hey dec -945 if um >= -1047 +xdl dec -202 if k > 2219 +rz dec 76 if f < -6269 +xdl inc 289 if q <= 876 +rz inc 308 if kt >= 1190 +a inc -190 if lp != 317 +kt inc -195 if db >= 1944 +f dec 526 if q < 878 +wm dec -305 if xdl > -1777 +xdl dec -99 if k != 2215 +fxx inc 953 if wm == -1789 +hey dec 625 if rz == -1 +mxn dec 319 if mxn < -2644 +m dec 611 if f == -6798 +fxx dec -83 if icg < -639 +gi dec 567 if cl > -4830 +ms inc -95 if mxn < -2966 +um inc 862 if gus != 2215 +hey dec -341 if icg == -634 +iox dec 829 if f <= -6801 +giq dec 376 if kt == 1012 +lp dec -990 if um < -183 +iox inc -868 if kt >= 999 +iox dec -670 if f <= -6796 +fxx inc 895 if gus < 2209 +k inc -916 if q <= 873 +rz dec 646 if w >= -3747 +kt inc -807 if j == 1203 +fxx dec 568 if gi >= -43 +giq dec -966 if q < 877 +rz inc 250 if giq < -174 +iox inc -19 if i == 3212 +f inc -404 if k <= 1304 +gi dec -481 if kt >= 195 +giq dec -323 if gi < 424 +lp inc 873 if km >= 752 +icg dec 953 if um <= -182 +q dec 246 if db != 1942 +rz inc -987 if lp > 1307 +hey inc -728 if xtz <= -837 +fxx dec 743 if xtz != -843 +km dec 393 if km <= 740 +rz inc 635 if icg < -1578 +k dec -136 if km <= 742 +gus inc 715 if giq >= -185 +lp dec 782 if km >= 741 +ms dec -140 if sd != 1479 +iox inc -992 if sd != 1488 +wm inc 8 if ms >= -802 +giq dec 134 if xtz <= -830 +mxn dec 877 if xtz > -832 +lp inc -260 if ms > -815 +xdl inc 170 if w > -3742 +q inc -674 if gi != 434 +giq inc -760 if wm <= -1788 +km dec -96 if hey != 1802 +j inc 662 if fxx >= -1904 +gus dec 305 if a <= 1943 +db inc 881 if icg > -1583 +um inc -137 if rz >= -96 +mxn dec -755 if lp == 269 +lp inc -220 if hey > 1799 +cl inc 652 if xdl >= -1678 +gus inc -473 if a >= 1935 +k dec 80 if i != 3216 +gus inc 138 if xtz != -831 +mxn inc 654 if giq >= -1075 +xtz inc -677 if um >= -323 +cl inc -557 if hey >= 1807 +m dec 488 if lp == 49 +k inc -214 if q != -49 +k inc -584 if cl != -4727 +icg inc -423 if ms == -806 +gi dec -323 if fxx >= -1909 +ms dec -61 if giq != -1062 +wm dec 259 if q < -45 +f inc -634 if gi == 753 +iox inc 985 if gi > 750 +km dec -821 if db < 1950 +f inc 105 if gi < 763 +j inc -36 if q <= -44 +ms inc -244 if giq < -1063 +i dec 423 if cl == -4727 +kt dec 77 if sd == 1481 +db inc -779 if gi == 753 +gi dec -525 if iox <= -2985 +f dec 378 if rz != -86 +mxn dec 479 if km < 1671 +f inc -812 if kt > 118 +db inc -121 if kt < 128 +w inc 957 if mxn == -2042 +db inc -97 if mxn != -2052 +km inc 521 if q < -46 +a dec -669 if i >= 2783 +icg inc 47 if km > 2176 +gi inc 459 if gi != 760 +mxn dec 810 if hey >= 1803 +ms inc -896 if xtz != -1522 +fxx inc 331 if cl == -4727 +hey dec 104 if sd < 1482 +f dec -684 if f < -8923 +xtz dec 893 if giq > -1080 +um dec -749 if db < 962 +rz inc 823 if sd <= 1484 +a inc 4 if w > -2793 +cl dec -559 if a > 2614 +iox dec 116 if db <= 956 +cl dec -384 if gus == 2291 +lp inc 522 if kt > 118 +icg dec -250 if km <= 2186 +j inc -144 if mxn > -2843 +kt dec -682 if ms > -1891 +gi inc -320 if sd < 1489 +iox dec -955 if kt != 802 +mxn dec 949 if lp > 570 +mxn dec -84 if wm > -2050 +xtz dec 762 if kt == 802 +wm dec -74 if um != 422 +m inc -948 if gi >= 889 +w inc 90 if w != -2792 +j dec -516 if fxx <= -1568 +cl inc -457 if k <= 1232 +ms dec -288 if w != -2792 +ms inc 57 if db >= 946 +a dec -481 if w >= -2800 +icg dec -210 if ms != -1827 +giq inc 323 if a != 3098 +ms inc -646 if iox <= -3090 +mxn dec -390 if lp > 565 +db dec 634 if hey >= 1701 +iox inc 357 if w >= -2799 +hey inc 434 if icg != -1503 +um dec 763 if xtz == -3168 +giq dec 742 if m != -5115 +giq inc -645 if db < 318 +f inc -832 if ms == -2474 +xtz dec 921 if w > -2799 +f dec -259 if xtz <= -4086 +mxn dec -689 if ms == -2468 +kt inc -725 if iox != -2732 +sd inc -586 if rz <= 730 +w dec 94 if xdl > -1682 +lp inc -793 if km > 2185 +cl inc -764 if j < 2348 +lp dec 656 if fxx != -1577 +f dec -892 if db > 319 +i inc -441 if k <= 1230 +db dec 935 if q == -49 +q dec -926 if xtz > -4094 +q inc 729 if fxx == -1572 +lp inc 115 if k != 1233 +j dec -252 if mxn == -3318 +w inc 695 if gi <= 891 +j dec -721 if gi < 899 +sd dec -132 if sd == 896 +cl inc 856 if icg == -1503 +giq inc -142 if k >= 1218 +iox inc -328 if db <= -617 +db inc -199 if wm >= -1981 +km dec -364 if j == 3066 +cl dec -659 if sd >= 891 +xtz inc -207 if giq == -1632 +cl inc 928 if i <= 2339 +giq inc -897 if km != 2544 +mxn inc -61 if xdl > -1679 +f inc 953 if lp >= 30 +f dec -450 if giq > -2535 +w dec -962 if kt >= 68 +gi inc 317 if km < 2556 +kt dec -271 if k >= 1231 +iox dec 238 if i <= 2352 +xtz inc -840 if ms <= -2467 +giq dec 905 if f >= -8097 +kt dec 484 if icg <= -1502 +lp dec 675 if km >= 2539 +ms inc 772 if j <= 3073 +ms dec 297 if q > 1604 +kt inc 465 if hey > 1701 +w inc 987 if kt > 50 +xtz dec 180 if q == 1606 +um dec -823 if gus != 2284 +hey inc -964 if um == 487 +kt inc 387 if cl > -4046 +cl dec -167 if gi == 1209 diff --git a/2017/d09/ex1/ex1.py b/2017/d09/ex1/ex1.py new file mode 100755 index 0000000..3f71671 --- /dev/null +++ b/2017/d09/ex1/ex1.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python + +import sys +from typing import NamedTuple + + +class Group(NamedTuple): + children: list["Group"] + + +def solve(input: str) -> int: + def parse_group(input: str) -> tuple[Group, str]: + garbage = False + cancel = False + stack: list[Group] = [] + for i, c in enumerate(input): + if cancel: + assert garbage # Sanity check + cancel = False + continue + if garbage: + if c == "!": + cancel = True + elif c == ">": + garbage = False + continue + if c == "<": + garbage = True + continue + if c == "{": + stack.append(Group([])) + continue + if c == "}": + top = stack.pop() + if stack: + stack[-1].children.append(top) + continue + return top, input[i + 1 :] + assert False # Sanity check + + def parse(input: str) -> Group: + group, input = parse_group(input) + assert not input # Sanity check + return group + + def compute_score(group: Group) -> int: + def helper(group: Group, depth: int) -> int: + return depth + sum(helper(child, depth + 1) for child in group.children) + + return helper(group, 1) + + groups = parse(input.strip()) + return compute_score(groups) + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d09/ex1/input b/2017/d09/ex1/input new file mode 100644 index 0000000..686a0e1 --- /dev/null +++ b/2017/d09/ex1/input @@ -0,0 +1 @@ +{{{{{{},{}},{{!>},<>,{}},{},<}!>!>,<<,'u<,"a!!uu!>,<>,{}},{{}",,!!,u!>},o>},{{<{!!<,a''>,u!>eeu,e!>,}},{,<,,"i!>,,o!a!!!!!>'!>},!!!>},<>}}}},{{{,}},{,,<>},{{{!>,<>},,<{o}>},{,,,<'ei!>},,,{,},},<}u!{>,<{!!!><<>}}}},{{},{!}"}{,i!>,<'ue!,e>,{<'"!!!>oa,>}},{{},<"u!!'!!!!{au!>,,}}}},{{{{{,{<}{'iu>}}},{{},{{{}},{{{{},,<,uu!>"!!!>a!u>},<{a!!''!!!>,<{',{"!!!><'<{,>},{}},{!>,<<{!a!>>,,,},<>}}},{{<'a'>,{<}!>,'},}!>!'!>},<>,{<,{!>!!!!!>},e!>,,<"!a,!!!!!>!!e{<,!>,<>}}},{},{}}},{},{{{!!{!"!}!!eu{!>!!'">},}}},{{{{}},{{},!!!>},<},!!o!!!!!>!>a!!{>},{{},},,},<>}}},{{{{!{}!>},,},{ou!!!<"{{!!!>,,!!}">}},{{,o!>!>,},<>}},{!{!!'>,},,!>},!!!!!!>}}},{{{{,},<",e{>}},{}},{{},{<'',{{o!!!>>}}},{{<,{{,!u!!e!!}u!!!>ia!!!>u!!!>>}},{{},<},{,}ei,{eo>}}}},{{{,{},,!>,!>!!!!!>!>,}},{},{}},{{{{{!>,},<<{!!!>io!>},"!!!<}>},{,<,<}!>,{!!'{!>,<,!},{<{o!!"<,!!"!>,a!'a>,{,"!!!>,!>},o!>},!'"{>}}},{{{{""!!!!!!,}!>,!!!!!}!!ua!{!>",>},{"!>,,<,{!'">}}}},{}},{{{{,<>}},<{e<'"{!'!!!!!!!>!!!>>},{},{{<<,!>},,},}},{{},{{},{!!{,!>'!>{}'!u!!>,{{{,{{},},},,<{!!!>!>>}}},,<>}}},{{<">},{,!}!!o!>},}}},{{ao{}ae!!{!!>}}},{{},<}!>,},<>},{!>"'ao!>,a!,!!}aa!!!>,<<}<>,},},ua!!!!!>}u!>,<,!!!<>},{,<"},!!!>ue{!",!>,<>,{!>,<}"i!>!>,<>}}},{{{<,a!!!!!!!!!!'!,!>!!!>{!eu!!!>!e{>,},,<>}},{},,<}o!>},<{!!!>!!"e!>>}}},{{{{{{},eua{i>}},{,}i'{a}>}},{{{},{},<{ea!!!>}!>},<>}},{{<,>},{}}}}},{{{{<,!!}!>}}}!>,<<}>}},{{{{!!!!!!!>!>}!>,,}},{{<}>},{}},{{{<>},},},!!{!!!o!!!>{{!}"!">},{{<>},{}}}},{{{},{{<'!!,!>,>,{<"!!u!!,<,ou,!!{!!!>!!{!ua{,{!!>}}},{{{,,},!!{{!!}"!!{e!>,,<'o>}},{}}}}},{{auu>}},{{{},{{!>,o!!u!>},!!!>},},}}},{{},},<'a!>!!!>>}}},{{{{{},!<"!>!>}>}},{{{},}},{"}!>},,o!!!!!>u{!!,!!">}},{{<>},{{}"a!>,<>,{{{},{<'!!!>!!"!i!<>}}}},{,!i'!!'!!!>},},<{e{>,!,!>,},<'!>},}},{,{}}}}}},{{{{},<>},{}},{{{<}!<"a!a!!!u!>,}!>,<{i{a<>},{{{{},},<,>,{},e}}>,,<'>}}},{{<}!!o!!o!!>eo!!"!!!>,<>}}}},{<{!>},}},{<,,u}!!'!>!'<'ou!""a>},{<"!!!!>o!>},}},{<}!!!!!!{e"}oi!!>,{!!u>}}},{{,i!>,<,"!!},<,!>>,<>}},{{{{},{{{{{<,"'{!>,e!i!!!>,!>"}i!!!>!>},,<<,>}}},{{<"!!'!!{u"!>},}!>i!!!>!>,<,>,{>}}},{},{{},},{}}},{<!>uo!!{'!>,<<>,{{,<'e>},{}}}}},{{{,},},},},<>},<}!>e}},{{!"!>!!>}}},{{{{<}oia!!!>"o>},{<}{,}o!!,e!,},,,<<'!!!>e!!o,e!>!!i!!!>!!!>},}}},{{,},{{{,},}}}}},{{{{{},eii!!!>!>},<,>}}},{{{},{{'!!},>}},{{{{<}>,<<"u{eo<>}}},{{{},{{,<{!>!!!!"!>,},!>,<>},{{<{{!!<"u!>,},,!!},},<>},{<'u!>>}},{{!!{!!!>!>},}}},{{<,!u"!!!!!!eu}!!>},{}}},{{{<>}},{,<"!!>,{<>}},{{},<'!!!!",!u,,>}}},{{},,,"u!i,<>},{!!!>u!!!>uu!!i!>,<}}}},{{},},<>},{{},},},<<,o>}}}},{{{,<"!!!>a!>,<'!>,,{,,>,},"'a!>,<>}},{}},{{{'!!!!",!!!!!!'{o!>},},<<>},{{{}},{!>>,{{,,>},{}}},{}},{},<"!>e{!>},,,<,,>,{}}},{{{{,},}},{<},}},{{{!i{{!e"e,!!'i!!!>,,<>,{}},{!>},<'{ue!!,!!}}!!!!!>{!{>,{}},{<'{!}!>{i!>},<},{'eo>}},{{},{{},<}!ae!>!>,<{i!!!>,},{},o!!!>,<>}}}}},{{{{{},<,>},{}},{{{!!!>!!i{!>},oui!,>,{}},{{{{{}}}}},{}}},{{{{{}},},},,<}!>},!>},,<>},{},,<>}},<,!>!>,},<"}"!!!>!!!>,!>},,}},{{!!{u'{,!''e}!!}o{}!>},<>},{{}}}}},{}}},{{{{'<,!>,<>}},{{a>},{{,ii,!>!>},<"o!!{!!!!!>,!>,}}}},{{{<'"'!>},},>,,<,!ao,!>,<}i!!!>},}!!o'!!!>!!!>>},{{{},},}},>},{{},e!>},u!>},<}!>"!!!!!!!!i!>,,!!!>'e!>!>},<,u"{<>}}},{{{<}!!!>},},<}!>},},!>},<>,{},!>,},}},{{<'i!>!i!>},},!>!!io!>},!>e>,{>}},},},},{}},{{},{{}},{{u!o<"!>a!!!>!>},,{{},{<,!!a!}"a!!}}}},{{{},{{,},,}},{{{},,<}!>},},}},{{{<,},<{!e!'>},<'u{u!!,>}},{{{},<},<{>},"{!>},,uu!!o,>},<"!>,{!>,}},{{{{},{<{>}},{},{,<,u!>},}},{{{<>},{{<}'},<,a!>,<>},,!!"!!i!>},}},{{}},{}},{,{<}{{i{a!i'!i!!!>!!eau,!!<>}}}},{{!>!!',{{},!>!>},},{>}}}},{{{{{{<<''!!}e<!>},},<>},{,<>}},{{{},<'!!!>ae>},<,,,i!!,'!!!!e!!o,}}u!!u!!!!e,e!>>},{}},{{>},{{},<}i>}}}}},{{{,}},{{}}},{}},{{{{,<<}oa<>},{}},{{<}{,},eo"!!!>,,!>,},{},<,!!!>"i!!a{!>},}ii>,<{o>}},{{a!!'!>,}e!>},},a>}},{{{},},,!"o,!!!}!!u>},{{{<>}}}},{{{>}},{},{u,"!>},<>}}}},{}}},{{{},{},<{!>!!!!i!!!>!>},},},{}!>},>}},{{},{}},{ie'i{!!!>ei},<{i,},<>}},{{{{,<>}},{,},<"!!!o!!{!!!>!>,<>}},{,,{,<"!>,<{!!!>o!!u<",!!!>!>,<,"!!e!!,>}},{{},{}}}}},{{{{{,,<,oau!>,,,,!!u>},{{},{!!!>u!>},>},},{{{{,>},{}},<">},{{<'<>}},{{<<"!>,,'!>a}!!!>!!<>},}!!i!>o{>}}},{{},},,<>,,"{e!!!>,<'>},{{{{{o}>},{{<''io{>}}},{}},{}}},{{{},{,},<>}},{{},,{<{<{!!{i!>,,},<>,{}}},{},!'!>},,},}},{<},<"a!>"!!{<"!!!>}e!>,ea>}}},{{},<,{au!!!>,{o!!!>!>},!o>},{<,!!e!a!!o'!!o!!a!>!!!>>}}},{{{!!!!o}},{{},{{{}},!!!>!>!!!>{o,u>}},{{!!>}}},{{{<>,{o!>!>},,!!},!>},!!!>>}},{<{oo>,{}}},{{{!!!>},<>},{{},<"'a!e!!o!>},<{!>{>},{!!!>!>,<>}}},{{{<}",!!>}}},{},{uae!!i,!!!>!>},,<>,{}}}},{{{{}},{{,!>,,}},{{},{}}},{{"}{!!,}!!!!i'e>}},{{},{{{a!!a!>},<"{o!>},,{i<}!ia<{!!}!o!!!>,,>}},{iu!>{,{!'>}},{<}!>,<<,!!ia!!!uo!!>},{{{<},<'!>!>,!!!!}o!!!i!!!!!!o<>},{,<}>}},{}}},{{{{{,},},,},},{},{}},{<'!!!>!u{!!!>,!>,!!!>},},<''"!u!>},<<>,!>!!!>!!uoa,ou>},{}}}},{{{{},{{},{{},},<'!!!>au'>}}}},{{{{}},{,,!>,,<,!!iao>},{}},{{{},}},{{,<,!!i!u!>,}!!,<>,{{,>}}}},{{{<>,{}},{{{<},u!>},!>},>,{}}}}},{{},{{{{!>!!!!!>">},},{{<{eo}!!!!!>},,},!{!!o!>},,,,>}},{}},{<<{aii,o}o,<""o'}u>}}},{{{{,},},},,}!!'"{!'a!!!>>},{{{{<}"}!>,<'!>>}},,'!>,<',u,u">},{}}},{{{'!!,u,!>u!",e"!>,>}},{}},{{}}}}},{{},{}},{{{<'!!{!>!>},ii!'"!!!>>}}}}}},{{{,,<,i>},{{{<{{,!>},},<>},},<!!i,"!>a!"!!!>!>!!!>}!!!>!>>}},{{<{'"a"'io,i{!!}{!!!>,u!!"i>},{<{!!!>!>,<}{u!>!>},!!!e<>,{}}}}},{{{!>},<"oei}u'{!>,,<<>,,},<>},{,}{!>,<}!!!>>,{,<>}}},{{{{<{!'!>},,>},{{<,!>,<'!!!>,<"o!!o'e'"oieui>},{{{}}}}},{,"'}aa>}},{{},{}}},{{{},,'!<}!>},<{!!!>e}u}>}},{<{,''!>,<,},>,{}},{}},{{,<,,}!!!!a>}}},{{{{},{,<}!!,,},{i!a!>>,ua">}},{{{<>},'!!,!!!>,},{{}}i,<"}o!>u!!o,!{i!>,<>}},{{<}'!!>,{}},{{},{{},,!>},<",a!!!>ue!>,},{>}}},{}}},{{{{<,!>},<'}e!>,,<{{!!!>>,u'}!>},,au>},{!>},<"!!!>,!><"'!>,<<},<"!>,<>,{}}},{{!"{,i"!i!>,<,!>},<>,{,!>},},}},{{{,},<<>,{<{,!!!u}}},{{{},{}},{{!!!!!>!!!>u>},<"!!i!!uia>},{{<{i}!u'}!>,,<,">,{}},{{,<'a!!i}!!!!!,>}},{{,o!>!!}!!!!',>,{,<>,<>}},{{{},,},{<}!>,<}u!>{o{!i>,{{}}}},{{{<{!a}>},{{<"}o!>}"!o,,!>,},,{<"!>},<"}}!>!>},},<>}}}},{},{>,{}}},{{{<,ee!>!>,,{}}},{}}},{{},{{{<"'a,>}},{<>}}}}}},{}}},{{<'!>},},<,}'>},{},,},,,{,<{'}!!!>i{!!!>!>},}}},{}},{{{{<>}}},{{},{<'!"!!!>!!!>e,<>}},{{}}}},{{{{,<"'>},{{<<>}}},{{{<{{!!!!!>!!e!!{!>,<}!>},<"e,<,!>,!!!!!>,<,>},<>},{{{}},{{{,,<}}!e!!!>,}},{}},{{}}}}},{{{{},{{<}!>!!'!!'!!!}!>},}}}},{{<,!!'!>'i!<>}}},{{{<"}e!!!{!>,,},},<'!!!>>}}},{{{}}}},{{{<}a},o!>},<"!>},<"!!}u!!"!!!!>},{,!!"e',',<},{{!!!'!>}>},{<>},{{!>},},{{<i!!!>a!u}!!a>}}}}},{{{{},>,<',!!u},},{{},},{<"!>aiu>,},"{!!!>{>}},{{{},{}}}},{{{,<<,e!u!i!>!>},},},{{{>},{!!!a!,!!!>i!!!>!>!!!!{aa!!'>},{{}},{},!!!>,},<}!>,,{u!>,<'e!!!>i!>!!!!!{!!!!!>!!!!<>}}}}},{{{{<>}},},{>,<''!!!!e!>,<<<,>},{{{{<,!>,i}>},{{}}}}}},{{{},},!>u,!!!>,},<>},{{<'!!,!>,,,!>a!>},}}},{},{{},<!>},e}>}},{{<"ou!>!!!>eae>,{{},{}}},{{,<"!"!!,{{<>}}},{!''iuu"!!!>,>}},{{}}}},{{,<,a!!!>a}o{i{">,!!o!>},<'{ei!!!!!!a!>},},<>},{,"},,},,{<,!!!>!o"}>}}}}}}},{{},{{{}},{{{},<"}!!{i!i!>,!>,,{{}}},{<},},},}},{{},{{},},}}}},{{<>}}},{{{{<{!>oa!!u!>!>!!u>},},a}'!!!>u!!e!o!!!!o!>},<>}},{{{{},{{<,o"i!!o!!!>!!!!'o!{!>,,},},<,i!!!>!>,<,!!<"!!!>ei!!!!!>e>}},{{{}}}}},{{{{,},>}},{}},{{{<"'!>},,},>,{{},},",eoa!!!>},,<''!!!>>}}},{{{{<"!!'"!{!!!>"{!>},}},{{!}ei}!e}!!!!}{a!!!>>}},{{},},},<,!>},<"}!>u!!!>o<>},{{}}}},{{{<<},{{,e>,},,,!>},{!!!>!{,>}}},{{{<!!!>u>,{<,<{<>}}},{{},{<{,}!!!>!!",<>}},{},''"!!i!>!>{!!{ia!!e!eu!!o>,{!!!>i>}}},{{},},}}}},{{{{{{},>},{,<>,{},}},{!>u!e!"o!ui},!!>,{<}'{!!,!!!!ei!>!>},}}},{{{},{}},{<"!o,"e}o!"ue!>,<}},{,{}}},{{e!!!>,!!'>,{!!'!!!>},<,ae,{!>!!!>ee!!o!!!>uo">}},{,},{{},<{"!>oeuo'a!!}!>},<">}}}}},{{{,,{!>!!,}'',!>a!>,<'!!!>>,{}!>},<{!>a!!o}!>}{!>},ao!>>}},{{{<'!!!,<,u!!!>},,{}}},{{<u}!!{e!"a!!!>},<>},{<}>}}},{}},{{{{},{,}}}},{{{}},{{}},{{{},{<,"!>,!!'"uu!o!>,<">}},,},<',!>!>},}}},{{{<,}>},{}}},{{{},{>,{}}},{}}}},{{{},,!!'e!!!>u!e!!!!u!!!!{!!!>},<{!>,},{{{<','o!!!'<,,u!>,},{{},<"i!>,!!"{u!!!>i!<>},!>i!!"a!!i!!!!!!!>"o!>,<>}},{,},e!>,{!{!!,>}},{{,<'!>},>},{{{!!!>,},},,{'!>,>}},{},}}},{{}}}},{{{{{{{{},{<u!!e}!>e!,!!!!!>o{,>}},{<{i''!!!>",ae<'!>>,{<'!'e{>}}},{},,<{!>{!i,e!!u!a<>}},{{{{!!!!!>",i!!!!!!!>,,a!>},},<>}}}},{}},{{{>,<'u!!!!o!!!,!!!!>},{{e!>},!!{{,,!>>},{<{!>!{{u!!}}!!!>!>,}},{,u!!!>'i<>,<"i},}}},{{{{}},{},{{{},}a!>,,},<,!!{>},}},{{{{},"{!>i>},{!>},io!!!!!>e>}},{{!!{{u!>!!e!"{'!!!!>,{<{!>e}u>}}},{{},{{<'!"}>},},}},{},!>'!>,},<{<{>,<>}},{{{{<{'eao>}},{{{},{{{},{{{{},{<'!!!>},!'>}},<"u{>},{{},{<"o,!'>}}}},{{!'!!,>}}}},!>}i!!"!>,<}e{>}},{{{{},!!u},,!>},,<},{,,<"!!!>},<{!!!>!i!!!>},<>}},{{,<<{!!'!>,,<,!!i"!>,}}},{{{<'<"!!!>},>,{}}},{{},<,!!{i>},{}}}},{{{eoo{{{!!!!"!>!>a!<>},<}!!!>!>{!>o!!!>a}"'>}},{{{{<"'}!>},>}}},{{{},{{!!",a!!'!>u!!!>>},<,!>,>},{{<}e!>,,}!!!!!>!!!>,i!!!>,,oo>},{{},}!!"!>,>}}},{{{},!>!!!!oi!!,>,{{,}}}},{,e!u!!!!!>!!!>!!>,<""e!>,!!!>e'!!!!!>,{!!!!!>,">},{},},,{}}},{{{{<>}},{{}!o"!!,e!!!>!>{!>,<}a<>},{{},{}}},{}},{{{},<{'},"<>,{{>}},{{{{<}<}i!>!>},<,"{a">}}},{},{{<}!>!!!>},},{}a!>},,!!!>i!!,!!>,<"o>}}},{{{<,}}ae"{!!!>{!""!!i!>,<{u!>},},<>}}},{{{{<{!>!>},,<}i!>,<,!>},}!>},{>}},a''!!!>a!,ue>}},{{{{<>},{,,<,}!!{!>},<,u!!!!!>o}!!ea>}},{,<!!!{",ia!!!!!>},<,>}},{,!>},},},}},{{!>o!!!>,>},{}}}}},{{{,!>},,e'!!u!!"!!!!!>uo!!!>!},{<}{!e'"a{>}}},{{{}}}}},{{{{,e>}},{{}}},{{{},}},{{},},},<<}''o!!au!>},<{!>!!>}},{oo'!!!!!>!>},,}}},{{{{},!!',<>,{a'u!'!!!>},<>}},{},{<}!i}i{}!>,<,o!>!!u,!!!>,<"a>}},{{{}},{{}}}},{},{},{{{{}},{}},{,{<{>}},{{<',!a!!}!!'i>}}}},{{{,!!!!!>"!>!!'{,a!!,!>!>>},<}!e!>},{,<},{{{!>,,,a>},{{{!!i!!"!!>},{}}}},{{<<{'!>},i'a!>},},<>}}},{{{},{}},{},,,"{>,{},},!!}>}}}}},{{{e>,{<'!>,},,<'!u{>}}},{{{{},<',<,{}},{{!>!!}ii>},{o!!!'!!{},!!!u!!'>}},{{},{{{{{{}}}},{<{!u!i'!!}!!!>!>!!e>}},{}},{},{{{!!!!!>!>},!!!>a}ii<<,u!!'!>,<>},{{<'"'ua!>},<,!a>},<{!a"!,},},},{{},<'eu!!}},!!!>,}}},{{}}}}},{{{{>},},!o!!!>>},{{},{}},{{{{,!!oi!>"!>,<{!!!>},>}},{{<"!!{!'>}}},{{{}},,!!!>!>,<'o!>>},{<"{u{{}<},},}}},{{},{{}}},{{{{}}},{{<!!!!!>{a!>},<}!!!{!>'!>,<>},{u!,<"!>},,,{{},<,!}>}},{{i!!!>!>},,,,},}}}},{{{,<'{,}{{o}!>>,,a!!!>o{"!>,<"'>},{{!>,<>},{{<>}}},{{},{,{},!!}{!a!!uo>}}}},{{},{{,{{<">},{iu}'>}}},{<}!>},},<'"">}},{{!>!>},<}!<>},<<}!!!>!!,"!!!!!!>}},{}}},{{},{{<,"!>,,<}"'}!>{!!!>oa!,auo!>,!>,<>},{{{i'">,!",!>},},{{{{},{{<,!>,,!!!>!>,},,!!{oo>},{{{,{{},<,e!>,<,!!!!o},>,{}}}},{{},}},{{}}}}}},{o!!>}},{{,{{",>}}},{,{},<>}},{},}}},{}}},{{{{{oou<>,{}},},},,"!!!>>},{<{{,,<'>}},{},{{{{}},{<<}!>,!"!i!e'}}},{{,},!a""!>,<>},},{},!>!!!!!>!>},!>},<',<<>}}},{{{},{{},ueo>},,<,!}>},{},!>,!>},<{>,{{<e<",!"}}}}},{{{{<'!>,},{,}<""i!!">},{{,<"'!e'!>},},{{{<{!!!>""e'}!aa!>,<,'!>{},<>}}}}},{}},{{{{},{{<>,>},{{<'e!>},!!u'!>!>'!!!>,<{oi>},{<{uee!!!!!!!>,>}},{{!!!>o,<<,'!!!>,<}>}}},{{}}},{{{}},{{},},<{!!>}},{{{},!>,},<'>,{{<>},{{ea!>,!!>,'<,,!>,<{>}}}},{{{{}ee>}},{{oa!!>},{},>,{,,,,,}}}}}},{{{{{},{<'o>}},{{}},{{{<}!>},,,e!>,<>},{}},{<'!!!'!!"!!}o!}!>},,!!!!!>'i!>},},<{>,{}}}},{{{{{{}},{},,,,,{},u!!!>!!,'i}!!!>"!!{i>}}},{{{{<"u!>},,}},{>}},{}},{{{{{{,<,!}",oi!>,<>},{<!u{oo!!!!"!!!>!<>}}},{,,},,<{,,ia>}},{{,{<'!>,!!!!a>,}},{{>},{{},{{,,'!>o>}}}}}},{{{},{}},{{}},{{a"{!>},,!>!>!!i!"i}!{u!>,<{>}}}},{{{},,},,<},{{<},{>}}},{"!!e>},{,{{}}}},{{{<'{!!oa!!!>!!!>,,<,i,!!u,>,{}},{}},{{{{{}}}},{{{<<},!>u!>},!>>},{,<'!">}},{},,,<"!!!>!,},>},{{,,<"!>,!o!!,!>,,,{i"ui<{>}}},{{,"u>},{},i!!!!!>},,{}}}},{{},{}}},{{{{}},{{{<>}},{}},{{{<>},>},{},,<'!,}!">}}}}}}},{{{{,},},<,!!u<{e!!!>"ui>},{,i!!!>">,{{!!'}e<>},{}}}},{}},{!>,o>,e>},{},<,{i!>>,{<'!!"!"e!!!!u}e!>},}}}},{{},{},},}}}},{{{<'!>}!>,,<}!>},},,{<{"!>oe,!!,<'>}},{{{{},{{<{i<,{!!i'>},{},,},!!!!>}}},{},{{{{},ue}{'u!>!>,<>}}}}},{',''!!u<>,{}}},{{<},{,{!>{!!!>}!>,<,<>}}}},{{},{<'>,{,,!>,},}},{{{},},{{{<,{!>,<uaoa'>},{{i!>,<{i!>},>}}},{}}},{{},i',u!>},},},{>}}},{{{,},<{i!>,<',!>,<"!>!}!!u"},{},{}},{{{{,{<{!!!!e!>e>}}}},{{{},<",!>,},e!!!>!!e>},{{<>,,{{'!!!>ee!>,},!">}},{{<,!>,<>,<"!!!>},<},!!!>a'!}u!!ii>},{<}!!o!>!>,,<">,}},{{,<,,o!i!!!!!>'!!!>a>}}}},{{{}},{{{{},},<,},{<'oi!!a}!>,},,<,>}}},{{},au!!!!!!'}},{{},<'!>,!!<>},}},{{{{{<{!>,,<}aa{{">,{},},<>}}},{}}}},{{{{uuu,>}}}}},{{{<''!>!!!>!>,!}ee>,,{!!!>oua!>!i!>,<,!>,<{>},{{i">}},{<},<{!!"i!>,<{>,o"u>}},{{{},<"!!!>!!!>{!>'a!,>},{},,}},{<'oau!!>}}}}}},{{{{{{",!>,,<>}},{{{!!e"!>u!>,,,}},{,<}!i!!!!e!!,u!!e>}},{{{e!!"o!>},}},{{{{{{},,}}},{},{{{,>},{}}}},{}},{{},!!!>!!!>'i{a!>>}}},{{<!!!!{!!}a!a!>},},{a{"'""!!u}!>,}}}}},{,},{{}}},{{{o},{,{}},{}},{{,'}}e!!!>,<"io!iu>}},{{},i!!iu>}}},{{{,!!!>"e>}},{{}},{{,{,},<'a',u!>!>,!>},<'o},>}}}}}}} diff --git a/2017/d09/ex2/ex2.py b/2017/d09/ex2/ex2.py new file mode 100755 index 0000000..60b5a6f --- /dev/null +++ b/2017/d09/ex2/ex2.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python + +import sys +from typing import NamedTuple + + +class Group(NamedTuple): + children: list["Group"] + + +def solve(input: str) -> int: + def parse_group(input: str) -> tuple[Group, str, int]: + garbage = False + cancel = False + stack: list[Group] = [] + total_garbage = 0 + for i, c in enumerate(input): + if cancel: + assert garbage # Sanity check + cancel = False + continue + if garbage: + if c == "!": + cancel = True + elif c == ">": + garbage = False + else: + total_garbage += 1 + continue + if c == "<": + garbage = True + continue + if c == "{": + stack.append(Group([])) + continue + if c == "}": + top = stack.pop() + if stack: + stack[-1].children.append(top) + continue + return top, input[i + 1 :], total_garbage + assert False # Sanity check + + def parse(input: str) -> tuple[Group, int]: + groups, input, total_garbage = parse_group(input) + assert not input # Sanity check + return groups, total_garbage + + _, total_garbage = parse(input.strip()) + return total_garbage + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d09/ex2/input b/2017/d09/ex2/input new file mode 100644 index 0000000..686a0e1 --- /dev/null +++ b/2017/d09/ex2/input @@ -0,0 +1 @@ +{{{{{{},{}},{{!>},<>,{}},{},<}!>!>,<<,'u<,"a!!uu!>,<>,{}},{{}",,!!,u!>},o>},{{<{!!<,a''>,u!>eeu,e!>,}},{,<,,"i!>,,o!a!!!!!>'!>},!!!>},<>}}}},{{{,}},{,,<>},{{{!>,<>},,<{o}>},{,,,<'ei!>},,,{,},},<}u!{>,<{!!!><<>}}}},{{},{!}"}{,i!>,<'ue!,e>,{<'"!!!>oa,>}},{{},<"u!!'!!!!{au!>,,}}}},{{{{{,{<}{'iu>}}},{{},{{{}},{{{{},,<,uu!>"!!!>a!u>},<{a!!''!!!>,<{',{"!!!><'<{,>},{}},{!>,<<{!a!>>,,,},<>}}},{{<'a'>,{<}!>,'},}!>!'!>},<>,{<,{!>!!!!!>},e!>,,<"!a,!!!!!>!!e{<,!>,<>}}},{},{}}},{},{{{!!{!"!}!!eu{!>!!'">},}}},{{{{}},{{},!!!>},<},!!o!!!!!>!>a!!{>},{{},},,},<>}}},{{{{!{}!>},,},{ou!!!<"{{!!!>,,!!}">}},{{,o!>!>,},<>}},{!{!!'>,},,!>},!!!!!!>}}},{{{{,},<",e{>}},{}},{{},{<'',{{o!!!>>}}},{{<,{{,!u!!e!!}u!!!>ia!!!>u!!!>>}},{{},<},{,}ei,{eo>}}}},{{{,{},,!>,!>!!!!!>!>,}},{},{}},{{{{{!>,},<<{!!!>io!>},"!!!<}>},{,<,<}!>,{!!'{!>,<,!},{<{o!!"<,!!"!>,a!'a>,{,"!!!>,!>},o!>},!'"{>}}},{{{{""!!!!!!,}!>,!!!!!}!!ua!{!>",>},{"!>,,<,{!'">}}}},{}},{{{{,<>}},<{e<'"{!'!!!!!!!>!!!>>},{},{{<<,!>},,},}},{{},{{},{!!{,!>'!>{}'!u!!>,{{{,{{},},},,<{!!!>!>>}}},,<>}}},{{<">},{,!}!!o!>},}}},{{ao{}ae!!{!!>}}},{{},<}!>,},<>},{!>"'ao!>,a!,!!}aa!!!>,<<}<>,},},ua!!!!!>}u!>,<,!!!<>},{,<"},!!!>ue{!",!>,<>,{!>,<}"i!>!>,<>}}},{{{<,a!!!!!!!!!!'!,!>!!!>{!eu!!!>!e{>,},,<>}},{},,<}o!>},<{!!!>!!"e!>>}}},{{{{{{},eua{i>}},{,}i'{a}>}},{{{},{},<{ea!!!>}!>},<>}},{{<,>},{}}}}},{{{{<,!!}!>}}}!>,<<}>}},{{{{!!!!!!!>!>}!>,,}},{{<}>},{}},{{{<>},},},!!{!!!o!!!>{{!}"!">},{{<>},{}}}},{{{},{{<'!!,!>,>,{<"!!u!!,<,ou,!!{!!!>!!{!ua{,{!!>}}},{{{,,},!!{{!!}"!!{e!>,,<'o>}},{}}}}},{{auu>}},{{{},{{!>,o!!u!>},!!!>},},}}},{{},},<'a!>!!!>>}}},{{{{{},!<"!>!>}>}},{{{},}},{"}!>},,o!!!!!>u{!!,!!">}},{{<>},{{}"a!>,<>,{{{},{<'!!!>!!"!i!<>}}}},{,!i'!!'!!!>},},<{e{>,!,!>,},<'!>},}},{,{}}}}}},{{{{},<>},{}},{{{<}!<"a!a!!!u!>,}!>,<{i{a<>},{{{{},},<,>,{},e}}>,,<'>}}},{{<}!!o!!o!!>eo!!"!!!>,<>}}}},{<{!>},}},{<,,u}!!'!>!'<'ou!""a>},{<"!!!!>o!>},}},{<}!!!!!!{e"}oi!!>,{!!u>}}},{{,i!>,<,"!!},<,!>>,<>}},{{{{},{{{{{<,"'{!>,e!i!!!>,!>"}i!!!>!>},,<<,>}}},{{<"!!'!!{u"!>},}!>i!!!>!>,<,>,{>}}},{},{{},},{}}},{<!>uo!!{'!>,<<>,{{,<'e>},{}}}}},{{{,},},},},<>},<}!>e}},{{!"!>!!>}}},{{{{<}oia!!!>"o>},{<}{,}o!!,e!,},,,<<'!!!>e!!o,e!>!!i!!!>!!!>},}}},{{,},{{{,},}}}}},{{{{{},eii!!!>!>},<,>}}},{{{},{{'!!},>}},{{{{<}>,<<"u{eo<>}}},{{{},{{,<{!>!!!!"!>,},!>,<>},{{<{{!!<"u!>,},,!!},},<>},{<'u!>>}},{{!!{!!!>!>},}}},{{<,!u"!!!!!!eu}!!>},{}}},{{{<>}},{,<"!!>,{<>}},{{},<'!!!!",!u,,>}}},{{},,,"u!i,<>},{!!!>u!!!>uu!!i!>,<}}}},{{},},<>},{{},},},<<,o>}}}},{{{,<"!!!>a!>,<'!>,,{,,>,},"'a!>,<>}},{}},{{{'!!!!",!!!!!!'{o!>},},<<>},{{{}},{!>>,{{,,>},{}}},{}},{},<"!>e{!>},,,<,,>,{}}},{{{{,},}},{<},}},{{{!i{{!e"e,!!'i!!!>,,<>,{}},{!>},<'{ue!!,!!}}!!!!!>{!{>,{}},{<'{!}!>{i!>},<},{'eo>}},{{},{{},<}!ae!>!>,<{i!!!>,},{},o!!!>,<>}}}}},{{{{{},<,>},{}},{{{!!!>!!i{!>},oui!,>,{}},{{{{{}}}}},{}}},{{{{{}},},},,<}!>},!>},,<>},{},,<>}},<,!>!>,},<"}"!!!>!!!>,!>},,}},{{!!{u'{,!''e}!!}o{}!>},<>},{{}}}}},{}}},{{{{'<,!>,<>}},{{a>},{{,ii,!>!>},<"o!!{!!!!!>,!>,}}}},{{{<'"'!>},},>,,<,!ao,!>,<}i!!!>},}!!o'!!!>!!!>>},{{{},},}},>},{{},e!>},u!>},<}!>"!!!!!!!!i!>,,!!!>'e!>!>},<,u"{<>}}},{{{<}!!!>},},<}!>},},!>},<>,{},!>,},}},{{<'i!>!i!>},},!>!!io!>},!>e>,{>}},},},},{}},{{},{{}},{{u!o<"!>a!!!>!>},,{{},{<,!!a!}"a!!}}}},{{{},{{,},,}},{{{},,<}!>},},}},{{{<,},<{!e!'>},<'u{u!!,>}},{{{},<},<{>},"{!>},,uu!!o,>},<"!>,{!>,}},{{{{},{<{>}},{},{,<,u!>},}},{{{<>},{{<}'},<,a!>,<>},,!!"!!i!>},}},{{}},{}},{,{<}{{i{a!i'!i!!!>!!eau,!!<>}}}},{{!>!!',{{},!>!>},},{>}}}},{{{{{{<<''!!}e<!>},},<>},{,<>}},{{{},<'!!!>ae>},<,,,i!!,'!!!!e!!o,}}u!!u!!!!e,e!>>},{}},{{>},{{},<}i>}}}}},{{{,}},{{}}},{}},{{{{,<<}oa<>},{}},{{<}{,},eo"!!!>,,!>,},{},<,!!!>"i!!a{!>},}ii>,<{o>}},{{a!!'!>,}e!>},},a>}},{{{},},,!"o,!!!}!!u>},{{{<>}}}},{{{>}},{},{u,"!>},<>}}}},{}}},{{{},{},<{!>!!!!i!!!>!>},},},{}!>},>}},{{},{}},{ie'i{!!!>ei},<{i,},<>}},{{{{,<>}},{,},<"!!!o!!{!!!>!>,<>}},{,,{,<"!>,<{!!!>o!!u<",!!!>!>,<,"!!e!!,>}},{{},{}}}}},{{{{{,,<,oau!>,,,,!!u>},{{},{!!!>u!>},>},},{{{{,>},{}},<">},{{<'<>}},{{<<"!>,,'!>a}!!!>!!<>},}!!i!>o{>}}},{{},},,<>,,"{e!!!>,<'>},{{{{{o}>},{{<''io{>}}},{}},{}}},{{{},{,},<>}},{{},,{<{<{!!{i!>,,},<>,{}}},{},!'!>},,},}},{<},<"a!>"!!{<"!!!>}e!>,ea>}}},{{},<,{au!!!>,{o!!!>!>},!o>},{<,!!e!a!!o'!!o!!a!>!!!>>}}},{{{!!!!o}},{{},{{{}},!!!>!>!!!>{o,u>}},{{!!>}}},{{{<>,{o!>!>},,!!},!>},!!!>>}},{<{oo>,{}}},{{{!!!>},<>},{{},<"'a!e!!o!>},<{!>{>},{!!!>!>,<>}}},{{{<}",!!>}}},{},{uae!!i,!!!>!>},,<>,{}}}},{{{{}},{{,!>,,}},{{},{}}},{{"}{!!,}!!!!i'e>}},{{},{{{a!!a!>},<"{o!>},,{i<}!ia<{!!}!o!!!>,,>}},{iu!>{,{!'>}},{<}!>,<<,!!ia!!!uo!!>},{{{<},<'!>!>,!!!!}o!!!i!!!!!!o<>},{,<}>}},{}}},{{{{{,},},,},},{},{}},{<'!!!>!u{!!!>,!>,!!!>},},<''"!u!>},<<>,!>!!!>!!uoa,ou>},{}}}},{{{{},{{},{{},},<'!!!>au'>}}}},{{{{}},{,,!>,,<,!!iao>},{}},{{{},}},{{,<,!!i!u!>,}!!,<>,{{,>}}}},{{{<>,{}},{{{<},u!>},!>},>,{}}}}},{{},{{{{!>!!!!!>">},},{{<{eo}!!!!!>},,},!{!!o!>},,,,>}},{}},{<<{aii,o}o,<""o'}u>}}},{{{{,},},},,}!!'"{!'a!!!>>},{{{{<}"}!>,<'!>>}},,'!>,<',u,u">},{}}},{{{'!!,u,!>u!",e"!>,>}},{}},{{}}}}},{{},{}},{{{<'!!{!>!>},ii!'"!!!>>}}}}}},{{{,,<,i>},{{{<{{,!>},},<>},},<!!i,"!>a!"!!!>!>!!!>}!!!>!>>}},{{<{'"a"'io,i{!!}{!!!>,u!!"i>},{<{!!!>!>,<}{u!>!>},!!!e<>,{}}}}},{{{!>},<"oei}u'{!>,,<<>,,},<>},{,}{!>,<}!!!>>,{,<>}}},{{{{<{!'!>},,>},{{<,!>,<'!!!>,<"o!!o'e'"oieui>},{{{}}}}},{,"'}aa>}},{{},{}}},{{{},,'!<}!>},<{!!!>e}u}>}},{<{,''!>,<,},>,{}},{}},{{,<,,}!!!!a>}}},{{{{},{,<}!!,,},{i!a!>>,ua">}},{{{<>},'!!,!!!>,},{{}}i,<"}o!>u!!o,!{i!>,<>}},{{<}'!!>,{}},{{},{{},,!>},<",a!!!>ue!>,},{>}}},{}}},{{{{<,!>},<'}e!>,,<{{!!!>>,u'}!>},,au>},{!>},<"!!!>,!><"'!>,<<},<"!>,<>,{}}},{{!"{,i"!i!>,<,!>},<>,{,!>},},}},{{{,},<<>,{<{,!!!u}}},{{{},{}},{{!!!!!>!!!>u>},<"!!i!!uia>},{{<{i}!u'}!>,,<,">,{}},{{,<'a!!i}!!!!!,>}},{{,o!>!!}!!!!',>,{,<>,<>}},{{{},,},{<}!>,<}u!>{o{!i>,{{}}}},{{{<{!a}>},{{<"}o!>}"!o,,!>,},,{<"!>},<"}}!>!>},},<>}}}},{},{>,{}}},{{{<,ee!>!>,,{}}},{}}},{{},{{{<"'a,>}},{<>}}}}}},{}}},{{<'!>},},<,}'>},{},,},,,{,<{'}!!!>i{!!!>!>},}}},{}},{{{{<>}}},{{},{<'!"!!!>!!!>e,<>}},{{}}}},{{{{,<"'>},{{<<>}}},{{{<{{!!!!!>!!e!!{!>,<}!>},<"e,<,!>,!!!!!>,<,>},<>},{{{}},{{{,,<}}!e!!!>,}},{}},{{}}}}},{{{{},{{<}!>!!'!!'!!!}!>},}}}},{{<,!!'!>'i!<>}}},{{{<"}e!!!{!>,,},},<'!!!>>}}},{{{}}}},{{{<}a},o!>},<"!>},<"!!}u!!"!!!!>},{,!!"e',',<},{{!!!'!>}>},{<>},{{!>},},{{<i!!!>a!u}!!a>}}}}},{{{{},>,<',!!u},},{{},},{<"!>aiu>,},"{!!!>{>}},{{{},{}}}},{{{,<<,e!u!i!>!>},},},{{{>},{!!!a!,!!!>i!!!>!>!!!!{aa!!'>},{{}},{},!!!>,},<}!>,,{u!>,<'e!!!>i!>!!!!!{!!!!!>!!!!<>}}}}},{{{{<>}},},{>,<''!!!!e!>,<<<,>},{{{{<,!>,i}>},{{}}}}}},{{{},},!>u,!!!>,},<>},{{<'!!,!>,,,!>a!>},}}},{},{{},<!>},e}>}},{{<"ou!>!!!>eae>,{{},{}}},{{,<"!"!!,{{<>}}},{!''iuu"!!!>,>}},{{}}}},{{,<,a!!!>a}o{i{">,!!o!>},<'{ei!!!!!!a!>},},<>},{,"},,},,{<,!!!>!o"}>}}}}}}},{{},{{{}},{{{},<"}!!{i!i!>,!>,,{{}}},{<},},},}},{{},{{},},}}}},{{<>}}},{{{{<{!>oa!!u!>!>!!u>},},a}'!!!>u!!e!o!!!!o!>},<>}},{{{{},{{<,o"i!!o!!!>!!!!'o!{!>,,},},<,i!!!>!>,<,!!<"!!!>ei!!!!!>e>}},{{{}}}}},{{{{,},>}},{}},{{{<"'!>},,},>,{{},},",eoa!!!>},,<''!!!>>}}},{{{{<"!!'"!{!!!>"{!>},}},{{!}ei}!e}!!!!}{a!!!>>}},{{},},},<,!>},<"}!>u!!!>o<>},{{}}}},{{{<<},{{,e>,},,,!>},{!!!>!{,>}}},{{{<!!!>u>,{<,<{<>}}},{{},{<{,}!!!>!!",<>}},{},''"!!i!>!>{!!{ia!!e!eu!!o>,{!!!>i>}}},{{},},}}}},{{{{{{},>},{,<>,{},}},{!>u!e!"o!ui},!!>,{<}'{!!,!!!!ei!>!>},}}},{{{},{}},{<"!o,"e}o!"ue!>,<}},{,{}}},{{e!!!>,!!'>,{!!'!!!>},<,ae,{!>!!!>ee!!o!!!>uo">}},{,},{{},<{"!>oeuo'a!!}!>},<">}}}}},{{{,,{!>!!,}'',!>a!>,<'!!!>>,{}!>},<{!>a!!o}!>}{!>},ao!>>}},{{{<'!!!,<,u!!!>},,{}}},{{<u}!!{e!"a!!!>},<>},{<}>}}},{}},{{{{},{,}}}},{{{}},{{}},{{{},{<,"!>,!!'"uu!o!>,<">}},,},<',!>!>},}}},{{{<,}>},{}}},{{{},{>,{}}},{}}}},{{{},,!!'e!!!>u!e!!!!u!!!!{!!!>},<{!>,},{{{<','o!!!'<,,u!>,},{{},<"i!>,!!"{u!!!>i!<>},!>i!!"a!!i!!!!!!!>"o!>,<>}},{,},e!>,{!{!!,>}},{{,<'!>},>},{{{!!!>,},},,{'!>,>}},{},}}},{{}}}},{{{{{{{{},{<u!!e}!>e!,!!!!!>o{,>}},{<{i''!!!>",ae<'!>>,{<'!'e{>}}},{},,<{!>{!i,e!!u!a<>}},{{{{!!!!!>",i!!!!!!!>,,a!>},},<>}}}},{}},{{{>,<'u!!!!o!!!,!!!!>},{{e!>},!!{{,,!>>},{<{!>!{{u!!}}!!!>!>,}},{,u!!!>'i<>,<"i},}}},{{{{}},{},{{{},}a!>,,},<,!!{>},}},{{{{},"{!>i>},{!>},io!!!!!>e>}},{{!!{{u!>!!e!"{'!!!!>,{<{!>e}u>}}},{{},{{<'!"}>},},}},{},!>'!>,},<{<{>,<>}},{{{{<{'eao>}},{{{},{{{},{{{{},{<'!!!>},!'>}},<"u{>},{{},{<"o,!'>}}}},{{!'!!,>}}}},!>}i!!"!>,<}e{>}},{{{{},!!u},,!>},,<},{,,<"!!!>},<{!!!>!i!!!>},<>}},{{,<<{!!'!>,,<,!!i"!>,}}},{{{<'<"!!!>},>,{}}},{{},<,!!{i>},{}}}},{{{eoo{{{!!!!"!>!>a!<>},<}!!!>!>{!>o!!!>a}"'>}},{{{{<"'}!>},>}}},{{{},{{!!",a!!'!>u!!!>>},<,!>,>},{{<}e!>,,}!!!!!>!!!>,i!!!>,,oo>},{{},}!!"!>,>}}},{{{},!>!!!!oi!!,>,{{,}}}},{,e!u!!!!!>!!!>!!>,<""e!>,!!!>e'!!!!!>,{!!!!!>,">},{},},,{}}},{{{{<>}},{{}!o"!!,e!!!>!>{!>,<}a<>},{{},{}}},{}},{{{},<{'},"<>,{{>}},{{{{<}<}i!>!>},<,"{a">}}},{},{{<}!>!!!>},},{}a!>},,!!!>i!!,!!>,<"o>}}},{{{<,}}ae"{!!!>{!""!!i!>,<{u!>},},<>}}},{{{{<{!>!>},,<}i!>,<,!>},}!>},{>}},a''!!!>a!,ue>}},{{{{<>},{,,<,}!!{!>},<,u!!!!!>o}!!ea>}},{,<!!!{",ia!!!!!>},<,>}},{,!>},},},}},{{!>o!!!>,>},{}}}}},{{{,!>},,e'!!u!!"!!!!!>uo!!!>!},{<}{!e'"a{>}}},{{{}}}}},{{{{,e>}},{{}}},{{{},}},{{},},},<<}''o!!au!>},<{!>!!>}},{oo'!!!!!>!>},,}}},{{{{},!!',<>,{a'u!'!!!>},<>}},{},{<}!i}i{}!>,<,o!>!!u,!!!>,<"a>}},{{{}},{{}}}},{},{},{{{{}},{}},{,{<{>}},{{<',!a!!}!!'i>}}}},{{{,!!!!!>"!>!!'{,a!!,!>!>>},<}!e!>},{,<},{{{!>,,,a>},{{{!!i!!"!!>},{}}}},{{<<{'!>},i'a!>},},<>}}},{{{},{}},{},,,"{>,{},},!!}>}}}}},{{{e>,{<'!>,},,<'!u{>}}},{{{{},<',<,{}},{{!>!!}ii>},{o!!!'!!{},!!!u!!'>}},{{},{{{{{{}}}},{<{!u!i'!!}!!!>!>!!e>}},{}},{},{{{!!!!!>!>},!!!>a}ii<<,u!!'!>,<>},{{<'"'ua!>},<,!a>},<{!a"!,},},},{{},<'eu!!}},!!!>,}}},{{}}}}},{{{{>},},!o!!!>>},{{},{}},{{{{,!!oi!>"!>,<{!!!>},>}},{{<"!!{!'>}}},{{{}},,!!!>!>,<'o!>>},{<"{u{{}<},},}}},{{},{{}}},{{{{}}},{{<!!!!!>{a!>},<}!!!{!>'!>,<>},{u!,<"!>},,,{{},<,!}>}},{{i!!!>!>},,,,},}}}},{{{,<'{,}{{o}!>>,,a!!!>o{"!>,<"'>},{{!>,<>},{{<>}}},{{},{,{},!!}{!a!!uo>}}}},{{},{{,{{<">},{iu}'>}}},{<}!>},},<'"">}},{{!>!>},<}!<>},<<}!!!>!!,"!!!!!!>}},{}}},{{},{{<,"!>,,<}"'}!>{!!!>oa!,auo!>,!>,<>},{{{i'">,!",!>},},{{{{},{{<,!>,,!!!>!>,},,!!{oo>},{{{,{{},<,e!>,<,!!!!o},>,{}}}},{{},}},{{}}}}}},{o!!>}},{{,{{",>}}},{,{},<>}},{},}}},{}}},{{{{{oou<>,{}},},},,"!!!>>},{<{{,,<'>}},{},{{{{}},{<<}!>,!"!i!e'}}},{{,},!a""!>,<>},},{},!>!!!!!>!>},!>},<',<<>}}},{{{},{{},ueo>},,<,!}>},{},!>,!>},<{>,{{<e<",!"}}}}},{{{{<'!>,},{,}<""i!!">},{{,<"'!e'!>},},{{{<{!!!>""e'}!aa!>,<,'!>{},<>}}}}},{}},{{{{},{{<>,>},{{<'e!>},!!u'!>!>'!!!>,<{oi>},{<{uee!!!!!!!>,>}},{{!!!>o,<<,'!!!>,<}>}}},{{}}},{{{}},{{},},<{!!>}},{{{},!>,},<'>,{{<>},{{ea!>,!!>,'<,,!>,<{>}}}},{{{{}ee>}},{{oa!!>},{},>,{,,,,,}}}}}},{{{{{},{<'o>}},{{}},{{{<}!>},,,e!>,<>},{}},{<'!!!'!!"!!}o!}!>},,!!!!!>'i!>},},<{>,{}}}},{{{{{{}},{},,,,,{},u!!!>!!,'i}!!!>"!!{i>}}},{{{{<"u!>},,}},{>}},{}},{{{{{{,<,!}",oi!>,<>},{<!u{oo!!!!"!!!>!<>}}},{,,},,<{,,ia>}},{{,{<'!>,!!!!a>,}},{{>},{{},{{,,'!>o>}}}}}},{{{},{}},{{}},{{a"{!>},,!>!>!!i!"i}!{u!>,<{>}}}},{{{},,},,<},{{<},{>}}},{"!!e>},{,{{}}}},{{{<'{!!oa!!!>!!!>,,<,i,!!u,>,{}},{}},{{{{{}}}},{{{<<},!>u!>},!>>},{,<'!">}},{},,,<"!!!>!,},>},{{,,<"!>,!o!!,!>,,,{i"ui<{>}}},{{,"u>},{},i!!!!!>},,{}}}},{{},{}}},{{{{}},{{{<>}},{}},{{{<>},>},{},,<'!,}!">}}}}}}},{{{{,},},<,!!u<{e!!!>"ui>},{,i!!!>">,{{!!'}e<>},{}}}},{}},{!>,o>,e>},{},<,{i!>>,{<'!!"!"e!!!!u}e!>},}}}},{{},{},},}}}},{{{<'!>}!>,,<}!>},},,{<{"!>oe,!!,<'>}},{{{{},{{<{i<,{!!i'>},{},,},!!!!>}}},{},{{{{},ue}{'u!>!>,<>}}}}},{',''!!u<>,{}}},{{<},{,{!>{!!!>}!>,<,<>}}}},{{},{<'>,{,,!>,},}},{{{},},{{{<,{!>,<uaoa'>},{{i!>,<{i!>},>}}},{}}},{{},i',u!>},},},{>}}},{{{,},<{i!>,<',!>,<"!>!}!!u"},{},{}},{{{{,{<{!!!!e!>e>}}}},{{{},<",!>,},e!!!>!!e>},{{<>,,{{'!!!>ee!>,},!">}},{{<,!>,<>,<"!!!>},<},!!!>a'!}u!!ii>},{<}!!o!>!>,,<">,}},{{,<,,o!i!!!!!>'!!!>a>}}}},{{{}},{{{{},},<,},{<'oi!!a}!>,},,<,>}}},{{},au!!!!!!'}},{{},<'!>,!!<>},}},{{{{{<{!>,,<}aa{{">,{},},<>}}},{}}}},{{{{uuu,>}}}}},{{{<''!>!!!>!>,!}ee>,,{!!!>oua!>!i!>,<,!>,<{>},{{i">}},{<},<{!!"i!>,<{>,o"u>}},{{{},<"!!!>!!!>{!>'a!,>},{},,}},{<'oau!!>}}}}}},{{{{{{",!>,,<>}},{{{!!e"!>u!>,,,}},{,<}!i!!!!e!!,u!!e>}},{{{e!!"o!>},}},{{{{{{},,}}},{},{{{,>},{}}}},{}},{{},!!!>!!!>'i{a!>>}}},{{<!!!!{!!}a!a!>},},{a{"'""!!u}!>,}}}}},{,},{{}}},{{{o},{,{}},{}},{{,'}}e!!!>,<"io!iu>}},{{},i!!iu>}}},{{{,!!!>"e>}},{{}},{{,{,},<'a',u!>!>,!>},<'o},>}}}}}}} diff --git a/2017/d10/ex1/ex1.py b/2017/d10/ex1/ex1.py new file mode 100755 index 0000000..6e8576c --- /dev/null +++ b/2017/d10/ex1/ex1.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python + +import copy +import sys + + +def solve(input: str) -> int: + def parse(input: str) -> list[int]: + return [int(n) for n in input.split(",")] + + def run_round(lengths: list[int], circle: list[int]) -> list[int]: + circle = copy.deepcopy(circle) + cur_pos = 0 + skip_size = 0 + for n in lengths: + # Invalid length + if n > len(circle): + continue + # Reverse + for i, j in zip( + range(cur_pos, cur_pos + n // 2), + # Avoid off-by-one by going further than necessary + range(cur_pos + n - 1, cur_pos, -1), + ): + i %= len(circle) + j %= len(circle) + circle[i], circle[j] = circle[j], circle[i] + # Move + cur_pos += n + skip_size + # Increase + skip_size += 1 + return circle + + lengths = parse(input) + circle = list(range(256)) + circle = run_round(lengths, circle) + return circle[0] * circle[1] + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d10/ex1/input b/2017/d10/ex1/input new file mode 100644 index 0000000..c4486d6 --- /dev/null +++ b/2017/d10/ex1/input @@ -0,0 +1 @@ +83,0,193,1,254,237,187,40,88,27,2,255,149,29,42,100 diff --git a/2017/d10/ex2/ex2.py b/2017/d10/ex2/ex2.py new file mode 100755 index 0000000..f547893 --- /dev/null +++ b/2017/d10/ex2/ex2.py @@ -0,0 +1,55 @@ +#!/usr/bin/env python + +import functools +import itertools +import operator +import sys + + +def solve(input: str) -> str: + def parse(input: str) -> list[int]: + return [ord(c) for c in input.strip()] + + def compute_sparse_hash(lengths: list[int]) -> list[int]: + circle = list(range(256)) + cur_pos, skip_size = 0, 0 + for _ in range(64): + for n in lengths: + # Invalid length + assert n < len(circle) # Sanity check + # Reverse + for i, j in zip( + range(cur_pos, cur_pos + n // 2), + # Avoid off-by-one by going further than necessary + range(cur_pos + n - 1, cur_pos, -1), + ): + i %= len(circle) + j %= len(circle) + circle[i], circle[j] = circle[j], circle[i] + # Move + cur_pos += n + skip_size + # Increase + skip_size += 1 + return circle + + def compute_dense_hash(sparse_hash: list[int]) -> list[int]: + assert len(sparse_hash) == 256 # Sanity check + return [ + functools.reduce(operator.xor, chunk) + for chunk in itertools.batched(sparse_hash, 16) + ] + + lengths = parse(input) + lengths += [17, 31, 73, 47, 23] # Additional lengths + sparse_hash = compute_sparse_hash(lengths) + dense_hash = compute_dense_hash(sparse_hash) + return "".join(f"{n:02x}" for n in dense_hash) + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d10/ex2/input b/2017/d10/ex2/input new file mode 100644 index 0000000..c4486d6 --- /dev/null +++ b/2017/d10/ex2/input @@ -0,0 +1 @@ +83,0,193,1,254,237,187,40,88,27,2,255,149,29,42,100 diff --git a/2017/d11/ex1/ex1.py b/2017/d11/ex1/ex1.py new file mode 100755 index 0000000..bb0ef3f --- /dev/null +++ b/2017/d11/ex1/ex1.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python + +import enum +import sys +from typing import NamedTuple + + +class Point(NamedTuple): + x: int + y: int + + +class Direction(enum.StrEnum): + NORTH_WEST = "nw" + NORTH = "n" + NORTH_EAST = "ne" + SOUTH_EAST = "se" + SOUTH = "s" + SOUTH_WEST = "sw" + + # https://www.redblobgames.com/grids/hexagons/#coordinates-axial + def apply(self, p: Point) -> Point: + # (x, y) <=> (q, r) + match self: + case Direction.NORTH_WEST: + dx, dy = -1, 0 + case Direction.NORTH: + dx, dy = 0, -1 + case Direction.NORTH_EAST: + dx, dy = 1, -1 + case Direction.SOUTH_EAST: + dx, dy = 1, 0 + case Direction.SOUTH: + dx, dy = 0, 1 + case Direction.SOUTH_WEST: + dx, dy = -1, 1 + return Point(p.x + dx, p.y + dy) + + +def solve(input: str) -> int: + def parse(input: str) -> list[Direction]: + return [Direction(dir) for dir in input.strip().split(",")] + + # https://www.redblobgames.com/grids/hexagons/#distances-axial + def hex_dist(a: Point, b: Point) -> int: + dx, dy = a.x - b.x, a.y - b.y + return (abs(dx) + abs(dx + dy) + abs(dy)) // 2 + + directions = parse(input) + pos = Point(0, 0) + for dir in directions: + pos = dir.apply(pos) + return hex_dist(Point(0, 0), pos) + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d11/ex1/input b/2017/d11/ex1/input new file mode 100644 index 0000000..093ccc2 --- /dev/null +++ b/2017/d11/ex1/input @@ -0,0 +1 @@ +nw,n,ne,sw,s,s,se,se,ne,s,se,se,ne,ne,s,se,s,ne,sw,ne,ne,s,se,nw,n,ne,nw,n,n,ne,n,n,ne,n,ne,n,n,n,n,nw,n,n,nw,n,nw,n,s,sw,sw,sw,n,nw,n,nw,nw,n,nw,nw,nw,nw,nw,nw,se,nw,nw,nw,se,sw,sw,nw,nw,sw,sw,nw,nw,nw,nw,nw,s,sw,nw,s,sw,sw,nw,sw,sw,nw,sw,sw,nw,sw,sw,nw,sw,sw,sw,sw,sw,sw,sw,sw,s,se,sw,sw,nw,sw,sw,se,sw,sw,s,sw,sw,sw,s,n,s,sw,sw,s,sw,s,sw,ne,sw,s,s,s,n,sw,s,s,sw,s,s,s,nw,s,s,n,nw,ne,n,s,se,n,s,s,s,s,ne,s,s,s,sw,s,ne,n,s,se,s,se,s,s,s,s,ne,s,nw,se,se,ne,nw,se,s,nw,s,s,s,nw,s,sw,s,s,se,nw,se,sw,se,sw,s,s,sw,se,se,s,n,se,se,se,se,se,se,s,se,s,se,se,nw,s,n,se,se,se,se,n,nw,se,se,se,se,se,se,se,se,se,se,se,ne,se,se,sw,se,s,se,ne,se,n,se,ne,se,se,se,se,se,n,se,se,ne,ne,ne,ne,se,se,ne,se,se,s,ne,se,se,n,se,sw,s,se,se,ne,ne,ne,s,s,ne,se,nw,nw,s,se,ne,ne,ne,se,sw,ne,se,ne,ne,ne,se,n,s,n,se,ne,ne,se,se,nw,ne,se,ne,nw,ne,se,ne,ne,n,ne,ne,ne,ne,ne,se,ne,nw,se,ne,ne,ne,s,ne,ne,ne,ne,ne,sw,ne,ne,ne,se,ne,ne,ne,ne,nw,ne,ne,s,sw,ne,ne,ne,ne,ne,n,s,sw,n,ne,s,ne,nw,sw,sw,s,ne,ne,ne,ne,sw,n,ne,ne,nw,n,ne,n,n,s,n,ne,nw,ne,n,ne,ne,ne,ne,sw,n,ne,sw,sw,ne,nw,ne,ne,n,ne,ne,ne,n,n,s,ne,ne,ne,n,ne,ne,n,n,n,n,nw,n,n,ne,n,ne,ne,n,ne,ne,ne,ne,ne,n,n,n,ne,n,n,n,n,n,n,n,n,n,n,ne,n,n,nw,ne,n,s,nw,se,ne,se,n,n,n,sw,n,n,ne,sw,n,n,s,s,n,n,n,ne,nw,nw,n,n,n,s,se,n,n,n,nw,n,nw,n,n,n,n,n,se,n,n,n,s,sw,n,n,n,n,n,n,n,n,n,n,n,se,n,n,n,nw,n,n,se,ne,ne,nw,n,n,n,nw,n,n,n,ne,s,n,nw,ne,n,s,n,n,n,n,sw,n,nw,n,n,n,ne,s,n,s,se,n,n,n,nw,nw,n,nw,sw,n,n,nw,n,n,nw,nw,n,n,sw,nw,nw,nw,n,se,nw,n,nw,nw,nw,n,n,nw,n,n,nw,nw,n,ne,nw,nw,sw,n,n,n,nw,nw,n,n,n,n,n,sw,nw,nw,n,nw,n,nw,nw,nw,n,nw,n,n,n,n,nw,nw,nw,s,s,n,nw,sw,nw,n,nw,ne,n,nw,ne,ne,sw,n,se,nw,sw,s,nw,nw,nw,nw,nw,ne,nw,nw,nw,ne,nw,se,n,n,nw,se,nw,nw,nw,n,nw,se,nw,nw,nw,nw,nw,nw,nw,nw,nw,ne,nw,nw,nw,se,nw,nw,nw,nw,s,s,s,nw,nw,nw,nw,s,n,nw,nw,se,nw,nw,nw,nw,nw,sw,nw,nw,nw,nw,nw,ne,sw,sw,sw,nw,nw,sw,nw,nw,ne,sw,ne,nw,nw,nw,nw,nw,s,nw,nw,nw,nw,nw,se,sw,nw,n,sw,ne,nw,nw,nw,nw,nw,sw,nw,se,sw,sw,sw,nw,s,nw,nw,s,ne,nw,nw,nw,nw,nw,sw,nw,s,sw,nw,nw,se,sw,sw,nw,nw,sw,sw,n,sw,nw,ne,se,nw,nw,ne,nw,nw,sw,nw,nw,se,sw,nw,sw,nw,nw,ne,nw,s,nw,nw,nw,nw,nw,nw,nw,nw,nw,sw,n,sw,sw,se,sw,nw,nw,nw,nw,nw,sw,nw,nw,nw,sw,nw,nw,se,sw,nw,nw,n,nw,sw,nw,nw,nw,nw,n,sw,sw,sw,se,nw,nw,sw,sw,sw,sw,nw,nw,sw,sw,sw,nw,sw,sw,se,sw,sw,ne,sw,nw,s,s,se,ne,sw,sw,sw,sw,nw,nw,nw,sw,nw,nw,nw,s,nw,nw,nw,sw,s,s,nw,sw,sw,ne,n,s,nw,nw,sw,nw,nw,nw,sw,sw,ne,sw,sw,nw,n,sw,sw,nw,se,sw,sw,se,ne,sw,sw,sw,nw,sw,sw,sw,sw,nw,nw,nw,nw,n,sw,sw,se,n,nw,nw,sw,sw,sw,sw,nw,se,sw,sw,se,n,s,sw,sw,n,n,sw,sw,n,sw,sw,sw,sw,sw,se,sw,sw,sw,se,nw,sw,s,sw,sw,sw,ne,sw,sw,sw,sw,sw,sw,sw,n,sw,sw,sw,sw,sw,sw,sw,nw,sw,sw,sw,ne,sw,s,sw,sw,sw,sw,sw,sw,sw,s,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,s,n,s,s,sw,n,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,n,sw,s,sw,sw,sw,sw,sw,sw,ne,sw,se,sw,sw,nw,sw,sw,sw,s,sw,sw,sw,sw,sw,s,sw,sw,ne,sw,sw,sw,sw,n,sw,n,sw,n,sw,sw,sw,sw,sw,sw,n,s,se,s,ne,sw,sw,s,s,s,se,s,nw,s,sw,s,s,s,se,s,sw,sw,se,sw,sw,sw,s,se,nw,sw,sw,se,s,s,sw,sw,s,sw,sw,s,sw,sw,ne,n,sw,sw,nw,ne,s,sw,sw,sw,sw,sw,sw,sw,sw,sw,s,n,sw,s,n,s,s,sw,sw,nw,se,n,sw,sw,sw,nw,s,sw,sw,s,sw,sw,sw,sw,sw,sw,sw,sw,s,s,sw,s,n,s,sw,sw,sw,s,s,nw,s,sw,s,s,s,sw,sw,s,se,se,nw,sw,sw,sw,s,s,sw,sw,ne,sw,s,sw,s,s,s,sw,s,s,sw,sw,sw,nw,sw,s,sw,sw,n,sw,sw,sw,s,sw,sw,sw,sw,s,nw,nw,sw,sw,s,s,n,sw,sw,se,s,sw,s,n,s,sw,s,sw,s,sw,sw,sw,sw,sw,n,s,se,s,s,s,s,s,ne,s,sw,n,sw,s,s,sw,s,sw,s,sw,ne,s,s,nw,n,s,s,n,se,sw,sw,s,s,s,s,s,s,s,s,sw,se,sw,s,nw,s,s,s,s,s,se,s,s,sw,sw,ne,s,s,s,sw,ne,s,sw,s,s,s,s,s,s,n,s,s,s,s,sw,s,s,s,sw,sw,s,sw,sw,nw,s,ne,s,s,s,se,sw,se,s,s,s,sw,sw,s,sw,s,s,s,n,s,sw,s,sw,s,s,nw,s,s,n,nw,s,ne,s,sw,s,s,s,s,ne,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,nw,s,s,sw,nw,s,n,s,s,nw,sw,s,se,s,s,s,s,sw,s,ne,s,s,s,s,s,s,s,s,s,sw,se,s,s,s,s,s,s,s,s,n,s,s,s,s,ne,n,ne,s,sw,n,s,s,s,s,s,s,s,s,ne,s,s,nw,se,s,s,s,s,s,s,ne,s,s,s,ne,s,s,s,s,s,se,s,s,s,s,s,s,s,ne,s,s,s,s,s,s,s,se,s,s,s,s,se,s,s,ne,s,n,ne,s,s,s,nw,ne,se,s,s,s,n,sw,s,s,s,s,s,s,s,sw,s,s,se,s,s,s,s,n,s,se,s,s,nw,s,s,sw,s,sw,se,s,s,s,s,s,s,s,s,se,se,se,s,se,s,s,s,s,se,s,s,se,s,se,s,n,s,s,se,s,sw,se,s,s,se,se,s,s,se,s,se,se,nw,n,s,nw,ne,ne,s,s,sw,s,se,nw,ne,s,s,se,s,s,s,s,s,s,s,se,s,s,se,s,se,s,ne,se,se,s,se,se,s,nw,s,ne,sw,s,s,se,s,s,se,s,sw,s,s,se,s,sw,n,s,nw,se,s,n,nw,s,s,se,s,s,nw,s,se,s,ne,s,s,se,s,se,s,nw,se,ne,s,nw,se,s,se,ne,s,s,sw,s,s,s,se,se,se,s,s,s,s,se,nw,s,se,s,s,s,s,n,se,s,n,se,se,se,se,nw,sw,nw,se,se,se,s,se,n,s,se,s,nw,ne,se,s,se,s,se,s,ne,se,nw,se,se,ne,s,nw,sw,n,se,se,se,n,se,se,se,nw,se,sw,s,n,se,s,sw,se,s,s,se,s,se,se,se,nw,se,se,s,nw,se,n,se,se,se,s,nw,se,se,s,ne,se,se,s,s,s,se,se,ne,s,nw,s,se,se,sw,se,se,se,se,s,se,se,se,s,s,se,nw,se,se,se,s,se,s,nw,se,se,se,ne,se,se,se,se,se,se,se,se,se,se,s,ne,se,ne,se,n,sw,s,sw,se,sw,se,se,se,sw,se,se,s,se,se,s,nw,se,nw,se,se,se,se,se,se,n,se,se,se,se,s,se,nw,se,se,se,se,se,nw,nw,se,se,se,se,s,sw,s,s,se,se,s,se,se,nw,se,se,se,s,s,s,se,se,n,se,nw,sw,n,se,se,se,se,se,se,se,se,s,ne,se,ne,se,se,se,se,nw,se,se,s,se,n,se,se,se,se,se,se,s,se,s,s,ne,s,se,sw,ne,se,se,se,sw,se,se,se,se,s,nw,n,se,se,se,se,s,se,se,se,se,n,se,se,se,se,se,nw,ne,se,se,n,se,s,se,se,s,se,n,se,se,ne,se,s,s,ne,s,se,se,se,se,se,se,nw,nw,se,se,se,se,n,se,se,se,se,s,se,s,se,se,se,se,se,n,se,se,se,se,se,se,se,n,n,sw,se,n,se,se,se,se,se,se,se,se,s,sw,se,nw,nw,ne,se,se,se,se,se,se,ne,se,ne,se,se,ne,ne,se,sw,se,se,se,ne,se,se,se,ne,se,nw,se,se,se,sw,se,nw,se,se,se,se,ne,sw,se,se,se,se,se,se,s,ne,sw,se,s,s,se,se,nw,se,ne,se,se,se,se,se,se,s,se,se,se,se,se,se,se,se,sw,ne,sw,se,se,se,se,nw,se,se,se,se,ne,se,se,se,n,se,ne,nw,se,se,se,sw,se,se,se,se,se,ne,se,se,sw,se,se,n,n,se,se,se,se,se,se,se,se,nw,se,s,s,se,se,s,se,ne,se,n,n,se,nw,se,se,se,se,nw,sw,s,ne,nw,se,ne,se,n,se,se,se,ne,se,se,sw,s,se,se,n,ne,se,se,ne,se,se,ne,se,se,se,se,se,se,se,se,se,nw,n,sw,se,se,se,se,ne,se,se,se,se,se,se,se,ne,se,ne,se,se,n,se,se,n,ne,n,se,se,se,se,ne,se,se,se,sw,se,se,ne,se,s,se,ne,se,n,se,se,se,se,sw,se,ne,se,s,se,se,ne,n,se,se,nw,se,se,nw,nw,ne,se,se,sw,se,se,n,ne,n,ne,s,se,se,se,se,ne,s,nw,se,se,se,ne,se,se,sw,ne,s,se,ne,se,se,se,se,sw,se,se,sw,ne,ne,ne,se,se,se,ne,ne,ne,ne,se,se,ne,ne,se,s,nw,se,se,se,se,ne,se,se,se,se,se,n,se,se,ne,se,se,se,se,se,se,s,se,n,se,ne,ne,se,s,ne,ne,s,ne,ne,se,se,se,ne,se,ne,se,se,ne,sw,ne,ne,ne,se,se,ne,ne,se,n,se,nw,se,n,ne,ne,ne,se,se,se,ne,ne,se,s,ne,ne,se,ne,se,nw,ne,ne,ne,ne,n,se,ne,se,ne,se,se,ne,ne,s,ne,ne,ne,ne,se,ne,ne,se,ne,ne,se,sw,s,s,se,se,se,ne,se,ne,ne,ne,ne,ne,se,se,ne,se,se,se,ne,ne,nw,sw,se,se,sw,sw,ne,se,se,se,se,s,nw,sw,ne,se,se,ne,ne,ne,ne,se,se,se,se,se,ne,se,ne,ne,ne,s,ne,ne,n,ne,ne,ne,s,n,se,se,nw,nw,ne,ne,n,ne,ne,ne,se,se,ne,se,se,sw,ne,se,ne,ne,se,se,ne,se,s,ne,ne,ne,n,sw,ne,ne,ne,ne,ne,se,se,s,nw,se,ne,ne,ne,n,ne,ne,n,ne,se,sw,ne,ne,se,sw,ne,ne,s,ne,ne,nw,sw,se,ne,ne,sw,n,ne,ne,ne,sw,ne,s,ne,ne,se,ne,nw,ne,ne,ne,se,n,ne,n,ne,ne,ne,ne,ne,ne,ne,ne,se,se,ne,ne,ne,ne,ne,s,ne,ne,ne,ne,se,ne,ne,ne,ne,ne,ne,ne,ne,ne,n,n,se,ne,ne,ne,ne,ne,sw,s,ne,ne,sw,n,ne,n,nw,se,ne,se,ne,ne,ne,ne,se,ne,ne,se,ne,se,se,ne,ne,s,n,sw,se,sw,se,ne,ne,nw,ne,se,ne,ne,ne,se,ne,ne,se,nw,ne,ne,ne,ne,ne,ne,se,se,ne,se,ne,s,se,nw,se,ne,ne,ne,se,s,ne,ne,ne,se,se,se,se,se,ne,se,nw,se,ne,ne,ne,n,n,n,nw,ne,s,ne,se,ne,ne,nw,s,ne,nw,ne,nw,se,ne,ne,n,ne,ne,ne,sw,ne,se,n,ne,ne,ne,ne,se,s,ne,ne,sw,ne,ne,s,ne,se,ne,ne,ne,ne,ne,ne,ne,se,ne,nw,ne,n,ne,s,ne,ne,ne,nw,ne,n,ne,nw,ne,ne,ne,ne,s,ne,ne,n,ne,ne,ne,ne,sw,ne,ne,ne,se,ne,se,ne,se,nw,ne,ne,ne,sw,n,n,nw,nw,ne,ne,ne,ne,se,ne,ne,ne,ne,ne,s,ne,ne,sw,ne,ne,s,ne,ne,ne,ne,s,ne,ne,ne,ne,ne,ne,ne,ne,ne,s,ne,ne,s,sw,ne,nw,ne,ne,ne,ne,ne,ne,ne,ne,s,ne,sw,se,ne,se,ne,ne,n,ne,s,ne,ne,ne,n,ne,n,n,ne,ne,ne,ne,ne,n,ne,se,ne,se,ne,ne,s,ne,n,ne,ne,ne,ne,se,ne,nw,ne,s,sw,ne,ne,ne,sw,ne,ne,s,ne,ne,s,se,ne,s,n,ne,ne,ne,ne,ne,se,ne,ne,n,ne,ne,nw,nw,ne,ne,ne,ne,nw,ne,n,ne,ne,ne,ne,n,ne,ne,ne,ne,ne,s,n,ne,n,n,ne,nw,nw,ne,n,nw,ne,ne,n,ne,ne,s,s,ne,se,ne,ne,ne,n,ne,ne,ne,ne,ne,n,s,se,ne,ne,s,ne,ne,se,ne,ne,n,n,ne,ne,se,n,ne,s,ne,ne,n,ne,nw,ne,nw,nw,ne,se,ne,ne,ne,ne,se,ne,se,ne,ne,ne,n,ne,nw,n,ne,ne,nw,ne,ne,ne,nw,ne,ne,sw,n,ne,ne,ne,ne,ne,ne,ne,n,ne,sw,n,ne,nw,ne,ne,ne,ne,ne,sw,sw,nw,ne,ne,ne,se,nw,sw,n,ne,n,nw,ne,ne,ne,n,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,sw,ne,ne,ne,ne,s,ne,ne,se,ne,ne,n,ne,n,ne,ne,ne,s,ne,ne,se,ne,ne,ne,ne,ne,ne,se,ne,n,ne,ne,ne,ne,ne,ne,ne,ne,n,ne,s,se,se,n,s,ne,s,s,ne,ne,n,ne,ne,n,ne,ne,ne,ne,ne,ne,ne,sw,ne,ne,n,ne,ne,se,se,nw,n,ne,se,sw,ne,ne,ne,ne,n,sw,se,ne,n,se,n,sw,ne,se,ne,ne,ne,ne,s,ne,ne,n,s,n,ne,ne,ne,s,ne,n,n,ne,ne,s,ne,n,ne,ne,ne,n,n,n,n,ne,ne,s,ne,ne,ne,ne,ne,ne,s,ne,ne,ne,ne,s,n,ne,se,ne,n,n,n,nw,ne,ne,n,n,ne,n,se,ne,n,ne,ne,ne,ne,n,nw,ne,s,ne,n,ne,n,ne,s,n,ne,n,ne,ne,n,n,se,n,ne,nw,ne,ne,se,n,ne,n,ne,ne,ne,ne,n,ne,n,ne,sw,ne,ne,ne,n,ne,ne,ne,s,n,n,ne,ne,ne,se,ne,nw,ne,ne,nw,n,ne,ne,ne,n,ne,ne,se,ne,n,nw,s,n,ne,nw,ne,n,ne,nw,s,ne,s,n,n,se,n,ne,ne,ne,ne,n,s,se,sw,n,n,ne,nw,n,ne,sw,ne,ne,n,ne,n,ne,n,se,sw,n,nw,ne,ne,ne,n,ne,n,n,ne,n,ne,ne,n,n,n,sw,ne,ne,n,ne,nw,n,n,ne,n,n,n,nw,n,se,n,ne,ne,sw,ne,ne,ne,ne,n,s,ne,se,n,ne,n,ne,ne,se,ne,ne,n,ne,n,se,ne,n,ne,ne,n,n,s,n,se,n,ne,n,ne,n,ne,n,ne,ne,se,ne,se,ne,sw,n,n,n,se,ne,ne,se,ne,n,ne,n,nw,ne,n,ne,n,ne,sw,n,sw,s,n,n,ne,ne,ne,ne,ne,n,s,n,n,nw,n,ne,n,n,sw,n,n,ne,n,nw,n,n,se,n,ne,ne,ne,ne,n,ne,ne,ne,n,ne,n,n,n,n,ne,n,n,n,n,sw,n,n,ne,n,ne,n,n,n,n,sw,ne,n,s,ne,n,se,ne,ne,ne,sw,n,n,ne,se,n,sw,se,ne,nw,n,sw,n,n,n,n,n,n,ne,se,ne,n,n,n,n,n,s,n,n,n,ne,ne,nw,n,se,s,s,ne,ne,ne,s,ne,ne,ne,s,se,s,n,ne,ne,n,sw,n,ne,n,ne,s,n,ne,n,s,n,ne,n,ne,ne,sw,n,s,ne,ne,n,ne,sw,n,ne,ne,ne,n,sw,n,ne,sw,n,ne,ne,ne,n,ne,ne,n,n,s,ne,ne,sw,n,n,n,ne,n,s,n,n,n,n,sw,n,ne,n,n,n,n,n,ne,s,n,ne,se,ne,ne,n,ne,n,n,s,n,n,n,n,ne,se,sw,n,n,n,n,nw,n,nw,ne,n,n,ne,n,n,sw,s,n,ne,sw,n,s,n,s,n,ne,n,n,n,n,n,n,n,ne,ne,n,ne,sw,ne,ne,n,n,n,n,sw,ne,se,se,s,n,n,se,ne,n,ne,se,n,n,n,n,ne,ne,n,n,n,n,ne,n,s,ne,ne,n,n,n,se,ne,s,nw,n,ne,se,ne,n,sw,n,sw,ne,sw,ne,ne,n,nw,n,n,n,n,n,ne,n,s,s,n,ne,n,ne,n,ne,s,ne,ne,n,n,sw,ne,n,n,n,n,n,n,n,n,ne,se,sw,n,n,s,nw,n,n,n,n,ne,n,ne,sw,n,n,n,ne,nw,sw,nw,s,n,n,s,se,n,n,n,ne,n,ne,n,nw,se,n,n,n,n,nw,n,ne,sw,n,ne,se,n,n,ne,n,n,ne,n,n,n,n,ne,n,nw,n,n,n,n,n,n,n,n,n,n,s,s,n,n,n,ne,sw,n,sw,s,n,n,n,n,n,s,ne,n,se,n,n,s,n,sw,n,n,n,n,n,nw,n,n,n,n,se,s,nw,n,n,ne,n,n,n,sw,n,ne,ne,n,n,s,sw,nw,n,sw,n,se,n,n,s,n,n,sw,n,n,n,n,nw,n,n,ne,n,ne,s,n,ne,sw,n,n,n,n,n,nw,n,s,n,nw,n,n,n,ne,sw,n,n,s,nw,n,nw,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,ne,n,ne,n,n,n,nw,sw,se,n,n,n,n,ne,ne,n,n,n,n,ne,ne,n,ne,n,n,ne,n,n,n,n,nw,n,n,n,sw,n,n,n,n,s,nw,ne,se,nw,s,n,n,n,n,n,se,n,n,sw,ne,n,n,n,n,n,se,n,n,n,n,n,n,n,n,nw,n,n,n,n,n,s,sw,n,n,s,n,s,n,n,n,n,ne,nw,nw,n,ne,n,n,n,n,n,n,n,s,n,n,n,nw,n,n,n,n,n,n,n,se,sw,n,n,nw,nw,n,n,s,s,n,nw,n,n,n,n,n,ne,n,n,n,n,ne,n,n,n,n,n,n,n,n,sw,n,n,n,n,sw,n,n,n,n,n,n,nw,n,sw,nw,sw,se,n,sw,se,sw,se,n,se,n,n,n,s,n,n,ne,nw,n,se,n,ne,n,n,nw,sw,n,n,ne,n,n,n,se,nw,nw,n,n,n,n,ne,n,n,n,s,se,n,n,n,n,se,n,ne,sw,s,n,s,n,n,ne,se,n,sw,nw,n,n,n,nw,sw,n,n,ne,s,sw,nw,n,sw,ne,n,n,nw,n,n,n,nw,n,n,nw,n,n,n,s,n,n,nw,n,n,se,n,n,n,ne,n,ne,n,nw,n,n,ne,n,n,n,sw,ne,sw,n,n,sw,n,n,n,ne,n,n,n,n,nw,n,n,s,n,nw,n,n,n,n,nw,n,n,n,nw,n,n,s,n,n,n,n,n,nw,se,n,n,nw,sw,n,n,n,n,sw,n,se,n,n,s,n,n,n,n,n,n,n,n,n,n,n,nw,nw,n,nw,nw,n,n,nw,n,n,n,n,n,n,n,n,n,nw,n,n,ne,nw,n,sw,nw,n,n,sw,n,n,nw,n,n,ne,n,se,sw,sw,n,n,n,nw,se,se,s,n,n,n,s,n,n,n,n,n,s,n,n,n,n,n,n,n,se,n,n,se,sw,n,n,nw,n,n,n,sw,ne,n,n,n,s,n,n,n,s,s,n,n,s,n,nw,ne,nw,ne,nw,nw,n,ne,n,n,sw,n,n,se,nw,n,se,nw,n,n,n,nw,nw,n,n,nw,s,nw,n,ne,n,nw,n,nw,nw,n,n,n,n,n,sw,nw,ne,n,s,n,nw,n,nw,n,n,n,n,nw,nw,n,nw,n,n,n,n,n,n,n,n,n,n,sw,nw,s,n,n,se,se,n,nw,n,n,s,n,se,nw,n,n,nw,n,sw,se,sw,nw,nw,n,n,n,n,sw,n,se,n,n,sw,sw,nw,nw,n,nw,n,nw,n,se,se,n,ne,n,n,n,sw,n,n,sw,n,s,n,nw,n,n,n,s,n,nw,n,ne,sw,n,s,s,nw,sw,ne,n,ne,ne,n,n,nw,nw,nw,nw,s,nw,nw,n,n,n,n,n,n,n,nw,ne,n,n,n,n,sw,n,n,n,ne,sw,sw,n,ne,n,n,nw,ne,n,nw,n,n,n,n,n,n,n,nw,ne,se,n,n,nw,ne,n,s,s,n,s,nw,n,ne,n,nw,n,n,sw,nw,s,s,nw,nw,n,nw,n,se,n,n,n,n,nw,sw,nw,se,nw,sw,n,nw,nw,n,n,n,nw,n,ne,n,n,nw,nw,nw,se,s,nw,n,nw,nw,n,nw,n,n,n,nw,sw,n,n,n,ne,nw,n,n,n,nw,n,n,n,n,nw,n,nw,n,n,n,n,n,s,n,n,n,n,se,n,n,nw,n,n,nw,nw,se,n,nw,n,n,n,nw,se,nw,s,nw,n,nw,nw,n,nw,n,nw,nw,nw,sw,nw,ne,nw,sw,n,ne,ne,n,n,n,sw,n,n,nw,s,n,nw,ne,nw,sw,nw,sw,n,nw,nw,n,nw,nw,nw,sw,nw,n,nw,nw,n,nw,nw,sw,nw,s,n,nw,nw,n,n,nw,nw,n,n,sw,n,se,n,n,n,n,n,nw,nw,n,nw,nw,nw,nw,n,nw,s,se,nw,s,nw,ne,n,nw,nw,n,n,s,n,s,n,nw,s,n,nw,n,ne,s,n,nw,n,n,s,n,n,n,n,n,se,nw,n,n,sw,se,n,nw,n,n,nw,n,n,n,n,nw,ne,s,n,nw,n,n,nw,n,n,sw,n,n,nw,nw,nw,nw,nw,n,sw,se,nw,n,n,nw,nw,sw,s,nw,n,nw,n,n,n,ne,nw,n,nw,nw,n,n,nw,s,nw,nw,nw,ne,nw,nw,nw,nw,s,nw,n,n,nw,n,nw,n,nw,nw,nw,nw,nw,ne,nw,n,nw,nw,n,n,nw,nw,se,n,s,nw,sw,nw,nw,n,n,nw,ne,nw,nw,n,n,se,ne,nw,s,n,n,n,n,sw,se,nw,n,nw,nw,ne,n,nw,n,n,n,n,n,n,n,se,nw,nw,nw,ne,nw,nw,nw,s,n,nw,sw,se,nw,nw,n,nw,nw,n,nw,nw,nw,nw,ne,sw,se,n,sw,s,nw,n,n,se,nw,nw,ne,nw,n,n,nw,ne,s,n,nw,nw,nw,se,n,s,se,s,nw,n,s,nw,nw,nw,sw,n,n,nw,nw,n,nw,nw,n,nw,n,sw,ne,nw,n,s,n,nw,nw,sw,nw,n,sw,nw,n,nw,s,nw,n,nw,nw,sw,nw,nw,nw,nw,nw,n,n,n,nw,nw,nw,nw,n,nw,n,n,n,n,n,se,n,se,nw,nw,nw,nw,n,nw,nw,nw,n,nw,nw,nw,nw,nw,nw,nw,nw,sw,n,ne,n,se,nw,s,n,nw,nw,n,nw,nw,s,n,nw,nw,nw,nw,nw,se,nw,nw,n,nw,n,nw,se,nw,n,n,n,nw,n,nw,n,sw,n,n,nw,nw,n,nw,sw,nw,n,n,nw,nw,n,sw,nw,n,nw,nw,nw,nw,nw,nw,nw,s,nw,nw,nw,n,nw,n,nw,nw,nw,nw,nw,nw,nw,se,n,se,nw,s,nw,nw,n,nw,n,nw,n,ne,nw,nw,s,n,nw,n,se,n,nw,nw,nw,n,nw,nw,nw,nw,nw,nw,nw,n,n,se,n,nw,nw,nw,nw,ne,se,nw,ne,ne,nw,nw,nw,nw,nw,n,sw,s,sw,nw,n,sw,nw,nw,nw,s,nw,nw,sw,sw,n,nw,nw,nw,n,nw,ne,nw,nw,nw,n,n,nw,nw,nw,se,n,nw,n,n,n,se,nw,n,n,nw,nw,nw,nw,nw,nw,nw,ne,n,nw,nw,nw,nw,nw,ne,se,s,nw,nw,nw,sw,nw,nw,nw,n,nw,nw,nw,nw,s,nw,nw,nw,nw,nw,se,nw,s,nw,se,se,s,nw,nw,n,n,nw,nw,nw,nw,nw,n,nw,nw,nw,nw,nw,n,s,nw,n,n,nw,nw,n,nw,n,s,sw,nw,s,nw,nw,n,se,nw,ne,nw,n,sw,ne,sw,s,sw,n,n,nw,se,nw,nw,nw,n,ne,se,ne,nw,nw,nw,s,sw,n,nw,nw,s,nw,nw,nw,nw,nw,n,nw,nw,nw,s,nw,se,nw,nw,nw,nw,nw,nw,n,nw,nw,nw,n,sw,nw,ne,nw,n,nw,se,n,se,sw,nw,nw,nw,se,n,n,nw,nw,nw,nw,nw,nw,ne,nw,ne,n,sw,n,nw,s,nw,nw,nw,s,nw,nw,sw,nw,nw,n,n,nw,s,nw,nw,s,nw,se,s,nw,sw,n,se,nw,nw,n,s,n,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,ne,nw,nw,nw,s,nw,sw,nw,nw,nw,n,nw,nw,sw,nw,ne,nw,n,nw,nw,nw,nw,nw,n,nw,n,nw,nw,s,nw,ne,nw,n,nw,nw,ne,n,nw,ne,n,nw,nw,nw,nw,ne,nw,nw,nw,nw,sw,nw,nw,nw,n,n,nw,nw,nw,ne,n,s,s,nw,nw,nw,nw,nw,nw,nw,nw,n,ne,nw,nw,nw,n,sw,nw,nw,nw,nw,nw,nw,nw,n,nw,nw,nw,n,n,nw,s,nw,nw,nw,nw,nw,nw,nw,nw,nw,n,nw,ne,ne,nw,nw,nw,nw,nw,nw,nw,nw,ne,nw,n,nw,se,s,s,nw,se,nw,nw,nw,nw,n,s,nw,s,nw,ne,nw,nw,nw,sw,nw,sw,nw,nw,nw,ne,nw,nw,nw,nw,nw,ne,nw,nw,nw,sw,nw,nw,nw,nw,nw,nw,nw,nw,se,nw,s,nw,nw,se,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,n,nw,nw,nw,s,n,nw,ne,nw,nw,se,ne,nw,nw,ne,nw,nw,nw,nw,nw,se,nw,nw,nw,s,s,ne,ne,ne,se,se,sw,se,se,s,s,s,s,s,s,sw,sw,sw,sw,ne,ne,sw,nw,sw,nw,nw,sw,ne,sw,sw,nw,sw,nw,sw,nw,ne,nw,nw,nw,nw,n,ne,sw,nw,nw,nw,n,ne,n,n,n,n,se,nw,se,nw,n,n,n,nw,n,n,n,n,s,n,n,ne,n,n,n,n,n,se,n,n,n,se,n,n,ne,ne,n,ne,ne,ne,se,nw,n,n,ne,nw,n,ne,ne,ne,sw,ne,ne,ne,ne,ne,ne,ne,s,nw,ne,ne,se,ne,ne,se,se,ne,nw,ne,ne,ne,sw,ne,ne,ne,se,se,se,ne,se,ne,se,se,se,se,ne,se,se,ne,se,se,se,se,se,se,sw,s,se,se,s,sw,se,se,se,se,se,se,se,se,se,se,ne,ne,se,se,ne,se,s,s,s,se,sw,se,sw,se,se,s,ne,ne,se,n,se,se,s,nw,n,se,s,se,se,se,se,se,se,se,se,s,se,s,s,se,s,s,s,s,ne,s,ne,n,se,s,nw,nw,s,ne,s,s,s,s,n,s,s,s,s,n,s,n,s,n,s,se,s,s,sw,s,s,nw,s,se,s,s,ne,s,s,s,s,n,sw,s,sw,s,s,sw,n,n,s,ne,sw,ne,n,s,s,s,s,sw,sw,s,sw,s,se,sw,se,sw,nw,s,sw,n,sw,sw,sw,s,nw,sw,s,sw,s,ne,sw,s,sw,s,n,ne,sw,ne,sw,sw,se,sw,n,sw,nw,sw,sw,sw,sw,ne,sw,sw,nw,s,n,nw,s,se,sw,sw,s,sw,sw,sw,sw,sw,sw,nw,sw,sw,sw,sw,sw,sw,sw,nw,sw,sw,sw,sw,sw,sw,sw,nw,sw,nw,sw,s,s,sw,sw,nw,se,se,sw,sw,nw,sw,s,sw,nw,sw,sw,nw,sw,s,sw,nw,s,se,sw,ne,sw,nw,sw,nw,sw,n,nw,sw,sw,sw,sw,n,sw,nw,n,sw,sw,sw,nw,sw,n,nw,nw,sw,sw,nw,nw,sw,sw,nw,sw,sw,sw,ne,sw,nw,sw,nw,nw,n,nw,ne,n,nw,sw,nw,sw,nw,nw,nw,nw,nw,nw,se,sw,nw,sw,nw,sw,sw,se,sw,sw,s,s,nw,nw,nw,nw,nw,nw,nw,n,sw,nw,nw,s,sw,nw,nw,nw,sw,ne,sw,se,nw,nw,n,nw,nw,nw,nw,sw,nw,nw,nw,nw,sw,nw,se,sw,nw,nw,nw,nw,nw,nw,nw,nw,se,nw,nw,nw,nw,nw,s,nw,ne,nw,n,nw,nw,ne,nw,nw,ne,sw,nw,se,nw,nw,nw,ne,nw,n,nw,nw,ne,sw,nw,nw,nw,n,nw,nw,nw,se,nw,nw,n,nw,nw,nw,nw,nw,nw,n,nw,nw,nw,nw,nw,ne,n,nw,nw,n,nw,n,nw,s,nw,nw,n,nw,nw,se,n,nw,se,nw,nw,nw,ne,n,nw,n,sw,n,nw,nw,n,nw,n,n,nw,nw,s,sw,n,nw,n,nw,nw,n,n,se,nw,nw,nw,nw,nw,n,n,n,n,sw,n,n,n,nw,n,n,n,n,n,n,ne,n,n,ne,nw,sw,ne,s,n,n,n,n,nw,n,ne,nw,nw,n,n,sw,n,ne,n,n,n,s,nw,sw,n,n,n,nw,n,sw,n,nw,se,n,n,se,n,n,n,nw,n,n,n,n,n,n,nw,nw,n,n,n,nw,ne,se,s,n,n,n,n,se,nw,nw,n,n,n,n,n,n,n,n,ne,nw,n,n,n,n,n,n,sw,nw,s,sw,n,n,n,ne,ne,n,n,n,n,n,n,n,ne,n,nw,n,ne,n,n,se,n,n,n,ne,n,nw,n,sw,n,nw,n,n,n,n,n,n,n,n,n,ne,ne,n,n,n,ne,n,se,n,n,se,n,n,n,se,sw,se,n,n,n,nw,se,n,ne,n,ne,n,ne,ne,n,n,se,n,n,n,n,n,ne,ne,nw,n,ne,n,n,n,ne,sw,n,n,s,n,n,s,ne,n,ne,n,n,ne,n,n,ne,se,sw,n,s,ne,n,sw,n,n,n,se,ne,n,n,n,s,sw,se,ne,s,se,ne,n,ne,n,se,n,ne,ne,ne,ne,ne,ne,n,n,ne,ne,ne,nw,nw,ne,ne,ne,sw,n,ne,n,ne,n,ne,sw,n,n,n,s,ne,n,ne,ne,ne,se,sw,ne,se,sw,ne,ne,se,sw,ne,n,n,ne,ne,ne,ne,ne,n,n,n,s,n,n,n,ne,ne,ne,ne,ne,ne,s,ne,ne,ne,ne,ne,ne,n,n,n,ne,se,nw,ne,ne,s,ne,n,n,n,ne,ne,n,ne,n,se,se,n,ne,ne,ne,se,ne,ne,s,s,ne,ne,ne,ne,n,sw,ne,ne,ne,n,ne,ne,ne,ne,ne,ne,n,ne,nw,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,se,ne,s,ne,sw,se,ne,sw,n,n,ne,n,se,ne,ne,ne,se,ne,ne,ne,s,ne,ne,n,se,ne,nw,ne,ne,ne,ne,ne,ne,ne,s,ne,ne,n,se,se,se,se,ne,s,ne,ne,ne,ne,ne,ne,sw,ne,ne,ne,ne,ne,ne,nw,ne,ne,ne,s,se,ne,ne,ne,n,n,ne,se,ne,ne,se,ne,ne,se,se,ne,ne,ne,ne,ne,ne,se,nw,se,sw,ne,ne,ne,nw,ne,ne,ne,n,ne,se,sw,nw,s,ne,se,ne,se,s,ne,ne,ne,ne,ne,s,ne,se,n,ne,ne,se,se,ne,ne,ne,ne,n,ne,ne,se,ne,ne,ne,ne,se,ne,ne,ne,ne,ne,se,ne,ne,ne,nw,ne,ne,se,ne,ne,se,se,sw,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,sw,se,ne,n,n,n,se,ne,s,se,sw,sw,ne,ne,ne,sw,ne,se,ne,ne,ne,ne,ne,ne,nw,se,se,se,s,se,ne,s,se,ne,se,s,ne,ne,se,n,se,se,ne,n,ne,ne,se,nw,ne,se,se,nw,sw,s,ne,sw,se,se,ne,ne,s,se,ne,ne,ne,se,nw,ne,se,se,sw,nw,sw,se,ne,ne,se,se,se,se,ne,ne,ne,s,s,se,se,s,se,ne,se,ne,se,ne,ne,se,ne,se,ne,se,se,se,ne,se,se,se,s,se,se,se,n,se,se,ne,ne,se,ne,ne,se,se,se,se,ne,se,se,se,s,ne,se,ne,s,se,se,se,nw,ne,se,n,se,se,se,nw,se,se,nw,s,se,ne,se,nw,se,ne,se,ne,nw,se,se,nw,ne,se,se,n,nw,sw,se,ne,se,n,se,ne,ne,se,nw,se,ne,s,se,ne,se,se,ne,ne,se,n,ne,nw,se,ne,s,se,se,se,s,se,ne,se,se,se,se,se,nw,se,se,se,ne,n,se,ne,se,ne,se,n,se,nw,se,ne,n,nw,ne,ne,se,ne,se,nw,s,se,s,se,se,ne,se,s,se,n,se,se,se,se,se,s,se,s,se,se,se,ne,se,se,ne,se,se,nw,se,se,se,se,se,se,se,se,se,se,se,se,se,ne,s,se,se,se,se,s,se,se,se,n,se,sw,se,nw,se,se,n,ne,sw,se,se,se,se,ne,se,se,se,se,se,se,se,se,se,se,n,se,se,se,n,ne,s,se,se,se,se,se,se,se,se,se,se,se,n,se,s,ne,se,ne,se,se,se,se,se,ne,s,s,se,s,ne,se,se,s,se,se,se,se,se,se,sw,se,se,s,se,se,se,se,se,se,se,se,se,se,se,se,se,se,se,sw,se,se,se,nw,se,se,s,se,n,se,se,se,se,se,se,se,se,se,s,se,n,se,ne,se,s,s,s,se,nw,se,se,se,s,se,se,se,n,ne,se,s,se,nw,se,se,s,s,se,se,se,se,se,se,s,se,nw,se,s,se,s,s,se,se,s,se,se,ne,se,n,se,s,s,s,ne,se,s,se,s,se,se,se,n,se,sw,se,s,se,n,s,se,s,se,se,se,se,s,se,s,se,s,se,s,s,se,se,se,se,se,se,s,se,sw,se,se,nw,s,n,se,sw,s,se,se,sw,ne,sw,nw,s,s,s,s,nw,se,se,se,s,se,se,se,se,ne,s,se,nw,s,se,se,se,s,se,se,s,sw,s,s,se,se,ne,s,se,se,s,se,s,se,s,s,se,se,se,n,se,sw,s,se,s,s,s,se,se,se,ne,se,s,s,s,se,s,ne,se,n,se,s,s,s,s,s,s,se,se,se,se,nw,se,s,s,se,s,se,s,se,s,se,sw,s,nw,se,se,se,se,se,s,s,sw,se,nw,s,se,s,s,s,ne,s,s,s,s,se,s,se,s,nw,se,s,se,s,se,se,nw,nw,se,nw,nw,s,s,nw,se,s,s,nw,se,s,se,se,se,s,s,se,se,ne,s,s,s,s,se,s,se,se,se,se,ne,s,se,se,s,s,se,se,se,nw,s,ne,s,se,s,s,s,s,s,s,ne,s,s,s,s,se,s,s,s,se,sw,se,s,s,se,se,ne,s,se,se,se,s,s,sw,s,s,nw,sw,sw,se,s,s,s,se,s,s,s,se,se,s,s,s,nw,se,se,se,nw,se,s,s,s,s,s,se,ne,se,s,se,s,s,ne,se,se,ne,s,s,s,ne,s,se,ne,se,s,s,s,s,s,s,s,s,s,sw,s,ne,s,s,se,se,se,s,sw,s,sw,s,s,s,n,nw,s,s,s,se,s,nw,se,se,s,s,s,s,s,ne,se,s,s,s,se,s,s,s,s,nw,s,sw,sw,s,s,s,se,ne,s,s,s,ne,s,s,s,n,s,s,s,ne,se,s,s,s,s,s,s,s,s,s,s,nw,s,se,s,s,ne,s,ne,se,s,s,sw,s,ne,s,s,s,se,se,s,s,nw,s,s,s,s,s,nw,s,s,s,nw,s,s,s,s,s,s,s,se,s,sw,s,se,ne,s,n,nw,se,s,s,s,se,s,se,s,n,s,s,ne,s,s,nw,nw,nw,s,s,s,s,nw,s,s,s,s,s,s,s,nw,s,s,s,s,sw,s,s,sw,n,nw,ne,s,s,s,s,n,s,s,s,n,sw,n,s,s,s,s,s,s,nw,s,n,se,s,s,s,ne,s,se,nw,sw,se,sw,s,s,s,s,s,s,sw,s,se,s,n,s,sw,s,s,sw,sw,s,se,s,sw,s,s,s,sw,s,ne,s,s,s,s,sw,s,s,s,s,nw,s,se,sw,se,nw,se,ne,s,s,s,n,sw,s,sw,s,s,s,s,s,s,s,s,s,s,sw,sw,s,se,s,nw,nw,s,ne,nw,s,n,se,n,n,s,s,ne,sw,s,se,s,sw,s,s,s,se,sw,s,sw,nw,sw,sw,s,se,s,n,ne,s,s,sw,sw,s,s,sw,sw,s,n,s,sw,s,sw,s,s,nw,sw,s,s,s,sw,ne,ne,sw,sw,s,sw,se,s,se,s,ne,se,s,s,nw,sw,s,ne,sw,ne,s,sw,s,s,s,s,s,s,s,s,s,n,se,s,s,s,s,s,s,s,sw,sw,s,n,sw,sw,sw,s,s,sw,s,ne,se,s,s,s,sw,s,s,s,sw,s,sw,s,sw,s,s,s,s,s,sw,s,sw,nw,sw,s,se,sw,s,nw,s,s,s,n,ne,sw,sw,s,s,s,s,sw,s,s,s,n,s,sw,n,s,s,sw,s,sw,s,sw,s,s,n,s,n,n,sw,sw,sw,sw,sw,sw,s,ne,ne,s,sw,s,sw,s,sw,se,sw,s,sw,sw,n,s,ne,sw,sw,s,sw,se,se,nw,sw,sw,se,ne,s,s,s,s,s,sw,sw,sw,n,s,se,s,s,n,s,sw,n,sw,sw,sw,ne,s,sw,sw,s,n,sw,n,s,s,s,ne,s,se,s,sw,ne,sw,sw,s,sw,sw,sw,s,s,se,s,sw,s,s,ne,sw,s,sw,sw,s,s,sw,ne,s,sw,sw,sw,sw,n,s,ne,ne,ne,s,sw,s,se,se,sw,s,sw,sw,n,sw,sw,nw,sw,s,sw,s,sw,s,sw,s,sw,sw,s,sw,sw,sw,n,s,sw,ne,sw,s,nw,s,s,sw,s,sw,nw,sw,sw,sw,sw,nw,sw,sw,sw,sw,sw,s,s,s,s,n,s,sw,s,sw,sw,s,ne,s,nw,n,nw,s,sw,sw,sw,sw,sw,sw,sw,sw,s,s,n,sw,s,s,n,se,s,se,sw,s,sw,ne,sw,sw,sw,sw,s,sw,sw,ne,s,sw,sw,se,sw,s,n,s,s,sw,s,se,sw,sw,se,sw,sw,sw,nw,sw,sw,sw,nw,sw,s,s,s,nw,sw,s,n,sw,s,sw,n,sw,sw,s,sw,sw,s,s,nw,s,sw,sw,sw,ne,sw,sw,nw,s,ne,s,sw,sw,sw,sw,sw,n,sw,sw,sw,s,n,sw,s,sw,se,sw,sw,sw,sw,sw,sw,sw,s,sw,sw,ne,sw,s,sw,s,sw,sw,sw,n,sw,sw,sw,s,sw,sw,s,sw,sw,sw,sw,n,s,s,sw,ne,sw,se,n,sw,s,sw,n,sw,sw,sw,nw,sw,s,s,n,sw,s,sw,sw,sw,ne,sw,sw,nw,ne,n,sw,sw,sw,sw,s,sw,n,sw,s,s,sw,s,s,s,sw,sw,sw,s,sw,sw,s,s,sw,s,s,se,sw,sw,s,sw,sw,se,sw,s,se,sw,sw,sw,sw,se,sw,sw,sw,sw,s,sw,s,n,sw,sw,sw,n,n,sw,sw,nw,sw,sw,sw,se,sw,nw,sw,sw,sw,sw,sw,sw,sw,s,sw,n,nw,n,sw,nw,sw,sw,sw,sw,s,ne,sw,ne,sw,se,n,s,s,sw,sw,sw,n,se,s,sw,se,s,sw,sw,sw,ne,s,n,sw,sw,sw,sw,sw,s,sw,nw,sw,sw,sw,sw,sw,sw,nw,sw,nw,sw,s,sw,sw,sw,sw,se,sw,sw,sw,sw,sw,ne,se,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,nw,sw,sw,sw,sw,sw,nw,sw,s,sw,nw,sw,sw,sw,sw,n diff --git a/2017/d11/ex2/ex2.py b/2017/d11/ex2/ex2.py new file mode 100755 index 0000000..9355eaa --- /dev/null +++ b/2017/d11/ex2/ex2.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python + +import enum +import sys +from collections.abc import Iterator +from typing import NamedTuple + + +class Point(NamedTuple): + x: int + y: int + + +class Direction(enum.StrEnum): + NORTH_WEST = "nw" + NORTH = "n" + NORTH_EAST = "ne" + SOUTH_EAST = "se" + SOUTH = "s" + SOUTH_WEST = "sw" + + # https://www.redblobgames.com/grids/hexagons/#coordinates-axial + def apply(self, p: Point) -> Point: + # (x, y) <=> (q, r) + match self: + case Direction.NORTH_WEST: + dx, dy = -1, 0 + case Direction.NORTH: + dx, dy = 0, -1 + case Direction.NORTH_EAST: + dx, dy = 1, -1 + case Direction.SOUTH_EAST: + dx, dy = 1, 0 + case Direction.SOUTH: + dx, dy = 0, 1 + case Direction.SOUTH_WEST: + dx, dy = -1, 1 + return Point(p.x + dx, p.y + dy) + + +def solve(input: str) -> int: + def parse(input: str) -> list[Direction]: + return [Direction(dir) for dir in input.strip().split(",")] + + # https://www.redblobgames.com/grids/hexagons/#distances-axial + def hex_dist(a: Point, b: Point) -> int: + dx, dy = a.x - b.x, a.y - b.y + return (abs(dx) + abs(dx + dy) + abs(dy)) // 2 + + def walk(directions: list[Direction]) -> Iterator[Point]: + pos = Point(0, 0) + for dir in directions: + pos = dir.apply(pos) + yield pos + + directions = parse(input) + return max(hex_dist(p, Point(0, 0)) for p in walk(directions)) + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d11/ex2/input b/2017/d11/ex2/input new file mode 100644 index 0000000..093ccc2 --- /dev/null +++ b/2017/d11/ex2/input @@ -0,0 +1 @@ +nw,n,ne,sw,s,s,se,se,ne,s,se,se,ne,ne,s,se,s,ne,sw,ne,ne,s,se,nw,n,ne,nw,n,n,ne,n,n,ne,n,ne,n,n,n,n,nw,n,n,nw,n,nw,n,s,sw,sw,sw,n,nw,n,nw,nw,n,nw,nw,nw,nw,nw,nw,se,nw,nw,nw,se,sw,sw,nw,nw,sw,sw,nw,nw,nw,nw,nw,s,sw,nw,s,sw,sw,nw,sw,sw,nw,sw,sw,nw,sw,sw,nw,sw,sw,sw,sw,sw,sw,sw,sw,s,se,sw,sw,nw,sw,sw,se,sw,sw,s,sw,sw,sw,s,n,s,sw,sw,s,sw,s,sw,ne,sw,s,s,s,n,sw,s,s,sw,s,s,s,nw,s,s,n,nw,ne,n,s,se,n,s,s,s,s,ne,s,s,s,sw,s,ne,n,s,se,s,se,s,s,s,s,ne,s,nw,se,se,ne,nw,se,s,nw,s,s,s,nw,s,sw,s,s,se,nw,se,sw,se,sw,s,s,sw,se,se,s,n,se,se,se,se,se,se,s,se,s,se,se,nw,s,n,se,se,se,se,n,nw,se,se,se,se,se,se,se,se,se,se,se,ne,se,se,sw,se,s,se,ne,se,n,se,ne,se,se,se,se,se,n,se,se,ne,ne,ne,ne,se,se,ne,se,se,s,ne,se,se,n,se,sw,s,se,se,ne,ne,ne,s,s,ne,se,nw,nw,s,se,ne,ne,ne,se,sw,ne,se,ne,ne,ne,se,n,s,n,se,ne,ne,se,se,nw,ne,se,ne,nw,ne,se,ne,ne,n,ne,ne,ne,ne,ne,se,ne,nw,se,ne,ne,ne,s,ne,ne,ne,ne,ne,sw,ne,ne,ne,se,ne,ne,ne,ne,nw,ne,ne,s,sw,ne,ne,ne,ne,ne,n,s,sw,n,ne,s,ne,nw,sw,sw,s,ne,ne,ne,ne,sw,n,ne,ne,nw,n,ne,n,n,s,n,ne,nw,ne,n,ne,ne,ne,ne,sw,n,ne,sw,sw,ne,nw,ne,ne,n,ne,ne,ne,n,n,s,ne,ne,ne,n,ne,ne,n,n,n,n,nw,n,n,ne,n,ne,ne,n,ne,ne,ne,ne,ne,n,n,n,ne,n,n,n,n,n,n,n,n,n,n,ne,n,n,nw,ne,n,s,nw,se,ne,se,n,n,n,sw,n,n,ne,sw,n,n,s,s,n,n,n,ne,nw,nw,n,n,n,s,se,n,n,n,nw,n,nw,n,n,n,n,n,se,n,n,n,s,sw,n,n,n,n,n,n,n,n,n,n,n,se,n,n,n,nw,n,n,se,ne,ne,nw,n,n,n,nw,n,n,n,ne,s,n,nw,ne,n,s,n,n,n,n,sw,n,nw,n,n,n,ne,s,n,s,se,n,n,n,nw,nw,n,nw,sw,n,n,nw,n,n,nw,nw,n,n,sw,nw,nw,nw,n,se,nw,n,nw,nw,nw,n,n,nw,n,n,nw,nw,n,ne,nw,nw,sw,n,n,n,nw,nw,n,n,n,n,n,sw,nw,nw,n,nw,n,nw,nw,nw,n,nw,n,n,n,n,nw,nw,nw,s,s,n,nw,sw,nw,n,nw,ne,n,nw,ne,ne,sw,n,se,nw,sw,s,nw,nw,nw,nw,nw,ne,nw,nw,nw,ne,nw,se,n,n,nw,se,nw,nw,nw,n,nw,se,nw,nw,nw,nw,nw,nw,nw,nw,nw,ne,nw,nw,nw,se,nw,nw,nw,nw,s,s,s,nw,nw,nw,nw,s,n,nw,nw,se,nw,nw,nw,nw,nw,sw,nw,nw,nw,nw,nw,ne,sw,sw,sw,nw,nw,sw,nw,nw,ne,sw,ne,nw,nw,nw,nw,nw,s,nw,nw,nw,nw,nw,se,sw,nw,n,sw,ne,nw,nw,nw,nw,nw,sw,nw,se,sw,sw,sw,nw,s,nw,nw,s,ne,nw,nw,nw,nw,nw,sw,nw,s,sw,nw,nw,se,sw,sw,nw,nw,sw,sw,n,sw,nw,ne,se,nw,nw,ne,nw,nw,sw,nw,nw,se,sw,nw,sw,nw,nw,ne,nw,s,nw,nw,nw,nw,nw,nw,nw,nw,nw,sw,n,sw,sw,se,sw,nw,nw,nw,nw,nw,sw,nw,nw,nw,sw,nw,nw,se,sw,nw,nw,n,nw,sw,nw,nw,nw,nw,n,sw,sw,sw,se,nw,nw,sw,sw,sw,sw,nw,nw,sw,sw,sw,nw,sw,sw,se,sw,sw,ne,sw,nw,s,s,se,ne,sw,sw,sw,sw,nw,nw,nw,sw,nw,nw,nw,s,nw,nw,nw,sw,s,s,nw,sw,sw,ne,n,s,nw,nw,sw,nw,nw,nw,sw,sw,ne,sw,sw,nw,n,sw,sw,nw,se,sw,sw,se,ne,sw,sw,sw,nw,sw,sw,sw,sw,nw,nw,nw,nw,n,sw,sw,se,n,nw,nw,sw,sw,sw,sw,nw,se,sw,sw,se,n,s,sw,sw,n,n,sw,sw,n,sw,sw,sw,sw,sw,se,sw,sw,sw,se,nw,sw,s,sw,sw,sw,ne,sw,sw,sw,sw,sw,sw,sw,n,sw,sw,sw,sw,sw,sw,sw,nw,sw,sw,sw,ne,sw,s,sw,sw,sw,sw,sw,sw,sw,s,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,s,n,s,s,sw,n,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,n,sw,s,sw,sw,sw,sw,sw,sw,ne,sw,se,sw,sw,nw,sw,sw,sw,s,sw,sw,sw,sw,sw,s,sw,sw,ne,sw,sw,sw,sw,n,sw,n,sw,n,sw,sw,sw,sw,sw,sw,n,s,se,s,ne,sw,sw,s,s,s,se,s,nw,s,sw,s,s,s,se,s,sw,sw,se,sw,sw,sw,s,se,nw,sw,sw,se,s,s,sw,sw,s,sw,sw,s,sw,sw,ne,n,sw,sw,nw,ne,s,sw,sw,sw,sw,sw,sw,sw,sw,sw,s,n,sw,s,n,s,s,sw,sw,nw,se,n,sw,sw,sw,nw,s,sw,sw,s,sw,sw,sw,sw,sw,sw,sw,sw,s,s,sw,s,n,s,sw,sw,sw,s,s,nw,s,sw,s,s,s,sw,sw,s,se,se,nw,sw,sw,sw,s,s,sw,sw,ne,sw,s,sw,s,s,s,sw,s,s,sw,sw,sw,nw,sw,s,sw,sw,n,sw,sw,sw,s,sw,sw,sw,sw,s,nw,nw,sw,sw,s,s,n,sw,sw,se,s,sw,s,n,s,sw,s,sw,s,sw,sw,sw,sw,sw,n,s,se,s,s,s,s,s,ne,s,sw,n,sw,s,s,sw,s,sw,s,sw,ne,s,s,nw,n,s,s,n,se,sw,sw,s,s,s,s,s,s,s,s,sw,se,sw,s,nw,s,s,s,s,s,se,s,s,sw,sw,ne,s,s,s,sw,ne,s,sw,s,s,s,s,s,s,n,s,s,s,s,sw,s,s,s,sw,sw,s,sw,sw,nw,s,ne,s,s,s,se,sw,se,s,s,s,sw,sw,s,sw,s,s,s,n,s,sw,s,sw,s,s,nw,s,s,n,nw,s,ne,s,sw,s,s,s,s,ne,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,nw,s,s,sw,nw,s,n,s,s,nw,sw,s,se,s,s,s,s,sw,s,ne,s,s,s,s,s,s,s,s,s,sw,se,s,s,s,s,s,s,s,s,n,s,s,s,s,ne,n,ne,s,sw,n,s,s,s,s,s,s,s,s,ne,s,s,nw,se,s,s,s,s,s,s,ne,s,s,s,ne,s,s,s,s,s,se,s,s,s,s,s,s,s,ne,s,s,s,s,s,s,s,se,s,s,s,s,se,s,s,ne,s,n,ne,s,s,s,nw,ne,se,s,s,s,n,sw,s,s,s,s,s,s,s,sw,s,s,se,s,s,s,s,n,s,se,s,s,nw,s,s,sw,s,sw,se,s,s,s,s,s,s,s,s,se,se,se,s,se,s,s,s,s,se,s,s,se,s,se,s,n,s,s,se,s,sw,se,s,s,se,se,s,s,se,s,se,se,nw,n,s,nw,ne,ne,s,s,sw,s,se,nw,ne,s,s,se,s,s,s,s,s,s,s,se,s,s,se,s,se,s,ne,se,se,s,se,se,s,nw,s,ne,sw,s,s,se,s,s,se,s,sw,s,s,se,s,sw,n,s,nw,se,s,n,nw,s,s,se,s,s,nw,s,se,s,ne,s,s,se,s,se,s,nw,se,ne,s,nw,se,s,se,ne,s,s,sw,s,s,s,se,se,se,s,s,s,s,se,nw,s,se,s,s,s,s,n,se,s,n,se,se,se,se,nw,sw,nw,se,se,se,s,se,n,s,se,s,nw,ne,se,s,se,s,se,s,ne,se,nw,se,se,ne,s,nw,sw,n,se,se,se,n,se,se,se,nw,se,sw,s,n,se,s,sw,se,s,s,se,s,se,se,se,nw,se,se,s,nw,se,n,se,se,se,s,nw,se,se,s,ne,se,se,s,s,s,se,se,ne,s,nw,s,se,se,sw,se,se,se,se,s,se,se,se,s,s,se,nw,se,se,se,s,se,s,nw,se,se,se,ne,se,se,se,se,se,se,se,se,se,se,s,ne,se,ne,se,n,sw,s,sw,se,sw,se,se,se,sw,se,se,s,se,se,s,nw,se,nw,se,se,se,se,se,se,n,se,se,se,se,s,se,nw,se,se,se,se,se,nw,nw,se,se,se,se,s,sw,s,s,se,se,s,se,se,nw,se,se,se,s,s,s,se,se,n,se,nw,sw,n,se,se,se,se,se,se,se,se,s,ne,se,ne,se,se,se,se,nw,se,se,s,se,n,se,se,se,se,se,se,s,se,s,s,ne,s,se,sw,ne,se,se,se,sw,se,se,se,se,s,nw,n,se,se,se,se,s,se,se,se,se,n,se,se,se,se,se,nw,ne,se,se,n,se,s,se,se,s,se,n,se,se,ne,se,s,s,ne,s,se,se,se,se,se,se,nw,nw,se,se,se,se,n,se,se,se,se,s,se,s,se,se,se,se,se,n,se,se,se,se,se,se,se,n,n,sw,se,n,se,se,se,se,se,se,se,se,s,sw,se,nw,nw,ne,se,se,se,se,se,se,ne,se,ne,se,se,ne,ne,se,sw,se,se,se,ne,se,se,se,ne,se,nw,se,se,se,sw,se,nw,se,se,se,se,ne,sw,se,se,se,se,se,se,s,ne,sw,se,s,s,se,se,nw,se,ne,se,se,se,se,se,se,s,se,se,se,se,se,se,se,se,sw,ne,sw,se,se,se,se,nw,se,se,se,se,ne,se,se,se,n,se,ne,nw,se,se,se,sw,se,se,se,se,se,ne,se,se,sw,se,se,n,n,se,se,se,se,se,se,se,se,nw,se,s,s,se,se,s,se,ne,se,n,n,se,nw,se,se,se,se,nw,sw,s,ne,nw,se,ne,se,n,se,se,se,ne,se,se,sw,s,se,se,n,ne,se,se,ne,se,se,ne,se,se,se,se,se,se,se,se,se,nw,n,sw,se,se,se,se,ne,se,se,se,se,se,se,se,ne,se,ne,se,se,n,se,se,n,ne,n,se,se,se,se,ne,se,se,se,sw,se,se,ne,se,s,se,ne,se,n,se,se,se,se,sw,se,ne,se,s,se,se,ne,n,se,se,nw,se,se,nw,nw,ne,se,se,sw,se,se,n,ne,n,ne,s,se,se,se,se,ne,s,nw,se,se,se,ne,se,se,sw,ne,s,se,ne,se,se,se,se,sw,se,se,sw,ne,ne,ne,se,se,se,ne,ne,ne,ne,se,se,ne,ne,se,s,nw,se,se,se,se,ne,se,se,se,se,se,n,se,se,ne,se,se,se,se,se,se,s,se,n,se,ne,ne,se,s,ne,ne,s,ne,ne,se,se,se,ne,se,ne,se,se,ne,sw,ne,ne,ne,se,se,ne,ne,se,n,se,nw,se,n,ne,ne,ne,se,se,se,ne,ne,se,s,ne,ne,se,ne,se,nw,ne,ne,ne,ne,n,se,ne,se,ne,se,se,ne,ne,s,ne,ne,ne,ne,se,ne,ne,se,ne,ne,se,sw,s,s,se,se,se,ne,se,ne,ne,ne,ne,ne,se,se,ne,se,se,se,ne,ne,nw,sw,se,se,sw,sw,ne,se,se,se,se,s,nw,sw,ne,se,se,ne,ne,ne,ne,se,se,se,se,se,ne,se,ne,ne,ne,s,ne,ne,n,ne,ne,ne,s,n,se,se,nw,nw,ne,ne,n,ne,ne,ne,se,se,ne,se,se,sw,ne,se,ne,ne,se,se,ne,se,s,ne,ne,ne,n,sw,ne,ne,ne,ne,ne,se,se,s,nw,se,ne,ne,ne,n,ne,ne,n,ne,se,sw,ne,ne,se,sw,ne,ne,s,ne,ne,nw,sw,se,ne,ne,sw,n,ne,ne,ne,sw,ne,s,ne,ne,se,ne,nw,ne,ne,ne,se,n,ne,n,ne,ne,ne,ne,ne,ne,ne,ne,se,se,ne,ne,ne,ne,ne,s,ne,ne,ne,ne,se,ne,ne,ne,ne,ne,ne,ne,ne,ne,n,n,se,ne,ne,ne,ne,ne,sw,s,ne,ne,sw,n,ne,n,nw,se,ne,se,ne,ne,ne,ne,se,ne,ne,se,ne,se,se,ne,ne,s,n,sw,se,sw,se,ne,ne,nw,ne,se,ne,ne,ne,se,ne,ne,se,nw,ne,ne,ne,ne,ne,ne,se,se,ne,se,ne,s,se,nw,se,ne,ne,ne,se,s,ne,ne,ne,se,se,se,se,se,ne,se,nw,se,ne,ne,ne,n,n,n,nw,ne,s,ne,se,ne,ne,nw,s,ne,nw,ne,nw,se,ne,ne,n,ne,ne,ne,sw,ne,se,n,ne,ne,ne,ne,se,s,ne,ne,sw,ne,ne,s,ne,se,ne,ne,ne,ne,ne,ne,ne,se,ne,nw,ne,n,ne,s,ne,ne,ne,nw,ne,n,ne,nw,ne,ne,ne,ne,s,ne,ne,n,ne,ne,ne,ne,sw,ne,ne,ne,se,ne,se,ne,se,nw,ne,ne,ne,sw,n,n,nw,nw,ne,ne,ne,ne,se,ne,ne,ne,ne,ne,s,ne,ne,sw,ne,ne,s,ne,ne,ne,ne,s,ne,ne,ne,ne,ne,ne,ne,ne,ne,s,ne,ne,s,sw,ne,nw,ne,ne,ne,ne,ne,ne,ne,ne,s,ne,sw,se,ne,se,ne,ne,n,ne,s,ne,ne,ne,n,ne,n,n,ne,ne,ne,ne,ne,n,ne,se,ne,se,ne,ne,s,ne,n,ne,ne,ne,ne,se,ne,nw,ne,s,sw,ne,ne,ne,sw,ne,ne,s,ne,ne,s,se,ne,s,n,ne,ne,ne,ne,ne,se,ne,ne,n,ne,ne,nw,nw,ne,ne,ne,ne,nw,ne,n,ne,ne,ne,ne,n,ne,ne,ne,ne,ne,s,n,ne,n,n,ne,nw,nw,ne,n,nw,ne,ne,n,ne,ne,s,s,ne,se,ne,ne,ne,n,ne,ne,ne,ne,ne,n,s,se,ne,ne,s,ne,ne,se,ne,ne,n,n,ne,ne,se,n,ne,s,ne,ne,n,ne,nw,ne,nw,nw,ne,se,ne,ne,ne,ne,se,ne,se,ne,ne,ne,n,ne,nw,n,ne,ne,nw,ne,ne,ne,nw,ne,ne,sw,n,ne,ne,ne,ne,ne,ne,ne,n,ne,sw,n,ne,nw,ne,ne,ne,ne,ne,sw,sw,nw,ne,ne,ne,se,nw,sw,n,ne,n,nw,ne,ne,ne,n,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,sw,ne,ne,ne,ne,s,ne,ne,se,ne,ne,n,ne,n,ne,ne,ne,s,ne,ne,se,ne,ne,ne,ne,ne,ne,se,ne,n,ne,ne,ne,ne,ne,ne,ne,ne,n,ne,s,se,se,n,s,ne,s,s,ne,ne,n,ne,ne,n,ne,ne,ne,ne,ne,ne,ne,sw,ne,ne,n,ne,ne,se,se,nw,n,ne,se,sw,ne,ne,ne,ne,n,sw,se,ne,n,se,n,sw,ne,se,ne,ne,ne,ne,s,ne,ne,n,s,n,ne,ne,ne,s,ne,n,n,ne,ne,s,ne,n,ne,ne,ne,n,n,n,n,ne,ne,s,ne,ne,ne,ne,ne,ne,s,ne,ne,ne,ne,s,n,ne,se,ne,n,n,n,nw,ne,ne,n,n,ne,n,se,ne,n,ne,ne,ne,ne,n,nw,ne,s,ne,n,ne,n,ne,s,n,ne,n,ne,ne,n,n,se,n,ne,nw,ne,ne,se,n,ne,n,ne,ne,ne,ne,n,ne,n,ne,sw,ne,ne,ne,n,ne,ne,ne,s,n,n,ne,ne,ne,se,ne,nw,ne,ne,nw,n,ne,ne,ne,n,ne,ne,se,ne,n,nw,s,n,ne,nw,ne,n,ne,nw,s,ne,s,n,n,se,n,ne,ne,ne,ne,n,s,se,sw,n,n,ne,nw,n,ne,sw,ne,ne,n,ne,n,ne,n,se,sw,n,nw,ne,ne,ne,n,ne,n,n,ne,n,ne,ne,n,n,n,sw,ne,ne,n,ne,nw,n,n,ne,n,n,n,nw,n,se,n,ne,ne,sw,ne,ne,ne,ne,n,s,ne,se,n,ne,n,ne,ne,se,ne,ne,n,ne,n,se,ne,n,ne,ne,n,n,s,n,se,n,ne,n,ne,n,ne,n,ne,ne,se,ne,se,ne,sw,n,n,n,se,ne,ne,se,ne,n,ne,n,nw,ne,n,ne,n,ne,sw,n,sw,s,n,n,ne,ne,ne,ne,ne,n,s,n,n,nw,n,ne,n,n,sw,n,n,ne,n,nw,n,n,se,n,ne,ne,ne,ne,n,ne,ne,ne,n,ne,n,n,n,n,ne,n,n,n,n,sw,n,n,ne,n,ne,n,n,n,n,sw,ne,n,s,ne,n,se,ne,ne,ne,sw,n,n,ne,se,n,sw,se,ne,nw,n,sw,n,n,n,n,n,n,ne,se,ne,n,n,n,n,n,s,n,n,n,ne,ne,nw,n,se,s,s,ne,ne,ne,s,ne,ne,ne,s,se,s,n,ne,ne,n,sw,n,ne,n,ne,s,n,ne,n,s,n,ne,n,ne,ne,sw,n,s,ne,ne,n,ne,sw,n,ne,ne,ne,n,sw,n,ne,sw,n,ne,ne,ne,n,ne,ne,n,n,s,ne,ne,sw,n,n,n,ne,n,s,n,n,n,n,sw,n,ne,n,n,n,n,n,ne,s,n,ne,se,ne,ne,n,ne,n,n,s,n,n,n,n,ne,se,sw,n,n,n,n,nw,n,nw,ne,n,n,ne,n,n,sw,s,n,ne,sw,n,s,n,s,n,ne,n,n,n,n,n,n,n,ne,ne,n,ne,sw,ne,ne,n,n,n,n,sw,ne,se,se,s,n,n,se,ne,n,ne,se,n,n,n,n,ne,ne,n,n,n,n,ne,n,s,ne,ne,n,n,n,se,ne,s,nw,n,ne,se,ne,n,sw,n,sw,ne,sw,ne,ne,n,nw,n,n,n,n,n,ne,n,s,s,n,ne,n,ne,n,ne,s,ne,ne,n,n,sw,ne,n,n,n,n,n,n,n,n,ne,se,sw,n,n,s,nw,n,n,n,n,ne,n,ne,sw,n,n,n,ne,nw,sw,nw,s,n,n,s,se,n,n,n,ne,n,ne,n,nw,se,n,n,n,n,nw,n,ne,sw,n,ne,se,n,n,ne,n,n,ne,n,n,n,n,ne,n,nw,n,n,n,n,n,n,n,n,n,n,s,s,n,n,n,ne,sw,n,sw,s,n,n,n,n,n,s,ne,n,se,n,n,s,n,sw,n,n,n,n,n,nw,n,n,n,n,se,s,nw,n,n,ne,n,n,n,sw,n,ne,ne,n,n,s,sw,nw,n,sw,n,se,n,n,s,n,n,sw,n,n,n,n,nw,n,n,ne,n,ne,s,n,ne,sw,n,n,n,n,n,nw,n,s,n,nw,n,n,n,ne,sw,n,n,s,nw,n,nw,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,ne,n,ne,n,n,n,nw,sw,se,n,n,n,n,ne,ne,n,n,n,n,ne,ne,n,ne,n,n,ne,n,n,n,n,nw,n,n,n,sw,n,n,n,n,s,nw,ne,se,nw,s,n,n,n,n,n,se,n,n,sw,ne,n,n,n,n,n,se,n,n,n,n,n,n,n,n,nw,n,n,n,n,n,s,sw,n,n,s,n,s,n,n,n,n,ne,nw,nw,n,ne,n,n,n,n,n,n,n,s,n,n,n,nw,n,n,n,n,n,n,n,se,sw,n,n,nw,nw,n,n,s,s,n,nw,n,n,n,n,n,ne,n,n,n,n,ne,n,n,n,n,n,n,n,n,sw,n,n,n,n,sw,n,n,n,n,n,n,nw,n,sw,nw,sw,se,n,sw,se,sw,se,n,se,n,n,n,s,n,n,ne,nw,n,se,n,ne,n,n,nw,sw,n,n,ne,n,n,n,se,nw,nw,n,n,n,n,ne,n,n,n,s,se,n,n,n,n,se,n,ne,sw,s,n,s,n,n,ne,se,n,sw,nw,n,n,n,nw,sw,n,n,ne,s,sw,nw,n,sw,ne,n,n,nw,n,n,n,nw,n,n,nw,n,n,n,s,n,n,nw,n,n,se,n,n,n,ne,n,ne,n,nw,n,n,ne,n,n,n,sw,ne,sw,n,n,sw,n,n,n,ne,n,n,n,n,nw,n,n,s,n,nw,n,n,n,n,nw,n,n,n,nw,n,n,s,n,n,n,n,n,nw,se,n,n,nw,sw,n,n,n,n,sw,n,se,n,n,s,n,n,n,n,n,n,n,n,n,n,n,nw,nw,n,nw,nw,n,n,nw,n,n,n,n,n,n,n,n,n,nw,n,n,ne,nw,n,sw,nw,n,n,sw,n,n,nw,n,n,ne,n,se,sw,sw,n,n,n,nw,se,se,s,n,n,n,s,n,n,n,n,n,s,n,n,n,n,n,n,n,se,n,n,se,sw,n,n,nw,n,n,n,sw,ne,n,n,n,s,n,n,n,s,s,n,n,s,n,nw,ne,nw,ne,nw,nw,n,ne,n,n,sw,n,n,se,nw,n,se,nw,n,n,n,nw,nw,n,n,nw,s,nw,n,ne,n,nw,n,nw,nw,n,n,n,n,n,sw,nw,ne,n,s,n,nw,n,nw,n,n,n,n,nw,nw,n,nw,n,n,n,n,n,n,n,n,n,n,sw,nw,s,n,n,se,se,n,nw,n,n,s,n,se,nw,n,n,nw,n,sw,se,sw,nw,nw,n,n,n,n,sw,n,se,n,n,sw,sw,nw,nw,n,nw,n,nw,n,se,se,n,ne,n,n,n,sw,n,n,sw,n,s,n,nw,n,n,n,s,n,nw,n,ne,sw,n,s,s,nw,sw,ne,n,ne,ne,n,n,nw,nw,nw,nw,s,nw,nw,n,n,n,n,n,n,n,nw,ne,n,n,n,n,sw,n,n,n,ne,sw,sw,n,ne,n,n,nw,ne,n,nw,n,n,n,n,n,n,n,nw,ne,se,n,n,nw,ne,n,s,s,n,s,nw,n,ne,n,nw,n,n,sw,nw,s,s,nw,nw,n,nw,n,se,n,n,n,n,nw,sw,nw,se,nw,sw,n,nw,nw,n,n,n,nw,n,ne,n,n,nw,nw,nw,se,s,nw,n,nw,nw,n,nw,n,n,n,nw,sw,n,n,n,ne,nw,n,n,n,nw,n,n,n,n,nw,n,nw,n,n,n,n,n,s,n,n,n,n,se,n,n,nw,n,n,nw,nw,se,n,nw,n,n,n,nw,se,nw,s,nw,n,nw,nw,n,nw,n,nw,nw,nw,sw,nw,ne,nw,sw,n,ne,ne,n,n,n,sw,n,n,nw,s,n,nw,ne,nw,sw,nw,sw,n,nw,nw,n,nw,nw,nw,sw,nw,n,nw,nw,n,nw,nw,sw,nw,s,n,nw,nw,n,n,nw,nw,n,n,sw,n,se,n,n,n,n,n,nw,nw,n,nw,nw,nw,nw,n,nw,s,se,nw,s,nw,ne,n,nw,nw,n,n,s,n,s,n,nw,s,n,nw,n,ne,s,n,nw,n,n,s,n,n,n,n,n,se,nw,n,n,sw,se,n,nw,n,n,nw,n,n,n,n,nw,ne,s,n,nw,n,n,nw,n,n,sw,n,n,nw,nw,nw,nw,nw,n,sw,se,nw,n,n,nw,nw,sw,s,nw,n,nw,n,n,n,ne,nw,n,nw,nw,n,n,nw,s,nw,nw,nw,ne,nw,nw,nw,nw,s,nw,n,n,nw,n,nw,n,nw,nw,nw,nw,nw,ne,nw,n,nw,nw,n,n,nw,nw,se,n,s,nw,sw,nw,nw,n,n,nw,ne,nw,nw,n,n,se,ne,nw,s,n,n,n,n,sw,se,nw,n,nw,nw,ne,n,nw,n,n,n,n,n,n,n,se,nw,nw,nw,ne,nw,nw,nw,s,n,nw,sw,se,nw,nw,n,nw,nw,n,nw,nw,nw,nw,ne,sw,se,n,sw,s,nw,n,n,se,nw,nw,ne,nw,n,n,nw,ne,s,n,nw,nw,nw,se,n,s,se,s,nw,n,s,nw,nw,nw,sw,n,n,nw,nw,n,nw,nw,n,nw,n,sw,ne,nw,n,s,n,nw,nw,sw,nw,n,sw,nw,n,nw,s,nw,n,nw,nw,sw,nw,nw,nw,nw,nw,n,n,n,nw,nw,nw,nw,n,nw,n,n,n,n,n,se,n,se,nw,nw,nw,nw,n,nw,nw,nw,n,nw,nw,nw,nw,nw,nw,nw,nw,sw,n,ne,n,se,nw,s,n,nw,nw,n,nw,nw,s,n,nw,nw,nw,nw,nw,se,nw,nw,n,nw,n,nw,se,nw,n,n,n,nw,n,nw,n,sw,n,n,nw,nw,n,nw,sw,nw,n,n,nw,nw,n,sw,nw,n,nw,nw,nw,nw,nw,nw,nw,s,nw,nw,nw,n,nw,n,nw,nw,nw,nw,nw,nw,nw,se,n,se,nw,s,nw,nw,n,nw,n,nw,n,ne,nw,nw,s,n,nw,n,se,n,nw,nw,nw,n,nw,nw,nw,nw,nw,nw,nw,n,n,se,n,nw,nw,nw,nw,ne,se,nw,ne,ne,nw,nw,nw,nw,nw,n,sw,s,sw,nw,n,sw,nw,nw,nw,s,nw,nw,sw,sw,n,nw,nw,nw,n,nw,ne,nw,nw,nw,n,n,nw,nw,nw,se,n,nw,n,n,n,se,nw,n,n,nw,nw,nw,nw,nw,nw,nw,ne,n,nw,nw,nw,nw,nw,ne,se,s,nw,nw,nw,sw,nw,nw,nw,n,nw,nw,nw,nw,s,nw,nw,nw,nw,nw,se,nw,s,nw,se,se,s,nw,nw,n,n,nw,nw,nw,nw,nw,n,nw,nw,nw,nw,nw,n,s,nw,n,n,nw,nw,n,nw,n,s,sw,nw,s,nw,nw,n,se,nw,ne,nw,n,sw,ne,sw,s,sw,n,n,nw,se,nw,nw,nw,n,ne,se,ne,nw,nw,nw,s,sw,n,nw,nw,s,nw,nw,nw,nw,nw,n,nw,nw,nw,s,nw,se,nw,nw,nw,nw,nw,nw,n,nw,nw,nw,n,sw,nw,ne,nw,n,nw,se,n,se,sw,nw,nw,nw,se,n,n,nw,nw,nw,nw,nw,nw,ne,nw,ne,n,sw,n,nw,s,nw,nw,nw,s,nw,nw,sw,nw,nw,n,n,nw,s,nw,nw,s,nw,se,s,nw,sw,n,se,nw,nw,n,s,n,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,ne,nw,nw,nw,s,nw,sw,nw,nw,nw,n,nw,nw,sw,nw,ne,nw,n,nw,nw,nw,nw,nw,n,nw,n,nw,nw,s,nw,ne,nw,n,nw,nw,ne,n,nw,ne,n,nw,nw,nw,nw,ne,nw,nw,nw,nw,sw,nw,nw,nw,n,n,nw,nw,nw,ne,n,s,s,nw,nw,nw,nw,nw,nw,nw,nw,n,ne,nw,nw,nw,n,sw,nw,nw,nw,nw,nw,nw,nw,n,nw,nw,nw,n,n,nw,s,nw,nw,nw,nw,nw,nw,nw,nw,nw,n,nw,ne,ne,nw,nw,nw,nw,nw,nw,nw,nw,ne,nw,n,nw,se,s,s,nw,se,nw,nw,nw,nw,n,s,nw,s,nw,ne,nw,nw,nw,sw,nw,sw,nw,nw,nw,ne,nw,nw,nw,nw,nw,ne,nw,nw,nw,sw,nw,nw,nw,nw,nw,nw,nw,nw,se,nw,s,nw,nw,se,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,n,nw,nw,nw,s,n,nw,ne,nw,nw,se,ne,nw,nw,ne,nw,nw,nw,nw,nw,se,nw,nw,nw,s,s,ne,ne,ne,se,se,sw,se,se,s,s,s,s,s,s,sw,sw,sw,sw,ne,ne,sw,nw,sw,nw,nw,sw,ne,sw,sw,nw,sw,nw,sw,nw,ne,nw,nw,nw,nw,n,ne,sw,nw,nw,nw,n,ne,n,n,n,n,se,nw,se,nw,n,n,n,nw,n,n,n,n,s,n,n,ne,n,n,n,n,n,se,n,n,n,se,n,n,ne,ne,n,ne,ne,ne,se,nw,n,n,ne,nw,n,ne,ne,ne,sw,ne,ne,ne,ne,ne,ne,ne,s,nw,ne,ne,se,ne,ne,se,se,ne,nw,ne,ne,ne,sw,ne,ne,ne,se,se,se,ne,se,ne,se,se,se,se,ne,se,se,ne,se,se,se,se,se,se,sw,s,se,se,s,sw,se,se,se,se,se,se,se,se,se,se,ne,ne,se,se,ne,se,s,s,s,se,sw,se,sw,se,se,s,ne,ne,se,n,se,se,s,nw,n,se,s,se,se,se,se,se,se,se,se,s,se,s,s,se,s,s,s,s,ne,s,ne,n,se,s,nw,nw,s,ne,s,s,s,s,n,s,s,s,s,n,s,n,s,n,s,se,s,s,sw,s,s,nw,s,se,s,s,ne,s,s,s,s,n,sw,s,sw,s,s,sw,n,n,s,ne,sw,ne,n,s,s,s,s,sw,sw,s,sw,s,se,sw,se,sw,nw,s,sw,n,sw,sw,sw,s,nw,sw,s,sw,s,ne,sw,s,sw,s,n,ne,sw,ne,sw,sw,se,sw,n,sw,nw,sw,sw,sw,sw,ne,sw,sw,nw,s,n,nw,s,se,sw,sw,s,sw,sw,sw,sw,sw,sw,nw,sw,sw,sw,sw,sw,sw,sw,nw,sw,sw,sw,sw,sw,sw,sw,nw,sw,nw,sw,s,s,sw,sw,nw,se,se,sw,sw,nw,sw,s,sw,nw,sw,sw,nw,sw,s,sw,nw,s,se,sw,ne,sw,nw,sw,nw,sw,n,nw,sw,sw,sw,sw,n,sw,nw,n,sw,sw,sw,nw,sw,n,nw,nw,sw,sw,nw,nw,sw,sw,nw,sw,sw,sw,ne,sw,nw,sw,nw,nw,n,nw,ne,n,nw,sw,nw,sw,nw,nw,nw,nw,nw,nw,se,sw,nw,sw,nw,sw,sw,se,sw,sw,s,s,nw,nw,nw,nw,nw,nw,nw,n,sw,nw,nw,s,sw,nw,nw,nw,sw,ne,sw,se,nw,nw,n,nw,nw,nw,nw,sw,nw,nw,nw,nw,sw,nw,se,sw,nw,nw,nw,nw,nw,nw,nw,nw,se,nw,nw,nw,nw,nw,s,nw,ne,nw,n,nw,nw,ne,nw,nw,ne,sw,nw,se,nw,nw,nw,ne,nw,n,nw,nw,ne,sw,nw,nw,nw,n,nw,nw,nw,se,nw,nw,n,nw,nw,nw,nw,nw,nw,n,nw,nw,nw,nw,nw,ne,n,nw,nw,n,nw,n,nw,s,nw,nw,n,nw,nw,se,n,nw,se,nw,nw,nw,ne,n,nw,n,sw,n,nw,nw,n,nw,n,n,nw,nw,s,sw,n,nw,n,nw,nw,n,n,se,nw,nw,nw,nw,nw,n,n,n,n,sw,n,n,n,nw,n,n,n,n,n,n,ne,n,n,ne,nw,sw,ne,s,n,n,n,n,nw,n,ne,nw,nw,n,n,sw,n,ne,n,n,n,s,nw,sw,n,n,n,nw,n,sw,n,nw,se,n,n,se,n,n,n,nw,n,n,n,n,n,n,nw,nw,n,n,n,nw,ne,se,s,n,n,n,n,se,nw,nw,n,n,n,n,n,n,n,n,ne,nw,n,n,n,n,n,n,sw,nw,s,sw,n,n,n,ne,ne,n,n,n,n,n,n,n,ne,n,nw,n,ne,n,n,se,n,n,n,ne,n,nw,n,sw,n,nw,n,n,n,n,n,n,n,n,n,ne,ne,n,n,n,ne,n,se,n,n,se,n,n,n,se,sw,se,n,n,n,nw,se,n,ne,n,ne,n,ne,ne,n,n,se,n,n,n,n,n,ne,ne,nw,n,ne,n,n,n,ne,sw,n,n,s,n,n,s,ne,n,ne,n,n,ne,n,n,ne,se,sw,n,s,ne,n,sw,n,n,n,se,ne,n,n,n,s,sw,se,ne,s,se,ne,n,ne,n,se,n,ne,ne,ne,ne,ne,ne,n,n,ne,ne,ne,nw,nw,ne,ne,ne,sw,n,ne,n,ne,n,ne,sw,n,n,n,s,ne,n,ne,ne,ne,se,sw,ne,se,sw,ne,ne,se,sw,ne,n,n,ne,ne,ne,ne,ne,n,n,n,s,n,n,n,ne,ne,ne,ne,ne,ne,s,ne,ne,ne,ne,ne,ne,n,n,n,ne,se,nw,ne,ne,s,ne,n,n,n,ne,ne,n,ne,n,se,se,n,ne,ne,ne,se,ne,ne,s,s,ne,ne,ne,ne,n,sw,ne,ne,ne,n,ne,ne,ne,ne,ne,ne,n,ne,nw,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,se,ne,s,ne,sw,se,ne,sw,n,n,ne,n,se,ne,ne,ne,se,ne,ne,ne,s,ne,ne,n,se,ne,nw,ne,ne,ne,ne,ne,ne,ne,s,ne,ne,n,se,se,se,se,ne,s,ne,ne,ne,ne,ne,ne,sw,ne,ne,ne,ne,ne,ne,nw,ne,ne,ne,s,se,ne,ne,ne,n,n,ne,se,ne,ne,se,ne,ne,se,se,ne,ne,ne,ne,ne,ne,se,nw,se,sw,ne,ne,ne,nw,ne,ne,ne,n,ne,se,sw,nw,s,ne,se,ne,se,s,ne,ne,ne,ne,ne,s,ne,se,n,ne,ne,se,se,ne,ne,ne,ne,n,ne,ne,se,ne,ne,ne,ne,se,ne,ne,ne,ne,ne,se,ne,ne,ne,nw,ne,ne,se,ne,ne,se,se,sw,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,sw,se,ne,n,n,n,se,ne,s,se,sw,sw,ne,ne,ne,sw,ne,se,ne,ne,ne,ne,ne,ne,nw,se,se,se,s,se,ne,s,se,ne,se,s,ne,ne,se,n,se,se,ne,n,ne,ne,se,nw,ne,se,se,nw,sw,s,ne,sw,se,se,ne,ne,s,se,ne,ne,ne,se,nw,ne,se,se,sw,nw,sw,se,ne,ne,se,se,se,se,ne,ne,ne,s,s,se,se,s,se,ne,se,ne,se,ne,ne,se,ne,se,ne,se,se,se,ne,se,se,se,s,se,se,se,n,se,se,ne,ne,se,ne,ne,se,se,se,se,ne,se,se,se,s,ne,se,ne,s,se,se,se,nw,ne,se,n,se,se,se,nw,se,se,nw,s,se,ne,se,nw,se,ne,se,ne,nw,se,se,nw,ne,se,se,n,nw,sw,se,ne,se,n,se,ne,ne,se,nw,se,ne,s,se,ne,se,se,ne,ne,se,n,ne,nw,se,ne,s,se,se,se,s,se,ne,se,se,se,se,se,nw,se,se,se,ne,n,se,ne,se,ne,se,n,se,nw,se,ne,n,nw,ne,ne,se,ne,se,nw,s,se,s,se,se,ne,se,s,se,n,se,se,se,se,se,s,se,s,se,se,se,ne,se,se,ne,se,se,nw,se,se,se,se,se,se,se,se,se,se,se,se,se,ne,s,se,se,se,se,s,se,se,se,n,se,sw,se,nw,se,se,n,ne,sw,se,se,se,se,ne,se,se,se,se,se,se,se,se,se,se,n,se,se,se,n,ne,s,se,se,se,se,se,se,se,se,se,se,se,n,se,s,ne,se,ne,se,se,se,se,se,ne,s,s,se,s,ne,se,se,s,se,se,se,se,se,se,sw,se,se,s,se,se,se,se,se,se,se,se,se,se,se,se,se,se,se,sw,se,se,se,nw,se,se,s,se,n,se,se,se,se,se,se,se,se,se,s,se,n,se,ne,se,s,s,s,se,nw,se,se,se,s,se,se,se,n,ne,se,s,se,nw,se,se,s,s,se,se,se,se,se,se,s,se,nw,se,s,se,s,s,se,se,s,se,se,ne,se,n,se,s,s,s,ne,se,s,se,s,se,se,se,n,se,sw,se,s,se,n,s,se,s,se,se,se,se,s,se,s,se,s,se,s,s,se,se,se,se,se,se,s,se,sw,se,se,nw,s,n,se,sw,s,se,se,sw,ne,sw,nw,s,s,s,s,nw,se,se,se,s,se,se,se,se,ne,s,se,nw,s,se,se,se,s,se,se,s,sw,s,s,se,se,ne,s,se,se,s,se,s,se,s,s,se,se,se,n,se,sw,s,se,s,s,s,se,se,se,ne,se,s,s,s,se,s,ne,se,n,se,s,s,s,s,s,s,se,se,se,se,nw,se,s,s,se,s,se,s,se,s,se,sw,s,nw,se,se,se,se,se,s,s,sw,se,nw,s,se,s,s,s,ne,s,s,s,s,se,s,se,s,nw,se,s,se,s,se,se,nw,nw,se,nw,nw,s,s,nw,se,s,s,nw,se,s,se,se,se,s,s,se,se,ne,s,s,s,s,se,s,se,se,se,se,ne,s,se,se,s,s,se,se,se,nw,s,ne,s,se,s,s,s,s,s,s,ne,s,s,s,s,se,s,s,s,se,sw,se,s,s,se,se,ne,s,se,se,se,s,s,sw,s,s,nw,sw,sw,se,s,s,s,se,s,s,s,se,se,s,s,s,nw,se,se,se,nw,se,s,s,s,s,s,se,ne,se,s,se,s,s,ne,se,se,ne,s,s,s,ne,s,se,ne,se,s,s,s,s,s,s,s,s,s,sw,s,ne,s,s,se,se,se,s,sw,s,sw,s,s,s,n,nw,s,s,s,se,s,nw,se,se,s,s,s,s,s,ne,se,s,s,s,se,s,s,s,s,nw,s,sw,sw,s,s,s,se,ne,s,s,s,ne,s,s,s,n,s,s,s,ne,se,s,s,s,s,s,s,s,s,s,s,nw,s,se,s,s,ne,s,ne,se,s,s,sw,s,ne,s,s,s,se,se,s,s,nw,s,s,s,s,s,nw,s,s,s,nw,s,s,s,s,s,s,s,se,s,sw,s,se,ne,s,n,nw,se,s,s,s,se,s,se,s,n,s,s,ne,s,s,nw,nw,nw,s,s,s,s,nw,s,s,s,s,s,s,s,nw,s,s,s,s,sw,s,s,sw,n,nw,ne,s,s,s,s,n,s,s,s,n,sw,n,s,s,s,s,s,s,nw,s,n,se,s,s,s,ne,s,se,nw,sw,se,sw,s,s,s,s,s,s,sw,s,se,s,n,s,sw,s,s,sw,sw,s,se,s,sw,s,s,s,sw,s,ne,s,s,s,s,sw,s,s,s,s,nw,s,se,sw,se,nw,se,ne,s,s,s,n,sw,s,sw,s,s,s,s,s,s,s,s,s,s,sw,sw,s,se,s,nw,nw,s,ne,nw,s,n,se,n,n,s,s,ne,sw,s,se,s,sw,s,s,s,se,sw,s,sw,nw,sw,sw,s,se,s,n,ne,s,s,sw,sw,s,s,sw,sw,s,n,s,sw,s,sw,s,s,nw,sw,s,s,s,sw,ne,ne,sw,sw,s,sw,se,s,se,s,ne,se,s,s,nw,sw,s,ne,sw,ne,s,sw,s,s,s,s,s,s,s,s,s,n,se,s,s,s,s,s,s,s,sw,sw,s,n,sw,sw,sw,s,s,sw,s,ne,se,s,s,s,sw,s,s,s,sw,s,sw,s,sw,s,s,s,s,s,sw,s,sw,nw,sw,s,se,sw,s,nw,s,s,s,n,ne,sw,sw,s,s,s,s,sw,s,s,s,n,s,sw,n,s,s,sw,s,sw,s,sw,s,s,n,s,n,n,sw,sw,sw,sw,sw,sw,s,ne,ne,s,sw,s,sw,s,sw,se,sw,s,sw,sw,n,s,ne,sw,sw,s,sw,se,se,nw,sw,sw,se,ne,s,s,s,s,s,sw,sw,sw,n,s,se,s,s,n,s,sw,n,sw,sw,sw,ne,s,sw,sw,s,n,sw,n,s,s,s,ne,s,se,s,sw,ne,sw,sw,s,sw,sw,sw,s,s,se,s,sw,s,s,ne,sw,s,sw,sw,s,s,sw,ne,s,sw,sw,sw,sw,n,s,ne,ne,ne,s,sw,s,se,se,sw,s,sw,sw,n,sw,sw,nw,sw,s,sw,s,sw,s,sw,s,sw,sw,s,sw,sw,sw,n,s,sw,ne,sw,s,nw,s,s,sw,s,sw,nw,sw,sw,sw,sw,nw,sw,sw,sw,sw,sw,s,s,s,s,n,s,sw,s,sw,sw,s,ne,s,nw,n,nw,s,sw,sw,sw,sw,sw,sw,sw,sw,s,s,n,sw,s,s,n,se,s,se,sw,s,sw,ne,sw,sw,sw,sw,s,sw,sw,ne,s,sw,sw,se,sw,s,n,s,s,sw,s,se,sw,sw,se,sw,sw,sw,nw,sw,sw,sw,nw,sw,s,s,s,nw,sw,s,n,sw,s,sw,n,sw,sw,s,sw,sw,s,s,nw,s,sw,sw,sw,ne,sw,sw,nw,s,ne,s,sw,sw,sw,sw,sw,n,sw,sw,sw,s,n,sw,s,sw,se,sw,sw,sw,sw,sw,sw,sw,s,sw,sw,ne,sw,s,sw,s,sw,sw,sw,n,sw,sw,sw,s,sw,sw,s,sw,sw,sw,sw,n,s,s,sw,ne,sw,se,n,sw,s,sw,n,sw,sw,sw,nw,sw,s,s,n,sw,s,sw,sw,sw,ne,sw,sw,nw,ne,n,sw,sw,sw,sw,s,sw,n,sw,s,s,sw,s,s,s,sw,sw,sw,s,sw,sw,s,s,sw,s,s,se,sw,sw,s,sw,sw,se,sw,s,se,sw,sw,sw,sw,se,sw,sw,sw,sw,s,sw,s,n,sw,sw,sw,n,n,sw,sw,nw,sw,sw,sw,se,sw,nw,sw,sw,sw,sw,sw,sw,sw,s,sw,n,nw,n,sw,nw,sw,sw,sw,sw,s,ne,sw,ne,sw,se,n,s,s,sw,sw,sw,n,se,s,sw,se,s,sw,sw,sw,ne,s,n,sw,sw,sw,sw,sw,s,sw,nw,sw,sw,sw,sw,sw,sw,nw,sw,nw,sw,s,sw,sw,sw,sw,se,sw,sw,sw,sw,sw,ne,se,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,nw,sw,sw,sw,sw,sw,nw,sw,s,sw,nw,sw,sw,sw,sw,n diff --git a/2017/d12/ex1/ex1.py b/2017/d12/ex1/ex1.py new file mode 100755 index 0000000..fc720bb --- /dev/null +++ b/2017/d12/ex1/ex1.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python + +import sys + + +def solve(input: str) -> int: + def parse_line(input: str) -> tuple[int, set[int]]: + origin, others = input.split(" <-> ") + return int(origin), {int(n) for n in others.split(", ")} + + def parse(input: str) -> dict[int, set[int]]: + return {n: children for n, children in map(parse_line, input.splitlines())} + + def reachable(graph: dict[int, set[int]]) -> int: + queue = [0] + seen: set[int] = set() + + while queue: + n = queue.pop() + if n in seen: + continue + seen.add(n) + queue.extend(graph[n]) + + return len(seen) + + graph = parse(input) + return reachable(graph) + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d12/ex1/input b/2017/d12/ex1/input new file mode 100644 index 0000000..80e4ce6 --- /dev/null +++ b/2017/d12/ex1/input @@ -0,0 +1,2000 @@ +0 <-> 199, 1774 +1 <-> 350, 1328, 1920 +2 <-> 477, 984, 1419 +3 <-> 1465, 1568 +4 <-> 359, 1047, 1215, 1580, 1969 +5 <-> 613 +6 <-> 49, 617, 1213 +7 <-> 1263 +8 <-> 410 +9 <-> 1224 +10 <-> 1157 +11 <-> 304, 1168, 1875 +12 <-> 868, 891, 1369, 1712 +13 <-> 958, 1371 +14 <-> 1814 +15 <-> 261, 556 +16 <-> 830, 1646, 1901, 1933 +17 <-> 962, 1778 +18 <-> 109, 1229 +19 <-> 239, 1070, 1886, 1930 +20 <-> 327, 1307, 1801, 1905 +21 <-> 943, 1950 +22 <-> 1310 +23 <-> 659, 917 +24 <-> 373 +25 <-> 369 +26 <-> 947, 1023 +27 <-> 338, 1901 +28 <-> 1691 +29 <-> 132, 1219, 1699, 1962 +30 <-> 424, 822, 1419 +31 <-> 1444, 1464 +32 <-> 702, 1517 +33 <-> 1639 +34 <-> 909 +35 <-> 690, 1655 +36 <-> 988, 1149, 1166 +37 <-> 649, 1300, 1441, 1699 +38 <-> 1848 +39 <-> 382 +40 <-> 827, 1203, 1510 +41 <-> 714, 1056, 1184 +42 <-> 1018, 1873 +43 <-> 214 +44 <-> 670, 957 +45 <-> 45 +46 <-> 1195 +47 <-> 559, 1504 +48 <-> 1958 +49 <-> 6 +50 <-> 50, 1248 +51 <-> 1151 +52 <-> 52, 521, 1791 +53 <-> 304 +54 <-> 601 +55 <-> 1328 +56 <-> 939 +57 <-> 1583, 1995 +58 <-> 1422, 1694 +59 <-> 395, 1233 +60 <-> 862, 1811 +61 <-> 345, 1694 +62 <-> 62, 276 +63 <-> 280 +64 <-> 199 +65 <-> 117, 930 +66 <-> 364, 697 +67 <-> 1043 +68 <-> 287, 504, 1554 +69 <-> 498, 706 +70 <-> 77, 333, 713, 972, 1299 +71 <-> 1643 +72 <-> 694 +73 <-> 1381 +74 <-> 955, 1790 +75 <-> 1691, 1743 +76 <-> 76, 638, 1429 +77 <-> 70 +78 <-> 1513 +79 <-> 1397, 1716 +80 <-> 897 +81 <-> 968, 1841 +82 <-> 649 +83 <-> 522 +84 <-> 84, 125, 399, 498 +85 <-> 880, 1554, 1888 +86 <-> 86 +87 <-> 579, 1947 +88 <-> 470, 1451, 1750 +89 <-> 805, 1434 +90 <-> 453 +91 <-> 1208 +92 <-> 688, 1358, 1746 +93 <-> 357, 647 +94 <-> 234, 1270, 1520 +95 <-> 620, 1454 +96 <-> 390, 869, 919 +97 <-> 693, 1783 +98 <-> 259, 529, 782, 1018 +99 <-> 678 +100 <-> 1215 +101 <-> 459, 887 +102 <-> 888, 1135 +103 <-> 1006 +104 <-> 1375, 1422 +105 <-> 1657, 1730 +106 <-> 216, 1434 +107 <-> 333 +108 <-> 468, 1654 +109 <-> 18, 1791 +110 <-> 372 +111 <-> 111, 861, 1383 +112 <-> 1359, 1937 +113 <-> 414, 736, 1446 +114 <-> 426, 1457 +115 <-> 1605, 1672 +116 <-> 116, 713, 1584, 1602 +117 <-> 65 +118 <-> 1611, 1897 +119 <-> 541, 1569 +120 <-> 412, 787 +121 <-> 1344 +122 <-> 698, 752, 1693 +123 <-> 1173, 1576, 1634, 1802 +124 <-> 735 +125 <-> 84, 1032 +126 <-> 126, 225, 332 +127 <-> 1350 +128 <-> 128, 319, 327, 1582 +129 <-> 129, 654, 1260 +130 <-> 1080, 1296, 1350 +131 <-> 131 +132 <-> 29, 856, 1064 +133 <-> 659, 1367, 1776 +134 <-> 648, 1147, 1450, 1910 +135 <-> 411 +136 <-> 353, 935, 1590 +137 <-> 228 +138 <-> 194, 452, 1746, 1794 +139 <-> 139, 494, 1635 +140 <-> 681 +141 <-> 1507 +142 <-> 1288 +143 <-> 845 +144 <-> 1516 +145 <-> 502, 1146, 1155, 1809 +146 <-> 146, 750 +147 <-> 1600 +148 <-> 1206 +149 <-> 829, 1457 +150 <-> 675, 915 +151 <-> 651, 1678 +152 <-> 888, 1503 +153 <-> 498, 960, 1515 +154 <-> 1468 +155 <-> 751 +156 <-> 528, 803, 1655 +157 <-> 1486, 1937 +158 <-> 590, 1876 +159 <-> 159, 185, 1287, 1550, 1588 +160 <-> 160, 548 +161 <-> 1303, 1364 +162 <-> 1855 +163 <-> 1181 +164 <-> 442 +165 <-> 490 +166 <-> 1105 +167 <-> 1121 +168 <-> 760, 1129 +169 <-> 747 +170 <-> 1890 +171 <-> 1644 +172 <-> 593, 665 +173 <-> 1092, 1869 +174 <-> 705 +175 <-> 1345, 1999 +176 <-> 234, 606 +177 <-> 557, 688 +178 <-> 373 +179 <-> 1376 +180 <-> 638 +181 <-> 1996 +182 <-> 1094, 1206, 1748 +183 <-> 931 +184 <-> 880 +185 <-> 159, 1058, 1704 +186 <-> 765, 1178, 1877 +187 <-> 732 +188 <-> 188 +189 <-> 189, 1871 +190 <-> 395, 1639 +191 <-> 441 +192 <-> 192, 1034 +193 <-> 494 +194 <-> 138, 995, 1308 +195 <-> 1024 +196 <-> 226, 1632, 1919 +197 <-> 786 +198 <-> 286, 758, 1852 +199 <-> 0, 64, 1646 +200 <-> 314 +201 <-> 459, 658 +202 <-> 321, 492, 599, 1081, 1460 +203 <-> 225 +204 <-> 331, 462, 600 +205 <-> 898 +206 <-> 734, 1321 +207 <-> 558, 991 +208 <-> 397 +209 <-> 1145, 1886 +210 <-> 1343, 1925 +211 <-> 840, 1409 +212 <-> 1308 +213 <-> 1813 +214 <-> 43, 282 +215 <-> 1270 +216 <-> 106, 836, 1275, 1507 +217 <-> 312 +218 <-> 290, 386, 639, 1920 +219 <-> 784, 1001 +220 <-> 220, 322 +221 <-> 1681 +222 <-> 1616, 1653 +223 <-> 436, 1272, 1625 +224 <-> 1398, 1696 +225 <-> 126, 203, 1182 +226 <-> 196, 1655 +227 <-> 623 +228 <-> 137, 923 +229 <-> 253, 1387 +230 <-> 1374 +231 <-> 389, 1499 +232 <-> 442 +233 <-> 473, 1406 +234 <-> 94, 176 +235 <-> 235 +236 <-> 607, 838, 1487, 1856 +237 <-> 818 +238 <-> 387, 628 +239 <-> 19 +240 <-> 818 +241 <-> 1027, 1524 +242 <-> 1085, 1971 +243 <-> 1942 +244 <-> 299, 390, 916 +245 <-> 906 +246 <-> 246, 534, 763, 1427 +247 <-> 531, 1675 +248 <-> 336, 1832 +249 <-> 1497 +250 <-> 1836 +251 <-> 1309 +252 <-> 581, 1104 +253 <-> 229, 877, 1743 +254 <-> 254, 621 +255 <-> 831, 866, 874 +256 <-> 1942 +257 <-> 906 +258 <-> 1224 +259 <-> 98, 316, 419, 718, 1519 +260 <-> 1223, 1516, 1547, 1845, 1944 +261 <-> 15, 278, 1607, 1808 +262 <-> 1112, 1172 +263 <-> 424 +264 <-> 680 +265 <-> 1968 +266 <-> 804, 1252 +267 <-> 1739 +268 <-> 538, 546 +269 <-> 1265 +270 <-> 270 +271 <-> 1150 +272 <-> 272 +273 <-> 1208, 1537 +274 <-> 1427 +275 <-> 1349, 1829 +276 <-> 62, 906 +277 <-> 461, 634, 1887 +278 <-> 261, 1224, 1904 +279 <-> 303, 537 +280 <-> 63, 280, 926, 931 +281 <-> 862, 1041, 1119, 1863 +282 <-> 214, 488, 644 +283 <-> 646, 1124 +284 <-> 860, 1759 +285 <-> 746 +286 <-> 198 +287 <-> 68, 1045 +288 <-> 332, 1133, 1277, 1628, 1744, 1770, 1934 +289 <-> 1578, 1766 +290 <-> 218, 439, 1661 +291 <-> 596, 1377, 1620 +292 <-> 700, 848, 1099 +293 <-> 293, 1592, 1938 +294 <-> 653, 1948 +295 <-> 1505, 1936 +296 <-> 625, 925 +297 <-> 1105, 1185 +298 <-> 298, 544, 1444 +299 <-> 244, 933, 1012 +300 <-> 300, 1461, 1883 +301 <-> 880, 1698 +302 <-> 1221 +303 <-> 279, 375 +304 <-> 11, 53, 967, 1362 +305 <-> 777 +306 <-> 344 +307 <-> 582, 770 +308 <-> 792, 1895 +309 <-> 539 +310 <-> 390, 1482 +311 <-> 441, 1294 +312 <-> 217, 743 +313 <-> 1522 +314 <-> 200, 502, 835, 1084, 1134 +315 <-> 1970 +316 <-> 259 +317 <-> 1302, 1437 +318 <-> 365 +319 <-> 128, 976 +320 <-> 1056, 1466, 1778 +321 <-> 202 +322 <-> 220, 1431 +323 <-> 838, 1465, 1895 +324 <-> 443 +325 <-> 1056 +326 <-> 463, 1741, 1761 +327 <-> 20, 128, 681, 1797 +328 <-> 328, 348 +329 <-> 378, 1738 +330 <-> 459 +331 <-> 204, 331 +332 <-> 126, 288 +333 <-> 70, 107, 1747 +334 <-> 517, 614 +335 <-> 1259 +336 <-> 248, 550, 1485 +337 <-> 337 +338 <-> 27, 1212, 1264 +339 <-> 430, 963 +340 <-> 769 +341 <-> 341 +342 <-> 593, 718, 895 +343 <-> 569 +344 <-> 306, 1440, 1650, 1742 +345 <-> 61, 1006, 1664 +346 <-> 448, 1928 +347 <-> 1022, 1052 +348 <-> 328, 1232 +349 <-> 1232 +350 <-> 1, 526, 1086, 1821 +351 <-> 584 +352 <-> 518, 686, 1324, 1437 +353 <-> 136, 936 +354 <-> 1470 +355 <-> 1173, 1814 +356 <-> 698 +357 <-> 93 +358 <-> 737, 986, 1169 +359 <-> 4 +360 <-> 363 +361 <-> 417, 841 +362 <-> 928 +363 <-> 360, 1751 +364 <-> 66, 364, 1596 +365 <-> 318, 1766 +366 <-> 366 +367 <-> 367 +368 <-> 1897 +369 <-> 25, 369, 1460 +370 <-> 370 +371 <-> 1568 +372 <-> 110, 582 +373 <-> 24, 178, 1924 +374 <-> 374 +375 <-> 303 +376 <-> 1331, 1990 +377 <-> 388, 601, 837 +378 <-> 329 +379 <-> 623 +380 <-> 671 +381 <-> 938 +382 <-> 39, 1458 +383 <-> 383, 1490, 1763, 1844 +384 <-> 832 +385 <-> 745, 1673 +386 <-> 218, 779 +387 <-> 238 +388 <-> 377, 1817 +389 <-> 231, 656, 1038, 1960 +390 <-> 96, 244, 310, 721, 1094, 1501 +391 <-> 438, 819, 1870 +392 <-> 697 +393 <-> 443, 1275, 1463 +394 <-> 480 +395 <-> 59, 190, 1117, 1997 +396 <-> 595 +397 <-> 208, 397, 1727 +398 <-> 1153 +399 <-> 84 +400 <-> 825, 1693 +401 <-> 812 +402 <-> 1191 +403 <-> 1446, 1820 +404 <-> 442, 871, 1637 +405 <-> 426, 1067 +406 <-> 460, 1290 +407 <-> 1951 +408 <-> 1335, 1391, 1897 +409 <-> 984, 1217 +410 <-> 8, 1607 +411 <-> 135, 411, 454, 1393 +412 <-> 120 +413 <-> 1208 +414 <-> 113 +415 <-> 415, 1803 +416 <-> 428 +417 <-> 361 +418 <-> 1129 +419 <-> 259 +420 <-> 628 +421 <-> 1485 +422 <-> 1110, 1785 +423 <-> 1418 +424 <-> 30, 263 +425 <-> 1497 +426 <-> 114, 405, 780 +427 <-> 427 +428 <-> 416, 782 +429 <-> 429 +430 <-> 339, 1513 +431 <-> 886, 1408 +432 <-> 586, 1725 +433 <-> 889, 1753, 1881 +434 <-> 1078, 1120 +435 <-> 660, 1194, 1662 +436 <-> 223, 1332 +437 <-> 1487 +438 <-> 391 +439 <-> 290 +440 <-> 1828 +441 <-> 191, 311, 1003, 1561, 1702 +442 <-> 164, 232, 404 +443 <-> 324, 393 +444 <-> 1215, 1251 +445 <-> 792 +446 <-> 1015, 1392 +447 <-> 777 +448 <-> 346, 1097 +449 <-> 1117 +450 <-> 1395 +451 <-> 1414, 1845 +452 <-> 138 +453 <-> 90, 453 +454 <-> 411 +455 <-> 1801 +456 <-> 456, 791, 902, 1111 +457 <-> 457, 1075, 1384 +458 <-> 770, 1600 +459 <-> 101, 201, 330, 1108 +460 <-> 406, 1529 +461 <-> 277, 839, 1552 +462 <-> 204 +463 <-> 326, 1899 +464 <-> 1098 +465 <-> 764, 1630, 1779 +466 <-> 627 +467 <-> 904 +468 <-> 108, 1849 +469 <-> 469, 603, 780 +470 <-> 88, 1276, 1533 +471 <-> 1492 +472 <-> 472, 1048, 1409, 1518, 1758 +473 <-> 233, 1413, 1826 +474 <-> 780 +475 <-> 1005, 1968 +476 <-> 809 +477 <-> 2 +478 <-> 753 +479 <-> 479, 1296, 1615 +480 <-> 394, 775, 1623 +481 <-> 774, 1604 +482 <-> 763 +483 <-> 522, 591, 1344 +484 <-> 894, 1219 +485 <-> 507, 1114, 1250, 1351 +486 <-> 1099, 1879 +487 <-> 487 +488 <-> 282, 1164, 1189 +489 <-> 900, 1889 +490 <-> 165, 918, 1007 +491 <-> 1800 +492 <-> 202 +493 <-> 615, 899, 1200, 1326 +494 <-> 139, 193 +495 <-> 704, 1988 +496 <-> 496 +497 <-> 1149, 1216 +498 <-> 69, 84, 153 +499 <-> 1125, 1149 +500 <-> 642 +501 <-> 524, 1176 +502 <-> 145, 314 +503 <-> 1330, 1626 +504 <-> 68, 699 +505 <-> 672 +506 <-> 1083 +507 <-> 485, 1743 +508 <-> 520, 1236, 1296 +509 <-> 1676 +510 <-> 875, 1066 +511 <-> 511 +512 <-> 512, 1240 +513 <-> 705, 812 +514 <-> 1758 +515 <-> 1165, 1168 +516 <-> 811 +517 <-> 334, 1132, 1339 +518 <-> 352, 1674 +519 <-> 824, 1396, 1659 +520 <-> 508 +521 <-> 52, 915 +522 <-> 83, 483, 1637 +523 <-> 1317 +524 <-> 501 +525 <-> 525 +526 <-> 350, 850, 930 +527 <-> 527, 1338, 1449 +528 <-> 156 +529 <-> 98 +530 <-> 691, 1175, 1505 +531 <-> 247, 785, 1389, 1623 +532 <-> 1159 +533 <-> 1152, 1297 +534 <-> 246 +535 <-> 1144, 1491, 1622, 1935 +536 <-> 708 +537 <-> 279, 1656 +538 <-> 268, 538, 1756 +539 <-> 309, 802 +540 <-> 1239 +541 <-> 119, 1679, 1741 +542 <-> 1204 +543 <-> 642, 1926 +544 <-> 298 +545 <-> 1971 +546 <-> 268 +547 <-> 1465, 1613, 1614 +548 <-> 160 +549 <-> 820 +550 <-> 336 +551 <-> 1733 +552 <-> 552, 1563 +553 <-> 1654 +554 <-> 554, 1641, 1665 +555 <-> 555 +556 <-> 15 +557 <-> 177, 1204 +558 <-> 207, 1004 +559 <-> 47, 1297 +560 <-> 1189, 1709 +561 <-> 1013, 1709 +562 <-> 762, 912 +563 <-> 563 +564 <-> 585 +565 <-> 1333, 1494 +566 <-> 566, 938 +567 <-> 894 +568 <-> 586, 1397 +569 <-> 343, 1572 +570 <-> 704, 1220, 1459 +571 <-> 1451 +572 <-> 651, 846, 909 +573 <-> 1881 +574 <-> 1866 +575 <-> 1379 +576 <-> 1060, 1210 +577 <-> 1837 +578 <-> 1346 +579 <-> 87 +580 <-> 1509 +581 <-> 252, 1548 +582 <-> 307, 372 +583 <-> 624, 1599, 1753, 1908 +584 <-> 351, 774 +585 <-> 564, 977 +586 <-> 432, 568, 773, 1789 +587 <-> 826 +588 <-> 1854 +589 <-> 719, 845, 1214 +590 <-> 158, 1259 +591 <-> 483 +592 <-> 743, 898 +593 <-> 172, 342, 852, 943, 1053 +594 <-> 594 +595 <-> 396, 928 +596 <-> 291, 596 +597 <-> 597 +598 <-> 1980 +599 <-> 202, 1764 +600 <-> 204 +601 <-> 54, 377, 1340 +602 <-> 1718, 1866 +603 <-> 469, 789 +604 <-> 1006, 1033, 1626 +605 <-> 1535 +606 <-> 176 +607 <-> 236, 911, 1218 +608 <-> 1193, 1825 +609 <-> 1657 +610 <-> 733, 841 +611 <-> 747, 1892 +612 <-> 1098, 1196, 1267 +613 <-> 5, 1372 +614 <-> 334, 1492 +615 <-> 493, 798 +616 <-> 1025, 1940 +617 <-> 6, 666, 1155 +618 <-> 762, 1621, 1895 +619 <-> 1187 +620 <-> 95, 1761 +621 <-> 254 +622 <-> 784, 1476 +623 <-> 227, 379, 1081 +624 <-> 583 +625 <-> 296, 1222, 1882 +626 <-> 905 +627 <-> 466, 1692 +628 <-> 238, 420, 1004, 1412 +629 <-> 1532 +630 <-> 630 +631 <-> 977, 1092, 1458, 1713 +632 <-> 777, 1049, 1404 +633 <-> 994 +634 <-> 277 +635 <-> 635 +636 <-> 703, 1756 +637 <-> 840, 1585 +638 <-> 76, 180, 1373 +639 <-> 218, 639, 1835 +640 <-> 1559 +641 <-> 1800 +642 <-> 500, 543 +643 <-> 1808 +644 <-> 282 +645 <-> 1253, 1475 +646 <-> 283, 646, 864 +647 <-> 93, 1508 +648 <-> 134, 956, 1762 +649 <-> 37, 82 +650 <-> 1480, 1916 +651 <-> 151, 572, 1357 +652 <-> 1261 +653 <-> 294, 653 +654 <-> 129, 1139, 1176 +655 <-> 1251, 1656 +656 <-> 389 +657 <-> 1604 +658 <-> 201, 1208 +659 <-> 23, 133, 1868 +660 <-> 435 +661 <-> 1634 +662 <-> 1667, 1701 +663 <-> 974 +664 <-> 664, 1167 +665 <-> 172, 1370 +666 <-> 617 +667 <-> 1824 +668 <-> 952, 1605 +669 <-> 1822 +670 <-> 44, 670 +671 <-> 380, 1145, 1693, 1906 +672 <-> 505, 693 +673 <-> 1610 +674 <-> 1249, 1302 +675 <-> 150, 777 +676 <-> 1675 +677 <-> 910, 1282 +678 <-> 99, 1004 +679 <-> 679 +680 <-> 264, 917, 1137, 1687 +681 <-> 140, 327, 746 +682 <-> 682 +683 <-> 794, 1315 +684 <-> 1000, 1342 +685 <-> 1111, 1348, 1523, 1932 +686 <-> 352 +687 <-> 979, 1667 +688 <-> 92, 177 +689 <-> 937, 1939 +690 <-> 35, 1608 +691 <-> 530, 691 +692 <-> 1871 +693 <-> 97, 672 +694 <-> 72, 694 +695 <-> 1076 +696 <-> 1954 +697 <-> 66, 392, 1892 +698 <-> 122, 356, 698 +699 <-> 504, 1470 +700 <-> 292, 1407 +701 <-> 1231, 1327 +702 <-> 32 +703 <-> 636, 1083, 1210 +704 <-> 495, 570 +705 <-> 174, 513, 1332 +706 <-> 69, 1088 +707 <-> 1036, 1867 +708 <-> 536, 805, 1958 +709 <-> 709 +710 <-> 915, 1578 +711 <-> 711, 1478 +712 <-> 813, 927 +713 <-> 70, 116, 1469, 1539 +714 <-> 41 +715 <-> 840, 1473, 1562, 1705 +716 <-> 716 +717 <-> 949, 1864 +718 <-> 259, 342, 1557, 1853 +719 <-> 589, 781, 802 +720 <-> 1125 +721 <-> 390, 878 +722 <-> 1026 +723 <-> 1039, 1467 +724 <-> 1535 +725 <-> 883 +726 <-> 1832, 1917 +727 <-> 1245 +728 <-> 1291 +729 <-> 1203 +730 <-> 824 +731 <-> 1984 +732 <-> 187, 1214 +733 <-> 610, 1079, 1198 +734 <-> 206, 872, 1479, 1855 +735 <-> 124, 1371 +736 <-> 113, 736 +737 <-> 358, 1426 +738 <-> 974, 1024, 1717, 1842 +739 <-> 1489 +740 <-> 1634 +741 <-> 873, 1695 +742 <-> 1700 +743 <-> 312, 592, 1493 +744 <-> 948, 1306, 1400 +745 <-> 385, 1029, 1315, 1474 +746 <-> 285, 681, 793 +747 <-> 169, 611, 814, 1548 +748 <-> 748 +749 <-> 1134, 1498 +750 <-> 146 +751 <-> 155, 783, 1856 +752 <-> 122, 1417 +753 <-> 478, 1505 +754 <-> 810, 1742, 1955 +755 <-> 1735, 1847 +756 <-> 978, 1095 +757 <-> 1153, 1730 +758 <-> 198, 1476 +759 <-> 759 +760 <-> 168 +761 <-> 1496 +762 <-> 562, 618 +763 <-> 246, 482, 1258 +764 <-> 465 +765 <-> 186 +766 <-> 1448 +767 <-> 893, 896, 1019 +768 <-> 1730 +769 <-> 340, 1043, 1065 +770 <-> 307, 458, 1453 +771 <-> 1168 +772 <-> 911 +773 <-> 586 +774 <-> 481, 584, 774, 1148 +775 <-> 480, 1485, 1894 +776 <-> 926 +777 <-> 305, 447, 632, 675 +778 <-> 1690 +779 <-> 386 +780 <-> 426, 469, 474 +781 <-> 719, 1543 +782 <-> 98, 428, 903 +783 <-> 751, 1558 +784 <-> 219, 622 +785 <-> 531 +786 <-> 197, 911, 1312 +787 <-> 120, 880 +788 <-> 1089, 1487 +789 <-> 603, 844, 1681, 1731 +790 <-> 790, 1126 +791 <-> 456, 1363 +792 <-> 308, 445 +793 <-> 746 +794 <-> 683, 951 +795 <-> 1732, 1986 +796 <-> 1210, 1878 +797 <-> 804 +798 <-> 615 +799 <-> 1651 +800 <-> 851, 860, 1907 +801 <-> 1110, 1537, 1773 +802 <-> 539, 719 +803 <-> 156, 1528 +804 <-> 266, 797, 1549 +805 <-> 89, 708, 962 +806 <-> 1429 +807 <-> 1800 +808 <-> 873, 1421 +809 <-> 476, 809 +810 <-> 754 +811 <-> 516, 965 +812 <-> 401, 513 +813 <-> 712, 1023 +814 <-> 747 +815 <-> 1145 +816 <-> 1413 +817 <-> 1235 +818 <-> 237, 240, 1506 +819 <-> 391, 857 +820 <-> 549, 1162 +821 <-> 1410, 1607 +822 <-> 30, 1485 +823 <-> 1445, 1454 +824 <-> 519, 730, 1824 +825 <-> 400, 1381, 1472 +826 <-> 587, 1040, 1198, 1618 +827 <-> 40 +828 <-> 1870 +829 <-> 149 +830 <-> 16 +831 <-> 255 +832 <-> 384, 1890, 1913 +833 <-> 1529 +834 <-> 834 +835 <-> 314 +836 <-> 216, 1166 +837 <-> 377, 988 +838 <-> 236, 323 +839 <-> 461, 1825 +840 <-> 211, 637, 715, 1710 +841 <-> 361, 610, 841, 1815 +842 <-> 1669 +843 <-> 874, 1468 +844 <-> 789 +845 <-> 143, 589, 1053 +846 <-> 572 +847 <-> 1285 +848 <-> 292 +849 <-> 849 +850 <-> 526 +851 <-> 800, 1368, 1497 +852 <-> 593, 1798 +853 <-> 1339, 1593, 1749 +854 <-> 1445, 1787 +855 <-> 1026, 1356 +856 <-> 132 +857 <-> 819 +858 <-> 1511 +859 <-> 1191 +860 <-> 284, 800, 1619 +861 <-> 111, 1266 +862 <-> 60, 281 +863 <-> 1605 +864 <-> 646 +865 <-> 873 +866 <-> 255, 924 +867 <-> 871, 1707 +868 <-> 12 +869 <-> 96, 1278 +870 <-> 1307 +871 <-> 404, 867, 1482 +872 <-> 734, 1200 +873 <-> 741, 808, 865, 873 +874 <-> 255, 843, 1201 +875 <-> 510, 1325, 1797 +876 <-> 1504, 1825 +877 <-> 253 +878 <-> 721 +879 <-> 948, 1291, 1847 +880 <-> 85, 184, 301, 787, 1503, 1617 +881 <-> 1688 +882 <-> 882 +883 <-> 725, 1582, 1874 +884 <-> 1352 +885 <-> 885, 1974 +886 <-> 431, 1650 +887 <-> 101 +888 <-> 102, 152 +889 <-> 433, 1016 +890 <-> 890 +891 <-> 12 +892 <-> 1402, 1923 +893 <-> 767 +894 <-> 484, 567 +895 <-> 342, 1123, 1158, 1648 +896 <-> 767 +897 <-> 80, 986, 1418 +898 <-> 205, 592, 1019 +899 <-> 493, 1053 +900 <-> 489 +901 <-> 901 +902 <-> 456 +903 <-> 782 +904 <-> 467, 904, 1924 +905 <-> 626, 1881 +906 <-> 245, 257, 276 +907 <-> 907, 1101, 1826 +908 <-> 908, 1230 +909 <-> 34, 572, 1186 +910 <-> 677, 961 +911 <-> 607, 772, 786, 1196, 1405 +912 <-> 562 +913 <-> 1636 +914 <-> 1892, 1963 +915 <-> 150, 521, 710 +916 <-> 244 +917 <-> 23, 680, 1336 +918 <-> 490, 1483 +919 <-> 96 +920 <-> 1880 +921 <-> 921 +922 <-> 975, 1255 +923 <-> 228, 1202, 1452 +924 <-> 866 +925 <-> 296, 1270 +926 <-> 280, 776, 1170, 1788, 1970 +927 <-> 712 +928 <-> 362, 595, 1103 +929 <-> 929 +930 <-> 65, 526, 1256, 1500, 1722 +931 <-> 183, 280, 1484 +932 <-> 1737 +933 <-> 299 +934 <-> 1387, 1851 +935 <-> 136, 935, 1537, 1775 +936 <-> 353 +937 <-> 689, 1347 +938 <-> 381, 566 +939 <-> 56, 1762 +940 <-> 1559, 1860 +941 <-> 1504, 1671, 1723, 1724 +942 <-> 1293 +943 <-> 21, 593 +944 <-> 1335 +945 <-> 1650 +946 <-> 1556 +947 <-> 26 +948 <-> 744, 879 +949 <-> 717, 1604 +950 <-> 1201, 1322 +951 <-> 794 +952 <-> 668, 1371 +953 <-> 1272 +954 <-> 954 +955 <-> 74 +956 <-> 648, 1870 +957 <-> 44, 1769 +958 <-> 13, 1388, 1660 +959 <-> 959 +960 <-> 153 +961 <-> 910 +962 <-> 17, 805 +963 <-> 339, 1783 +964 <-> 1100 +965 <-> 811, 1677 +966 <-> 966 +967 <-> 304, 1029, 1269, 1910 +968 <-> 81, 1091 +969 <-> 1379, 1693 +970 <-> 1289 +971 <-> 971 +972 <-> 70 +973 <-> 973 +974 <-> 663, 738, 1005 +975 <-> 922 +976 <-> 319 +977 <-> 585, 631 +978 <-> 756, 1628 +979 <-> 687, 979 +980 <-> 1151, 1317 +981 <-> 1199, 1902 +982 <-> 1223 +983 <-> 1931 +984 <-> 2, 409 +985 <-> 985 +986 <-> 358, 897, 1564 +987 <-> 987, 1644 +988 <-> 36, 837 +989 <-> 1275 +990 <-> 990, 1295 +991 <-> 207, 1415 +992 <-> 1242, 1397, 1467, 1579 +993 <-> 1042, 1767 +994 <-> 633, 1595, 1813 +995 <-> 194 +996 <-> 1096, 1369 +997 <-> 1231, 1973 +998 <-> 1367 +999 <-> 999 +1000 <-> 684, 1078 +1001 <-> 219 +1002 <-> 1442 +1003 <-> 441 +1004 <-> 558, 628, 678 +1005 <-> 475, 974 +1006 <-> 103, 345, 604 +1007 <-> 490, 1274 +1008 <-> 1708, 1819 +1009 <-> 1009, 1118 +1010 <-> 1223, 1803 +1011 <-> 1867 +1012 <-> 299, 1923 +1013 <-> 561, 1187, 1477, 1926 +1014 <-> 1861 +1015 <-> 446, 1015, 1858 +1016 <-> 889 +1017 <-> 1435 +1018 <-> 42, 98 +1019 <-> 767, 898, 1764 +1020 <-> 1020 +1021 <-> 1666 +1022 <-> 347, 1022, 1310 +1023 <-> 26, 813, 1109, 1538, 1988 +1024 <-> 195, 738 +1025 <-> 616 +1026 <-> 722, 855, 1337, 1415 +1027 <-> 241, 1309 +1028 <-> 1028 +1029 <-> 745, 967 +1030 <-> 1577, 1689 +1031 <-> 1031 +1032 <-> 125 +1033 <-> 604, 1127, 1194 +1034 <-> 192 +1035 <-> 1992 +1036 <-> 707, 1509 +1037 <-> 1347 +1038 <-> 389 +1039 <-> 723, 1535 +1040 <-> 826, 1245, 1918 +1041 <-> 281 +1042 <-> 993 +1043 <-> 67, 769, 1142 +1044 <-> 1690 +1045 <-> 287 +1046 <-> 1561 +1047 <-> 4 +1048 <-> 472, 1703 +1049 <-> 632, 1816 +1050 <-> 1157, 1899 +1051 <-> 1818 +1052 <-> 347, 1904 +1053 <-> 593, 845, 899 +1054 <-> 1983 +1055 <-> 1599 +1056 <-> 41, 320, 325, 1567 +1057 <-> 1372, 1569 +1058 <-> 185 +1059 <-> 1112, 1939 +1060 <-> 576, 1314, 1557, 1751, 1752 +1061 <-> 1285 +1062 <-> 1162, 1338, 1739 +1063 <-> 1291 +1064 <-> 132 +1065 <-> 769, 1317 +1066 <-> 510 +1067 <-> 405, 1452, 1953 +1068 <-> 1200 +1069 <-> 1069 +1070 <-> 19 +1071 <-> 1361, 1382 +1072 <-> 1307, 1534 +1073 <-> 1282 +1074 <-> 1323, 1653 +1075 <-> 457 +1076 <-> 695, 1703 +1077 <-> 1180 +1078 <-> 434, 1000 +1079 <-> 733 +1080 <-> 130, 1757 +1081 <-> 202, 623 +1082 <-> 1082 +1083 <-> 506, 703, 1279 +1084 <-> 314, 1812 +1085 <-> 242 +1086 <-> 350 +1087 <-> 1524 +1088 <-> 706, 1900 +1089 <-> 788 +1090 <-> 1260 +1091 <-> 968, 1522 +1092 <-> 173, 631, 1850 +1093 <-> 1093, 1390 +1094 <-> 182, 390 +1095 <-> 756 +1096 <-> 996 +1097 <-> 448 +1098 <-> 464, 612 +1099 <-> 292, 486 +1100 <-> 964, 1326 +1101 <-> 907, 1799 +1102 <-> 1927 +1103 <-> 928, 1103 +1104 <-> 252 +1105 <-> 166, 297 +1106 <-> 1106, 1896 +1107 <-> 1107 +1108 <-> 459 +1109 <-> 1023 +1110 <-> 422, 801 +1111 <-> 456, 685 +1112 <-> 262, 1059 +1113 <-> 1267 +1114 <-> 485 +1115 <-> 1115, 1827 +1116 <-> 1596 +1117 <-> 395, 449, 1382 +1118 <-> 1009 +1119 <-> 281, 1670 +1120 <-> 434, 1165 +1121 <-> 167, 1121 +1122 <-> 1809 +1123 <-> 895 +1124 <-> 283 +1125 <-> 499, 720, 1308 +1126 <-> 790, 1526 +1127 <-> 1033 +1128 <-> 1500 +1129 <-> 168, 418, 1642, 1947 +1130 <-> 1454 +1131 <-> 1683 +1132 <-> 517, 1784 +1133 <-> 288 +1134 <-> 314, 749, 1586 +1135 <-> 102 +1136 <-> 1136 +1137 <-> 680 +1138 <-> 1755 +1139 <-> 654 +1140 <-> 1140 +1141 <-> 1141 +1142 <-> 1043, 1862 +1143 <-> 1550 +1144 <-> 535, 1144, 1849 +1145 <-> 209, 671, 815, 1268 +1146 <-> 145 +1147 <-> 134 +1148 <-> 774 +1149 <-> 36, 497, 499, 1652 +1150 <-> 271, 1150 +1151 <-> 51, 980, 1651 +1152 <-> 533 +1153 <-> 398, 757 +1154 <-> 1313 +1155 <-> 145, 617, 1336, 1721 +1156 <-> 1838 +1157 <-> 10, 1050 +1158 <-> 895 +1159 <-> 532, 1708 +1160 <-> 1357 +1161 <-> 1200, 1999 +1162 <-> 820, 1062 +1163 <-> 1821 +1164 <-> 488, 1572 +1165 <-> 515, 1120 +1166 <-> 36, 836 +1167 <-> 664 +1168 <-> 11, 515, 771, 1967 +1169 <-> 358 +1170 <-> 926 +1171 <-> 1666, 1827 +1172 <-> 262, 1439 +1173 <-> 123, 355, 1341 +1174 <-> 1204, 1525 +1175 <-> 530 +1176 <-> 501, 654 +1177 <-> 1311, 1796 +1178 <-> 186, 1536, 1551, 1853 +1179 <-> 1822, 1947 +1180 <-> 1077, 1264 +1181 <-> 163, 1181 +1182 <-> 225 +1183 <-> 1237, 1715, 1798 +1184 <-> 41 +1185 <-> 297, 1185 +1186 <-> 909 +1187 <-> 619, 1013 +1188 <-> 1698 +1189 <-> 488, 560 +1190 <-> 1834, 1933 +1191 <-> 402, 859, 1191 +1192 <-> 1839 +1193 <-> 608, 1438 +1194 <-> 435, 1033, 1754 +1195 <-> 46, 1828 +1196 <-> 612, 911, 1975 +1197 <-> 1503, 1854 +1198 <-> 733, 826 +1199 <-> 981 +1200 <-> 493, 872, 1068, 1161 +1201 <-> 874, 950 +1202 <-> 923 +1203 <-> 40, 729, 1719 +1204 <-> 542, 557, 1174 +1205 <-> 1332 +1206 <-> 148, 182 +1207 <-> 1207 +1208 <-> 91, 273, 413, 658, 1234 +1209 <-> 1995 +1210 <-> 576, 703, 796 +1211 <-> 1227, 1891 +1212 <-> 338, 1362 +1213 <-> 6 +1214 <-> 589, 732 +1215 <-> 4, 100, 444, 1842 +1216 <-> 497, 1745 +1217 <-> 409, 1354 +1218 <-> 607 +1219 <-> 29, 484, 1712 +1220 <-> 570 +1221 <-> 302, 1429 +1222 <-> 625, 1412 +1223 <-> 260, 982, 1010, 1591 +1224 <-> 9, 258, 278, 1506, 1893 +1225 <-> 1906 +1226 <-> 1226 +1227 <-> 1211 +1228 <-> 1773 +1229 <-> 18 +1230 <-> 908 +1231 <-> 701, 997 +1232 <-> 348, 349 +1233 <-> 59 +1234 <-> 1208 +1235 <-> 817, 1994 +1236 <-> 508 +1237 <-> 1183 +1238 <-> 1529 +1239 <-> 540, 1524, 1552 +1240 <-> 512 +1241 <-> 1241 +1242 <-> 992, 1685 +1243 <-> 1934 +1244 <-> 1574, 1839 +1245 <-> 727, 1040 +1246 <-> 1380 +1247 <-> 1506, 1923 +1248 <-> 50, 1610 +1249 <-> 674 +1250 <-> 485 +1251 <-> 444, 655, 1718 +1252 <-> 266, 1862 +1253 <-> 645, 1709 +1254 <-> 1254 +1255 <-> 922, 1255, 1341 +1256 <-> 930, 1346 +1257 <-> 1465, 1844 +1258 <-> 763 +1259 <-> 335, 590, 1259 +1260 <-> 129, 1090 +1261 <-> 652, 1261, 1838 +1262 <-> 1262, 1912 +1263 <-> 7, 1438, 1554 +1264 <-> 338, 1180 +1265 <-> 269, 1265 +1266 <-> 861, 1281, 1423 +1267 <-> 612, 1113, 1289 +1268 <-> 1145 +1269 <-> 967 +1270 <-> 94, 215, 925, 1860 +1271 <-> 1376 +1272 <-> 223, 953 +1273 <-> 1301 +1274 <-> 1007, 1860 +1275 <-> 216, 393, 989, 1275 +1276 <-> 470 +1277 <-> 288 +1278 <-> 869 +1279 <-> 1083, 1755 +1280 <-> 1588 +1281 <-> 1266 +1282 <-> 677, 1073, 1575, 1625 +1283 <-> 1571 +1284 <-> 1828 +1285 <-> 847, 1061, 1641 +1286 <-> 1494, 1649, 1889 +1287 <-> 159 +1288 <-> 142, 1288 +1289 <-> 970, 1267, 1668 +1290 <-> 406 +1291 <-> 728, 879, 1063, 1885 +1292 <-> 1407 +1293 <-> 942, 1318, 1459 +1294 <-> 311, 1754 +1295 <-> 990, 1512 +1296 <-> 130, 479, 508 +1297 <-> 533, 559 +1298 <-> 1839 +1299 <-> 70 +1300 <-> 37, 1886, 1998 +1301 <-> 1273, 1340 +1302 <-> 317, 674, 1485 +1303 <-> 161, 1624 +1304 <-> 1304 +1305 <-> 1410 +1306 <-> 744 +1307 <-> 20, 870, 1072 +1308 <-> 194, 212, 1125 +1309 <-> 251, 1027 +1310 <-> 22, 1022, 1777 +1311 <-> 1177 +1312 <-> 786 +1313 <-> 1154, 1706 +1314 <-> 1060 +1315 <-> 683, 745 +1316 <-> 1793, 1898 +1317 <-> 523, 980, 1065, 1787 +1318 <-> 1293 +1319 <-> 1319 +1320 <-> 1320 +1321 <-> 206 +1322 <-> 950, 1957 +1323 <-> 1074, 1823 +1324 <-> 352 +1325 <-> 875, 1740 +1326 <-> 493, 1100 +1327 <-> 701, 1633 +1328 <-> 1, 55 +1329 <-> 1633 +1330 <-> 503, 1687, 1782 +1331 <-> 376, 1531, 1766 +1332 <-> 436, 705, 1205 +1333 <-> 565 +1334 <-> 1805 +1335 <-> 408, 944 +1336 <-> 917, 1155 +1337 <-> 1026 +1338 <-> 527, 1062 +1339 <-> 517, 853 +1340 <-> 601, 1301, 1708 +1341 <-> 1173, 1255 +1342 <-> 684 +1343 <-> 210 +1344 <-> 121, 483 +1345 <-> 175 +1346 <-> 578, 1256 +1347 <-> 937, 1037, 1735 +1348 <-> 685 +1349 <-> 275, 1594 +1350 <-> 127, 130 +1351 <-> 485 +1352 <-> 884, 1352 +1353 <-> 1604, 1800 +1354 <-> 1217 +1355 <-> 1355, 1985 +1356 <-> 855, 1840 +1357 <-> 651, 1160, 1388 +1358 <-> 92 +1359 <-> 112 +1360 <-> 1455 +1361 <-> 1071, 1909 +1362 <-> 304, 1212 +1363 <-> 791 +1364 <-> 161, 1426 +1365 <-> 1365 +1366 <-> 1366, 1433 +1367 <-> 133, 998 +1368 <-> 851 +1369 <-> 12, 996, 1425 +1370 <-> 665 +1371 <-> 13, 735, 952, 1371, 1857 +1372 <-> 613, 1057 +1373 <-> 638, 1511 +1374 <-> 230, 1593 +1375 <-> 104 +1376 <-> 179, 1271, 1639 +1377 <-> 291 +1378 <-> 1919 +1379 <-> 575, 969 +1380 <-> 1246, 1501, 1903 +1381 <-> 73, 825, 1922 +1382 <-> 1071, 1117, 1541, 1810 +1383 <-> 111 +1384 <-> 457 +1385 <-> 1878, 1966 +1386 <-> 1396 +1387 <-> 229, 934, 1853 +1388 <-> 958, 1357, 1424 +1389 <-> 531 +1390 <-> 1093, 1603 +1391 <-> 408 +1392 <-> 446 +1393 <-> 411 +1394 <-> 1866 +1395 <-> 450, 1851 +1396 <-> 519, 1386 +1397 <-> 79, 568, 992 +1398 <-> 224 +1399 <-> 1443, 1799, 1915 +1400 <-> 744 +1401 <-> 1685 +1402 <-> 892 +1403 <-> 1714 +1404 <-> 632 +1405 <-> 911, 1532 +1406 <-> 233, 1606 +1407 <-> 700, 1292 +1408 <-> 431, 1408, 1416 +1409 <-> 211, 472 +1410 <-> 821, 1305 +1411 <-> 1653, 1993 +1412 <-> 628, 1222 +1413 <-> 473, 816 +1414 <-> 451 +1415 <-> 991, 1026 +1416 <-> 1408 +1417 <-> 752 +1418 <-> 423, 897 +1419 <-> 2, 30 +1420 <-> 1420 +1421 <-> 808 +1422 <-> 58, 104 +1423 <-> 1266 +1424 <-> 1388 +1425 <-> 1369 +1426 <-> 737, 1364, 1847, 1913 +1427 <-> 246, 274 +1428 <-> 1964 +1429 <-> 76, 806, 1221 +1430 <-> 1430 +1431 <-> 322 +1432 <-> 1719 +1433 <-> 1366, 1988 +1434 <-> 89, 106 +1435 <-> 1017, 1730 +1436 <-> 1997 +1437 <-> 317, 352 +1438 <-> 1193, 1263 +1439 <-> 1172 +1440 <-> 344 +1441 <-> 37 +1442 <-> 1002, 1860 +1443 <-> 1399 +1444 <-> 31, 298 +1445 <-> 823, 854 +1446 <-> 113, 403 +1447 <-> 1508, 1720 +1448 <-> 766, 1791 +1449 <-> 527 +1450 <-> 134 +1451 <-> 88, 571 +1452 <-> 923, 1067 +1453 <-> 770 +1454 <-> 95, 823, 1130, 1454 +1455 <-> 1360, 1533 +1456 <-> 1456, 1489, 1529 +1457 <-> 114, 149, 1956 +1458 <-> 382, 631, 1458 +1459 <-> 570, 1293 +1460 <-> 202, 369 +1461 <-> 300 +1462 <-> 1636 +1463 <-> 393, 1659, 1939 +1464 <-> 31 +1465 <-> 3, 323, 547, 1257, 1732 +1466 <-> 320 +1467 <-> 723, 992, 1706 +1468 <-> 154, 843 +1469 <-> 713 +1470 <-> 354, 699 +1471 <-> 1471 +1472 <-> 825 +1473 <-> 715 +1474 <-> 745 +1475 <-> 645 +1476 <-> 622, 758 +1477 <-> 1013, 1645, 1669 +1478 <-> 711 +1479 <-> 734 +1480 <-> 650 +1481 <-> 1481 +1482 <-> 310, 871 +1483 <-> 918, 1504 +1484 <-> 931 +1485 <-> 336, 421, 775, 822, 1302 +1486 <-> 157, 1631 +1487 <-> 236, 437, 788, 1980 +1488 <-> 1560 +1489 <-> 739, 1456 +1490 <-> 383 +1491 <-> 535 +1492 <-> 471, 614 +1493 <-> 743 +1494 <-> 565, 1286 +1495 <-> 1627 +1496 <-> 761, 1496 +1497 <-> 249, 425, 851 +1498 <-> 749 +1499 <-> 231 +1500 <-> 930, 1128 +1501 <-> 390, 1380 +1502 <-> 1713 +1503 <-> 152, 880, 1197 +1504 <-> 47, 876, 941, 1483, 1945 +1505 <-> 295, 530, 753 +1506 <-> 818, 1224, 1247 +1507 <-> 141, 216, 1565, 1726 +1508 <-> 647, 1447, 1521, 1590 +1509 <-> 580, 1036, 1605, 1609 +1510 <-> 40, 1885 +1511 <-> 858, 1373 +1512 <-> 1295 +1513 <-> 78, 430 +1514 <-> 1772 +1515 <-> 153 +1516 <-> 144, 260, 1818 +1517 <-> 32, 1616, 1806 +1518 <-> 472 +1519 <-> 259 +1520 <-> 94, 1542 +1521 <-> 1508 +1522 <-> 313, 1091, 1631 +1523 <-> 685 +1524 <-> 241, 1087, 1239 +1525 <-> 1174 +1526 <-> 1126 +1527 <-> 1835 +1528 <-> 803 +1529 <-> 460, 833, 1238, 1456 +1530 <-> 1784 +1531 <-> 1331 +1532 <-> 629, 1405 +1533 <-> 470, 1455, 1533, 1796 +1534 <-> 1072 +1535 <-> 605, 724, 1039 +1536 <-> 1178 +1537 <-> 273, 801, 935 +1538 <-> 1023, 1734 +1539 <-> 713 +1540 <-> 1748 +1541 <-> 1382, 1683 +1542 <-> 1520 +1543 <-> 781 +1544 <-> 1631 +1545 <-> 1910 +1546 <-> 1942 +1547 <-> 260 +1548 <-> 581, 747 +1549 <-> 804 +1550 <-> 159, 1143 +1551 <-> 1178 +1552 <-> 461, 1239, 1846 +1553 <-> 1553, 1982 +1554 <-> 68, 85, 1263, 1597 +1555 <-> 1713, 1931 +1556 <-> 946, 1556 +1557 <-> 718, 1060 +1558 <-> 783 +1559 <-> 640, 940 +1560 <-> 1488, 1806, 1898, 1949 +1561 <-> 441, 1046 +1562 <-> 715, 1889 +1563 <-> 552 +1564 <-> 986 +1565 <-> 1507, 1689 +1566 <-> 1570 +1567 <-> 1056 +1568 <-> 3, 371 +1569 <-> 119, 1057, 1852 +1570 <-> 1566, 1570 +1571 <-> 1283, 1736 +1572 <-> 569, 1164, 1995 +1573 <-> 1573, 1784, 1987 +1574 <-> 1244, 1574 +1575 <-> 1282, 1575, 1866 +1576 <-> 123 +1577 <-> 1030 +1578 <-> 289, 710 +1579 <-> 992, 1684 +1580 <-> 4 +1581 <-> 1581 +1582 <-> 128, 883 +1583 <-> 57 +1584 <-> 116 +1585 <-> 637 +1586 <-> 1134 +1587 <-> 1587 +1588 <-> 159, 1280 +1589 <-> 1915 +1590 <-> 136, 1508 +1591 <-> 1223 +1592 <-> 293, 1891 +1593 <-> 853, 1374 +1594 <-> 1349, 1886 +1595 <-> 994, 1595 +1596 <-> 364, 1116 +1597 <-> 1554 +1598 <-> 1729 +1599 <-> 583, 1055 +1600 <-> 147, 458, 1600 +1601 <-> 1894 +1602 <-> 116 +1603 <-> 1390 +1604 <-> 481, 657, 949, 1353, 1983 +1605 <-> 115, 668, 863, 1509 +1606 <-> 1406 +1607 <-> 261, 410, 821 +1608 <-> 690 +1609 <-> 1509 +1610 <-> 673, 1248 +1611 <-> 118, 1788 +1612 <-> 1854 +1613 <-> 547 +1614 <-> 547, 1807 +1615 <-> 479 +1616 <-> 222, 1517 +1617 <-> 880, 1989 +1618 <-> 826 +1619 <-> 860, 1807 +1620 <-> 291 +1621 <-> 618, 1957 +1622 <-> 535 +1623 <-> 480, 531 +1624 <-> 1303 +1625 <-> 223, 1282 +1626 <-> 503, 604 +1627 <-> 1495, 1933 +1628 <-> 288, 978 +1629 <-> 1629 +1630 <-> 465, 1872 +1631 <-> 1486, 1522, 1544 +1632 <-> 196 +1633 <-> 1327, 1329 +1634 <-> 123, 661, 740 +1635 <-> 139 +1636 <-> 913, 1462, 1752 +1637 <-> 404, 522 +1638 <-> 1779, 1813 +1639 <-> 33, 190, 1376, 1639 +1640 <-> 1816 +1641 <-> 554, 1285 +1642 <-> 1129 +1643 <-> 71, 1844 +1644 <-> 171, 987 +1645 <-> 1477 +1646 <-> 16, 199 +1647 <-> 1702 +1648 <-> 895 +1649 <-> 1286 +1650 <-> 344, 886, 945 +1651 <-> 799, 1151 +1652 <-> 1149, 1961, 1984 +1653 <-> 222, 1074, 1411 +1654 <-> 108, 553 +1655 <-> 35, 156, 226, 1992 +1656 <-> 537, 655 +1657 <-> 105, 609 +1658 <-> 1658 +1659 <-> 519, 1463 +1660 <-> 958 +1661 <-> 290, 1929 +1662 <-> 435 +1663 <-> 1855 +1664 <-> 345 +1665 <-> 554 +1666 <-> 1021, 1171 +1667 <-> 662, 687 +1668 <-> 1289 +1669 <-> 842, 1477, 1795, 1975 +1670 <-> 1119, 1921 +1671 <-> 941 +1672 <-> 115 +1673 <-> 385 +1674 <-> 518 +1675 <-> 247, 676 +1676 <-> 509, 1987 +1677 <-> 965, 1677 +1678 <-> 151, 1692 +1679 <-> 541 +1680 <-> 1680 +1681 <-> 221, 789 +1682 <-> 1736, 1767, 1947 +1683 <-> 1131, 1541 +1684 <-> 1579 +1685 <-> 1242, 1401 +1686 <-> 1736 +1687 <-> 680, 1330 +1688 <-> 881, 1829 +1689 <-> 1030, 1565 +1690 <-> 778, 1044, 1900 +1691 <-> 28, 75 +1692 <-> 627, 1678 +1693 <-> 122, 400, 671, 969 +1694 <-> 58, 61 +1695 <-> 741 +1696 <-> 224, 1958 +1697 <-> 1935 +1698 <-> 301, 1188 +1699 <-> 29, 37 +1700 <-> 742, 1883 +1701 <-> 662 +1702 <-> 441, 1647 +1703 <-> 1048, 1076 +1704 <-> 185 +1705 <-> 715 +1706 <-> 1313, 1467 +1707 <-> 867 +1708 <-> 1008, 1159, 1340 +1709 <-> 560, 561, 1253, 1976 +1710 <-> 840 +1711 <-> 1711 +1712 <-> 12, 1219 +1713 <-> 631, 1502, 1555 +1714 <-> 1403, 1714, 1902 +1715 <-> 1183 +1716 <-> 79 +1717 <-> 738 +1718 <-> 602, 1251 +1719 <-> 1203, 1432 +1720 <-> 1447 +1721 <-> 1155 +1722 <-> 930 +1723 <-> 941 +1724 <-> 941 +1725 <-> 432 +1726 <-> 1507 +1727 <-> 397 +1728 <-> 1728, 1937 +1729 <-> 1598, 1913 +1730 <-> 105, 757, 768, 1435, 1730 +1731 <-> 789 +1732 <-> 795, 1465 +1733 <-> 551, 1765, 1835 +1734 <-> 1538 +1735 <-> 755, 1347 +1736 <-> 1571, 1682, 1686 +1737 <-> 932, 1795 +1738 <-> 329, 1738 +1739 <-> 267, 1062, 1848 +1740 <-> 1325 +1741 <-> 326, 541, 1952 +1742 <-> 344, 754 +1743 <-> 75, 253, 507 +1744 <-> 288 +1745 <-> 1216 +1746 <-> 92, 138 +1747 <-> 333 +1748 <-> 182, 1540 +1749 <-> 853 +1750 <-> 88 +1751 <-> 363, 1060 +1752 <-> 1060, 1636 +1753 <-> 433, 583, 1873 +1754 <-> 1194, 1294 +1755 <-> 1138, 1279 +1756 <-> 538, 636 +1757 <-> 1080 +1758 <-> 472, 514 +1759 <-> 284 +1760 <-> 1760 +1761 <-> 326, 620 +1762 <-> 648, 939, 1989 +1763 <-> 383 +1764 <-> 599, 1019, 1941 +1765 <-> 1733 +1766 <-> 289, 365, 1331 +1767 <-> 993, 1682, 1767 +1768 <-> 1768, 1859 +1769 <-> 957 +1770 <-> 288 +1771 <-> 1875 +1772 <-> 1514, 1772 +1773 <-> 801, 1228 +1774 <-> 0 +1775 <-> 935 +1776 <-> 133 +1777 <-> 1310 +1778 <-> 17, 320 +1779 <-> 465, 1638 +1780 <-> 1906 +1781 <-> 1969 +1782 <-> 1330 +1783 <-> 97, 963, 1960, 1983 +1784 <-> 1132, 1530, 1573 +1785 <-> 422 +1786 <-> 1786 +1787 <-> 854, 1317 +1788 <-> 926, 1611 +1789 <-> 586, 1829 +1790 <-> 74, 1790 +1791 <-> 52, 109, 1448 +1792 <-> 1860 +1793 <-> 1316, 1981 +1794 <-> 138 +1795 <-> 1669, 1737, 1861 +1796 <-> 1177, 1533 +1797 <-> 327, 875 +1798 <-> 852, 1183 +1799 <-> 1101, 1399, 1964 +1800 <-> 491, 641, 807, 1353 +1801 <-> 20, 455 +1802 <-> 123 +1803 <-> 415, 1010 +1804 <-> 1804 +1805 <-> 1334, 1926 +1806 <-> 1517, 1560 +1807 <-> 1614, 1619 +1808 <-> 261, 643 +1809 <-> 145, 1122 +1810 <-> 1382 +1811 <-> 60 +1812 <-> 1084 +1813 <-> 213, 994, 1638 +1814 <-> 14, 355 +1815 <-> 841, 1996 +1816 <-> 1049, 1640 +1817 <-> 388 +1818 <-> 1051, 1516 +1819 <-> 1008 +1820 <-> 403 +1821 <-> 350, 1163 +1822 <-> 669, 1179, 1927 +1823 <-> 1323 +1824 <-> 667, 824, 1879 +1825 <-> 608, 839, 876, 1965 +1826 <-> 473, 907 +1827 <-> 1115, 1171 +1828 <-> 440, 1195, 1284, 1913 +1829 <-> 275, 1688, 1789 +1830 <-> 1830 +1831 <-> 1831 +1832 <-> 248, 726 +1833 <-> 1833 +1834 <-> 1190 +1835 <-> 639, 1527, 1733 +1836 <-> 250, 1836 +1837 <-> 577, 1970 +1838 <-> 1156, 1261 +1839 <-> 1192, 1244, 1298 +1840 <-> 1356 +1841 <-> 81 +1842 <-> 738, 1215 +1843 <-> 1843 +1844 <-> 383, 1257, 1643 +1845 <-> 260, 451 +1846 <-> 1552 +1847 <-> 755, 879, 1426 +1848 <-> 38, 1739 +1849 <-> 468, 1144 +1850 <-> 1092 +1851 <-> 934, 1395 +1852 <-> 198, 1569 +1853 <-> 718, 1178, 1387 +1854 <-> 588, 1197, 1612 +1855 <-> 162, 734, 1663 +1856 <-> 236, 751 +1857 <-> 1371 +1858 <-> 1015 +1859 <-> 1768 +1860 <-> 940, 1270, 1274, 1442, 1792 +1861 <-> 1014, 1795 +1862 <-> 1142, 1252 +1863 <-> 281 +1864 <-> 717 +1865 <-> 1865 +1866 <-> 574, 602, 1394, 1575 +1867 <-> 707, 1011 +1868 <-> 659, 1868 +1869 <-> 173, 1991 +1870 <-> 391, 828, 956, 1880 +1871 <-> 189, 692 +1872 <-> 1630 +1873 <-> 42, 1753 +1874 <-> 883 +1875 <-> 11, 1771 +1876 <-> 158 +1877 <-> 186 +1878 <-> 796, 1385 +1879 <-> 486, 1824 +1880 <-> 920, 1870 +1881 <-> 433, 573, 905 +1882 <-> 625, 1954 +1883 <-> 300, 1700 +1884 <-> 1884 +1885 <-> 1291, 1510 +1886 <-> 19, 209, 1300, 1594 +1887 <-> 277 +1888 <-> 85 +1889 <-> 489, 1286, 1562 +1890 <-> 170, 832 +1891 <-> 1211, 1592, 1973 +1892 <-> 611, 697, 914 +1893 <-> 1224 +1894 <-> 775, 1601 +1895 <-> 308, 323, 618 +1896 <-> 1106 +1897 <-> 118, 368, 408 +1898 <-> 1316, 1560, 1944 +1899 <-> 463, 1050 +1900 <-> 1088, 1690, 1951 +1901 <-> 16, 27 +1902 <-> 981, 1714 +1903 <-> 1380 +1904 <-> 278, 1052 +1905 <-> 20 +1906 <-> 671, 1225, 1780 +1907 <-> 800 +1908 <-> 583 +1909 <-> 1361, 1940 +1910 <-> 134, 967, 1545 +1911 <-> 1973 +1912 <-> 1262 +1913 <-> 832, 1426, 1729, 1828 +1914 <-> 1914 +1915 <-> 1399, 1589 +1916 <-> 650, 1916 +1917 <-> 726, 1917 +1918 <-> 1040 +1919 <-> 196, 1378, 1919 +1920 <-> 1, 218 +1921 <-> 1670, 1952 +1922 <-> 1381 +1923 <-> 892, 1012, 1247 +1924 <-> 373, 904 +1925 <-> 210, 1935 +1926 <-> 543, 1013, 1805 +1927 <-> 1102, 1822 +1928 <-> 346, 1928 +1929 <-> 1661 +1930 <-> 19 +1931 <-> 983, 1555 +1932 <-> 685 +1933 <-> 16, 1190, 1627, 1933 +1934 <-> 288, 1243 +1935 <-> 535, 1697, 1925 +1936 <-> 295 +1937 <-> 112, 157, 1728 +1938 <-> 293 +1939 <-> 689, 1059, 1463 +1940 <-> 616, 1909 +1941 <-> 1764 +1942 <-> 243, 256, 1546 +1943 <-> 1950 +1944 <-> 260, 1898 +1945 <-> 1504 +1946 <-> 1946 +1947 <-> 87, 1129, 1179, 1682 +1948 <-> 294 +1949 <-> 1560 +1950 <-> 21, 1943 +1951 <-> 407, 1900 +1952 <-> 1741, 1921 +1953 <-> 1067 +1954 <-> 696, 1882 +1955 <-> 754 +1956 <-> 1457 +1957 <-> 1322, 1621 +1958 <-> 48, 708, 1696 +1959 <-> 1959 +1960 <-> 389, 1783 +1961 <-> 1652 +1962 <-> 29 +1963 <-> 914 +1964 <-> 1428, 1799 +1965 <-> 1825 +1966 <-> 1385 +1967 <-> 1168 +1968 <-> 265, 475 +1969 <-> 4, 1781 +1970 <-> 315, 926, 1837 +1971 <-> 242, 545, 1971 +1972 <-> 1972 +1973 <-> 997, 1891, 1911 +1974 <-> 885 +1975 <-> 1196, 1669 +1976 <-> 1709 +1977 <-> 1977 +1978 <-> 1978 +1979 <-> 1979 +1980 <-> 598, 1487 +1981 <-> 1793 +1982 <-> 1553 +1983 <-> 1054, 1604, 1783 +1984 <-> 731, 1652 +1985 <-> 1355 +1986 <-> 795 +1987 <-> 1573, 1676 +1988 <-> 495, 1023, 1433 +1989 <-> 1617, 1762 +1990 <-> 376 +1991 <-> 1869 +1992 <-> 1035, 1655 +1993 <-> 1411 +1994 <-> 1235, 1994 +1995 <-> 57, 1209, 1572 +1996 <-> 181, 1815 +1997 <-> 395, 1436 +1998 <-> 1300 +1999 <-> 175, 1161 diff --git a/2017/d12/ex2/ex2.py b/2017/d12/ex2/ex2.py new file mode 100755 index 0000000..c6c0fbf --- /dev/null +++ b/2017/d12/ex2/ex2.py @@ -0,0 +1,71 @@ +#!/usr/bin/env python + +import collections +import sys + + +class UnionFind: + _parent: list[int] + _rank: list[int] + + def __init__(self, size: int): + # Each node is in its own set, making it its own parent... + self._parent = list(range(size)) + # ... And its rank 0 + self._rank = [0] * size + + def find(self, elem: int) -> int: + while (parent := self._parent[elem]) != elem: + # Replace each parent link by a link to the grand-parent + elem, self._parent[elem] = parent, self._parent[parent] + return elem + + def union(self, lhs: int, rhs: int) -> int: + lhs = self.find(lhs) + rhs = self.find(rhs) + # Bail out early if they already belong to the same set + if lhs == rhs: + return lhs + # Always keep `lhs` as the taller tree + if self._rank[lhs] < self._rank[rhs]: + lhs, rhs = rhs, lhs + # Merge the smaller tree into the taller one + self._parent[rhs] = lhs + # Update the rank when merging trees of approximately the same size + if self._rank[lhs] == self._rank[rhs]: + self._rank[lhs] += 1 + return lhs + + def sets(self) -> dict[int, set[int]]: + res: dict[int, set[int]] = collections.defaultdict(set) + for elem in range(len(self._parent)): + res[self.find(elem)].add(elem) + return dict(res) + + +def solve(input: str) -> int: + def parse_line(input: str) -> tuple[int, set[int]]: + origin, others = input.split(" <-> ") + return int(origin), {int(n) for n in others.split(", ")} + + def parse(input: str) -> dict[int, set[int]]: + return {n: children for n, children in map(parse_line, input.splitlines())} + + def count_groups(graph: dict[int, set[int]]) -> int: + uf = UnionFind(len(graph)) + for n, children in graph.items(): + for child in children: + uf.union(n, child) + return len(uf.sets()) + + graph = parse(input) + return count_groups(graph) + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d12/ex2/input b/2017/d12/ex2/input new file mode 100644 index 0000000..80e4ce6 --- /dev/null +++ b/2017/d12/ex2/input @@ -0,0 +1,2000 @@ +0 <-> 199, 1774 +1 <-> 350, 1328, 1920 +2 <-> 477, 984, 1419 +3 <-> 1465, 1568 +4 <-> 359, 1047, 1215, 1580, 1969 +5 <-> 613 +6 <-> 49, 617, 1213 +7 <-> 1263 +8 <-> 410 +9 <-> 1224 +10 <-> 1157 +11 <-> 304, 1168, 1875 +12 <-> 868, 891, 1369, 1712 +13 <-> 958, 1371 +14 <-> 1814 +15 <-> 261, 556 +16 <-> 830, 1646, 1901, 1933 +17 <-> 962, 1778 +18 <-> 109, 1229 +19 <-> 239, 1070, 1886, 1930 +20 <-> 327, 1307, 1801, 1905 +21 <-> 943, 1950 +22 <-> 1310 +23 <-> 659, 917 +24 <-> 373 +25 <-> 369 +26 <-> 947, 1023 +27 <-> 338, 1901 +28 <-> 1691 +29 <-> 132, 1219, 1699, 1962 +30 <-> 424, 822, 1419 +31 <-> 1444, 1464 +32 <-> 702, 1517 +33 <-> 1639 +34 <-> 909 +35 <-> 690, 1655 +36 <-> 988, 1149, 1166 +37 <-> 649, 1300, 1441, 1699 +38 <-> 1848 +39 <-> 382 +40 <-> 827, 1203, 1510 +41 <-> 714, 1056, 1184 +42 <-> 1018, 1873 +43 <-> 214 +44 <-> 670, 957 +45 <-> 45 +46 <-> 1195 +47 <-> 559, 1504 +48 <-> 1958 +49 <-> 6 +50 <-> 50, 1248 +51 <-> 1151 +52 <-> 52, 521, 1791 +53 <-> 304 +54 <-> 601 +55 <-> 1328 +56 <-> 939 +57 <-> 1583, 1995 +58 <-> 1422, 1694 +59 <-> 395, 1233 +60 <-> 862, 1811 +61 <-> 345, 1694 +62 <-> 62, 276 +63 <-> 280 +64 <-> 199 +65 <-> 117, 930 +66 <-> 364, 697 +67 <-> 1043 +68 <-> 287, 504, 1554 +69 <-> 498, 706 +70 <-> 77, 333, 713, 972, 1299 +71 <-> 1643 +72 <-> 694 +73 <-> 1381 +74 <-> 955, 1790 +75 <-> 1691, 1743 +76 <-> 76, 638, 1429 +77 <-> 70 +78 <-> 1513 +79 <-> 1397, 1716 +80 <-> 897 +81 <-> 968, 1841 +82 <-> 649 +83 <-> 522 +84 <-> 84, 125, 399, 498 +85 <-> 880, 1554, 1888 +86 <-> 86 +87 <-> 579, 1947 +88 <-> 470, 1451, 1750 +89 <-> 805, 1434 +90 <-> 453 +91 <-> 1208 +92 <-> 688, 1358, 1746 +93 <-> 357, 647 +94 <-> 234, 1270, 1520 +95 <-> 620, 1454 +96 <-> 390, 869, 919 +97 <-> 693, 1783 +98 <-> 259, 529, 782, 1018 +99 <-> 678 +100 <-> 1215 +101 <-> 459, 887 +102 <-> 888, 1135 +103 <-> 1006 +104 <-> 1375, 1422 +105 <-> 1657, 1730 +106 <-> 216, 1434 +107 <-> 333 +108 <-> 468, 1654 +109 <-> 18, 1791 +110 <-> 372 +111 <-> 111, 861, 1383 +112 <-> 1359, 1937 +113 <-> 414, 736, 1446 +114 <-> 426, 1457 +115 <-> 1605, 1672 +116 <-> 116, 713, 1584, 1602 +117 <-> 65 +118 <-> 1611, 1897 +119 <-> 541, 1569 +120 <-> 412, 787 +121 <-> 1344 +122 <-> 698, 752, 1693 +123 <-> 1173, 1576, 1634, 1802 +124 <-> 735 +125 <-> 84, 1032 +126 <-> 126, 225, 332 +127 <-> 1350 +128 <-> 128, 319, 327, 1582 +129 <-> 129, 654, 1260 +130 <-> 1080, 1296, 1350 +131 <-> 131 +132 <-> 29, 856, 1064 +133 <-> 659, 1367, 1776 +134 <-> 648, 1147, 1450, 1910 +135 <-> 411 +136 <-> 353, 935, 1590 +137 <-> 228 +138 <-> 194, 452, 1746, 1794 +139 <-> 139, 494, 1635 +140 <-> 681 +141 <-> 1507 +142 <-> 1288 +143 <-> 845 +144 <-> 1516 +145 <-> 502, 1146, 1155, 1809 +146 <-> 146, 750 +147 <-> 1600 +148 <-> 1206 +149 <-> 829, 1457 +150 <-> 675, 915 +151 <-> 651, 1678 +152 <-> 888, 1503 +153 <-> 498, 960, 1515 +154 <-> 1468 +155 <-> 751 +156 <-> 528, 803, 1655 +157 <-> 1486, 1937 +158 <-> 590, 1876 +159 <-> 159, 185, 1287, 1550, 1588 +160 <-> 160, 548 +161 <-> 1303, 1364 +162 <-> 1855 +163 <-> 1181 +164 <-> 442 +165 <-> 490 +166 <-> 1105 +167 <-> 1121 +168 <-> 760, 1129 +169 <-> 747 +170 <-> 1890 +171 <-> 1644 +172 <-> 593, 665 +173 <-> 1092, 1869 +174 <-> 705 +175 <-> 1345, 1999 +176 <-> 234, 606 +177 <-> 557, 688 +178 <-> 373 +179 <-> 1376 +180 <-> 638 +181 <-> 1996 +182 <-> 1094, 1206, 1748 +183 <-> 931 +184 <-> 880 +185 <-> 159, 1058, 1704 +186 <-> 765, 1178, 1877 +187 <-> 732 +188 <-> 188 +189 <-> 189, 1871 +190 <-> 395, 1639 +191 <-> 441 +192 <-> 192, 1034 +193 <-> 494 +194 <-> 138, 995, 1308 +195 <-> 1024 +196 <-> 226, 1632, 1919 +197 <-> 786 +198 <-> 286, 758, 1852 +199 <-> 0, 64, 1646 +200 <-> 314 +201 <-> 459, 658 +202 <-> 321, 492, 599, 1081, 1460 +203 <-> 225 +204 <-> 331, 462, 600 +205 <-> 898 +206 <-> 734, 1321 +207 <-> 558, 991 +208 <-> 397 +209 <-> 1145, 1886 +210 <-> 1343, 1925 +211 <-> 840, 1409 +212 <-> 1308 +213 <-> 1813 +214 <-> 43, 282 +215 <-> 1270 +216 <-> 106, 836, 1275, 1507 +217 <-> 312 +218 <-> 290, 386, 639, 1920 +219 <-> 784, 1001 +220 <-> 220, 322 +221 <-> 1681 +222 <-> 1616, 1653 +223 <-> 436, 1272, 1625 +224 <-> 1398, 1696 +225 <-> 126, 203, 1182 +226 <-> 196, 1655 +227 <-> 623 +228 <-> 137, 923 +229 <-> 253, 1387 +230 <-> 1374 +231 <-> 389, 1499 +232 <-> 442 +233 <-> 473, 1406 +234 <-> 94, 176 +235 <-> 235 +236 <-> 607, 838, 1487, 1856 +237 <-> 818 +238 <-> 387, 628 +239 <-> 19 +240 <-> 818 +241 <-> 1027, 1524 +242 <-> 1085, 1971 +243 <-> 1942 +244 <-> 299, 390, 916 +245 <-> 906 +246 <-> 246, 534, 763, 1427 +247 <-> 531, 1675 +248 <-> 336, 1832 +249 <-> 1497 +250 <-> 1836 +251 <-> 1309 +252 <-> 581, 1104 +253 <-> 229, 877, 1743 +254 <-> 254, 621 +255 <-> 831, 866, 874 +256 <-> 1942 +257 <-> 906 +258 <-> 1224 +259 <-> 98, 316, 419, 718, 1519 +260 <-> 1223, 1516, 1547, 1845, 1944 +261 <-> 15, 278, 1607, 1808 +262 <-> 1112, 1172 +263 <-> 424 +264 <-> 680 +265 <-> 1968 +266 <-> 804, 1252 +267 <-> 1739 +268 <-> 538, 546 +269 <-> 1265 +270 <-> 270 +271 <-> 1150 +272 <-> 272 +273 <-> 1208, 1537 +274 <-> 1427 +275 <-> 1349, 1829 +276 <-> 62, 906 +277 <-> 461, 634, 1887 +278 <-> 261, 1224, 1904 +279 <-> 303, 537 +280 <-> 63, 280, 926, 931 +281 <-> 862, 1041, 1119, 1863 +282 <-> 214, 488, 644 +283 <-> 646, 1124 +284 <-> 860, 1759 +285 <-> 746 +286 <-> 198 +287 <-> 68, 1045 +288 <-> 332, 1133, 1277, 1628, 1744, 1770, 1934 +289 <-> 1578, 1766 +290 <-> 218, 439, 1661 +291 <-> 596, 1377, 1620 +292 <-> 700, 848, 1099 +293 <-> 293, 1592, 1938 +294 <-> 653, 1948 +295 <-> 1505, 1936 +296 <-> 625, 925 +297 <-> 1105, 1185 +298 <-> 298, 544, 1444 +299 <-> 244, 933, 1012 +300 <-> 300, 1461, 1883 +301 <-> 880, 1698 +302 <-> 1221 +303 <-> 279, 375 +304 <-> 11, 53, 967, 1362 +305 <-> 777 +306 <-> 344 +307 <-> 582, 770 +308 <-> 792, 1895 +309 <-> 539 +310 <-> 390, 1482 +311 <-> 441, 1294 +312 <-> 217, 743 +313 <-> 1522 +314 <-> 200, 502, 835, 1084, 1134 +315 <-> 1970 +316 <-> 259 +317 <-> 1302, 1437 +318 <-> 365 +319 <-> 128, 976 +320 <-> 1056, 1466, 1778 +321 <-> 202 +322 <-> 220, 1431 +323 <-> 838, 1465, 1895 +324 <-> 443 +325 <-> 1056 +326 <-> 463, 1741, 1761 +327 <-> 20, 128, 681, 1797 +328 <-> 328, 348 +329 <-> 378, 1738 +330 <-> 459 +331 <-> 204, 331 +332 <-> 126, 288 +333 <-> 70, 107, 1747 +334 <-> 517, 614 +335 <-> 1259 +336 <-> 248, 550, 1485 +337 <-> 337 +338 <-> 27, 1212, 1264 +339 <-> 430, 963 +340 <-> 769 +341 <-> 341 +342 <-> 593, 718, 895 +343 <-> 569 +344 <-> 306, 1440, 1650, 1742 +345 <-> 61, 1006, 1664 +346 <-> 448, 1928 +347 <-> 1022, 1052 +348 <-> 328, 1232 +349 <-> 1232 +350 <-> 1, 526, 1086, 1821 +351 <-> 584 +352 <-> 518, 686, 1324, 1437 +353 <-> 136, 936 +354 <-> 1470 +355 <-> 1173, 1814 +356 <-> 698 +357 <-> 93 +358 <-> 737, 986, 1169 +359 <-> 4 +360 <-> 363 +361 <-> 417, 841 +362 <-> 928 +363 <-> 360, 1751 +364 <-> 66, 364, 1596 +365 <-> 318, 1766 +366 <-> 366 +367 <-> 367 +368 <-> 1897 +369 <-> 25, 369, 1460 +370 <-> 370 +371 <-> 1568 +372 <-> 110, 582 +373 <-> 24, 178, 1924 +374 <-> 374 +375 <-> 303 +376 <-> 1331, 1990 +377 <-> 388, 601, 837 +378 <-> 329 +379 <-> 623 +380 <-> 671 +381 <-> 938 +382 <-> 39, 1458 +383 <-> 383, 1490, 1763, 1844 +384 <-> 832 +385 <-> 745, 1673 +386 <-> 218, 779 +387 <-> 238 +388 <-> 377, 1817 +389 <-> 231, 656, 1038, 1960 +390 <-> 96, 244, 310, 721, 1094, 1501 +391 <-> 438, 819, 1870 +392 <-> 697 +393 <-> 443, 1275, 1463 +394 <-> 480 +395 <-> 59, 190, 1117, 1997 +396 <-> 595 +397 <-> 208, 397, 1727 +398 <-> 1153 +399 <-> 84 +400 <-> 825, 1693 +401 <-> 812 +402 <-> 1191 +403 <-> 1446, 1820 +404 <-> 442, 871, 1637 +405 <-> 426, 1067 +406 <-> 460, 1290 +407 <-> 1951 +408 <-> 1335, 1391, 1897 +409 <-> 984, 1217 +410 <-> 8, 1607 +411 <-> 135, 411, 454, 1393 +412 <-> 120 +413 <-> 1208 +414 <-> 113 +415 <-> 415, 1803 +416 <-> 428 +417 <-> 361 +418 <-> 1129 +419 <-> 259 +420 <-> 628 +421 <-> 1485 +422 <-> 1110, 1785 +423 <-> 1418 +424 <-> 30, 263 +425 <-> 1497 +426 <-> 114, 405, 780 +427 <-> 427 +428 <-> 416, 782 +429 <-> 429 +430 <-> 339, 1513 +431 <-> 886, 1408 +432 <-> 586, 1725 +433 <-> 889, 1753, 1881 +434 <-> 1078, 1120 +435 <-> 660, 1194, 1662 +436 <-> 223, 1332 +437 <-> 1487 +438 <-> 391 +439 <-> 290 +440 <-> 1828 +441 <-> 191, 311, 1003, 1561, 1702 +442 <-> 164, 232, 404 +443 <-> 324, 393 +444 <-> 1215, 1251 +445 <-> 792 +446 <-> 1015, 1392 +447 <-> 777 +448 <-> 346, 1097 +449 <-> 1117 +450 <-> 1395 +451 <-> 1414, 1845 +452 <-> 138 +453 <-> 90, 453 +454 <-> 411 +455 <-> 1801 +456 <-> 456, 791, 902, 1111 +457 <-> 457, 1075, 1384 +458 <-> 770, 1600 +459 <-> 101, 201, 330, 1108 +460 <-> 406, 1529 +461 <-> 277, 839, 1552 +462 <-> 204 +463 <-> 326, 1899 +464 <-> 1098 +465 <-> 764, 1630, 1779 +466 <-> 627 +467 <-> 904 +468 <-> 108, 1849 +469 <-> 469, 603, 780 +470 <-> 88, 1276, 1533 +471 <-> 1492 +472 <-> 472, 1048, 1409, 1518, 1758 +473 <-> 233, 1413, 1826 +474 <-> 780 +475 <-> 1005, 1968 +476 <-> 809 +477 <-> 2 +478 <-> 753 +479 <-> 479, 1296, 1615 +480 <-> 394, 775, 1623 +481 <-> 774, 1604 +482 <-> 763 +483 <-> 522, 591, 1344 +484 <-> 894, 1219 +485 <-> 507, 1114, 1250, 1351 +486 <-> 1099, 1879 +487 <-> 487 +488 <-> 282, 1164, 1189 +489 <-> 900, 1889 +490 <-> 165, 918, 1007 +491 <-> 1800 +492 <-> 202 +493 <-> 615, 899, 1200, 1326 +494 <-> 139, 193 +495 <-> 704, 1988 +496 <-> 496 +497 <-> 1149, 1216 +498 <-> 69, 84, 153 +499 <-> 1125, 1149 +500 <-> 642 +501 <-> 524, 1176 +502 <-> 145, 314 +503 <-> 1330, 1626 +504 <-> 68, 699 +505 <-> 672 +506 <-> 1083 +507 <-> 485, 1743 +508 <-> 520, 1236, 1296 +509 <-> 1676 +510 <-> 875, 1066 +511 <-> 511 +512 <-> 512, 1240 +513 <-> 705, 812 +514 <-> 1758 +515 <-> 1165, 1168 +516 <-> 811 +517 <-> 334, 1132, 1339 +518 <-> 352, 1674 +519 <-> 824, 1396, 1659 +520 <-> 508 +521 <-> 52, 915 +522 <-> 83, 483, 1637 +523 <-> 1317 +524 <-> 501 +525 <-> 525 +526 <-> 350, 850, 930 +527 <-> 527, 1338, 1449 +528 <-> 156 +529 <-> 98 +530 <-> 691, 1175, 1505 +531 <-> 247, 785, 1389, 1623 +532 <-> 1159 +533 <-> 1152, 1297 +534 <-> 246 +535 <-> 1144, 1491, 1622, 1935 +536 <-> 708 +537 <-> 279, 1656 +538 <-> 268, 538, 1756 +539 <-> 309, 802 +540 <-> 1239 +541 <-> 119, 1679, 1741 +542 <-> 1204 +543 <-> 642, 1926 +544 <-> 298 +545 <-> 1971 +546 <-> 268 +547 <-> 1465, 1613, 1614 +548 <-> 160 +549 <-> 820 +550 <-> 336 +551 <-> 1733 +552 <-> 552, 1563 +553 <-> 1654 +554 <-> 554, 1641, 1665 +555 <-> 555 +556 <-> 15 +557 <-> 177, 1204 +558 <-> 207, 1004 +559 <-> 47, 1297 +560 <-> 1189, 1709 +561 <-> 1013, 1709 +562 <-> 762, 912 +563 <-> 563 +564 <-> 585 +565 <-> 1333, 1494 +566 <-> 566, 938 +567 <-> 894 +568 <-> 586, 1397 +569 <-> 343, 1572 +570 <-> 704, 1220, 1459 +571 <-> 1451 +572 <-> 651, 846, 909 +573 <-> 1881 +574 <-> 1866 +575 <-> 1379 +576 <-> 1060, 1210 +577 <-> 1837 +578 <-> 1346 +579 <-> 87 +580 <-> 1509 +581 <-> 252, 1548 +582 <-> 307, 372 +583 <-> 624, 1599, 1753, 1908 +584 <-> 351, 774 +585 <-> 564, 977 +586 <-> 432, 568, 773, 1789 +587 <-> 826 +588 <-> 1854 +589 <-> 719, 845, 1214 +590 <-> 158, 1259 +591 <-> 483 +592 <-> 743, 898 +593 <-> 172, 342, 852, 943, 1053 +594 <-> 594 +595 <-> 396, 928 +596 <-> 291, 596 +597 <-> 597 +598 <-> 1980 +599 <-> 202, 1764 +600 <-> 204 +601 <-> 54, 377, 1340 +602 <-> 1718, 1866 +603 <-> 469, 789 +604 <-> 1006, 1033, 1626 +605 <-> 1535 +606 <-> 176 +607 <-> 236, 911, 1218 +608 <-> 1193, 1825 +609 <-> 1657 +610 <-> 733, 841 +611 <-> 747, 1892 +612 <-> 1098, 1196, 1267 +613 <-> 5, 1372 +614 <-> 334, 1492 +615 <-> 493, 798 +616 <-> 1025, 1940 +617 <-> 6, 666, 1155 +618 <-> 762, 1621, 1895 +619 <-> 1187 +620 <-> 95, 1761 +621 <-> 254 +622 <-> 784, 1476 +623 <-> 227, 379, 1081 +624 <-> 583 +625 <-> 296, 1222, 1882 +626 <-> 905 +627 <-> 466, 1692 +628 <-> 238, 420, 1004, 1412 +629 <-> 1532 +630 <-> 630 +631 <-> 977, 1092, 1458, 1713 +632 <-> 777, 1049, 1404 +633 <-> 994 +634 <-> 277 +635 <-> 635 +636 <-> 703, 1756 +637 <-> 840, 1585 +638 <-> 76, 180, 1373 +639 <-> 218, 639, 1835 +640 <-> 1559 +641 <-> 1800 +642 <-> 500, 543 +643 <-> 1808 +644 <-> 282 +645 <-> 1253, 1475 +646 <-> 283, 646, 864 +647 <-> 93, 1508 +648 <-> 134, 956, 1762 +649 <-> 37, 82 +650 <-> 1480, 1916 +651 <-> 151, 572, 1357 +652 <-> 1261 +653 <-> 294, 653 +654 <-> 129, 1139, 1176 +655 <-> 1251, 1656 +656 <-> 389 +657 <-> 1604 +658 <-> 201, 1208 +659 <-> 23, 133, 1868 +660 <-> 435 +661 <-> 1634 +662 <-> 1667, 1701 +663 <-> 974 +664 <-> 664, 1167 +665 <-> 172, 1370 +666 <-> 617 +667 <-> 1824 +668 <-> 952, 1605 +669 <-> 1822 +670 <-> 44, 670 +671 <-> 380, 1145, 1693, 1906 +672 <-> 505, 693 +673 <-> 1610 +674 <-> 1249, 1302 +675 <-> 150, 777 +676 <-> 1675 +677 <-> 910, 1282 +678 <-> 99, 1004 +679 <-> 679 +680 <-> 264, 917, 1137, 1687 +681 <-> 140, 327, 746 +682 <-> 682 +683 <-> 794, 1315 +684 <-> 1000, 1342 +685 <-> 1111, 1348, 1523, 1932 +686 <-> 352 +687 <-> 979, 1667 +688 <-> 92, 177 +689 <-> 937, 1939 +690 <-> 35, 1608 +691 <-> 530, 691 +692 <-> 1871 +693 <-> 97, 672 +694 <-> 72, 694 +695 <-> 1076 +696 <-> 1954 +697 <-> 66, 392, 1892 +698 <-> 122, 356, 698 +699 <-> 504, 1470 +700 <-> 292, 1407 +701 <-> 1231, 1327 +702 <-> 32 +703 <-> 636, 1083, 1210 +704 <-> 495, 570 +705 <-> 174, 513, 1332 +706 <-> 69, 1088 +707 <-> 1036, 1867 +708 <-> 536, 805, 1958 +709 <-> 709 +710 <-> 915, 1578 +711 <-> 711, 1478 +712 <-> 813, 927 +713 <-> 70, 116, 1469, 1539 +714 <-> 41 +715 <-> 840, 1473, 1562, 1705 +716 <-> 716 +717 <-> 949, 1864 +718 <-> 259, 342, 1557, 1853 +719 <-> 589, 781, 802 +720 <-> 1125 +721 <-> 390, 878 +722 <-> 1026 +723 <-> 1039, 1467 +724 <-> 1535 +725 <-> 883 +726 <-> 1832, 1917 +727 <-> 1245 +728 <-> 1291 +729 <-> 1203 +730 <-> 824 +731 <-> 1984 +732 <-> 187, 1214 +733 <-> 610, 1079, 1198 +734 <-> 206, 872, 1479, 1855 +735 <-> 124, 1371 +736 <-> 113, 736 +737 <-> 358, 1426 +738 <-> 974, 1024, 1717, 1842 +739 <-> 1489 +740 <-> 1634 +741 <-> 873, 1695 +742 <-> 1700 +743 <-> 312, 592, 1493 +744 <-> 948, 1306, 1400 +745 <-> 385, 1029, 1315, 1474 +746 <-> 285, 681, 793 +747 <-> 169, 611, 814, 1548 +748 <-> 748 +749 <-> 1134, 1498 +750 <-> 146 +751 <-> 155, 783, 1856 +752 <-> 122, 1417 +753 <-> 478, 1505 +754 <-> 810, 1742, 1955 +755 <-> 1735, 1847 +756 <-> 978, 1095 +757 <-> 1153, 1730 +758 <-> 198, 1476 +759 <-> 759 +760 <-> 168 +761 <-> 1496 +762 <-> 562, 618 +763 <-> 246, 482, 1258 +764 <-> 465 +765 <-> 186 +766 <-> 1448 +767 <-> 893, 896, 1019 +768 <-> 1730 +769 <-> 340, 1043, 1065 +770 <-> 307, 458, 1453 +771 <-> 1168 +772 <-> 911 +773 <-> 586 +774 <-> 481, 584, 774, 1148 +775 <-> 480, 1485, 1894 +776 <-> 926 +777 <-> 305, 447, 632, 675 +778 <-> 1690 +779 <-> 386 +780 <-> 426, 469, 474 +781 <-> 719, 1543 +782 <-> 98, 428, 903 +783 <-> 751, 1558 +784 <-> 219, 622 +785 <-> 531 +786 <-> 197, 911, 1312 +787 <-> 120, 880 +788 <-> 1089, 1487 +789 <-> 603, 844, 1681, 1731 +790 <-> 790, 1126 +791 <-> 456, 1363 +792 <-> 308, 445 +793 <-> 746 +794 <-> 683, 951 +795 <-> 1732, 1986 +796 <-> 1210, 1878 +797 <-> 804 +798 <-> 615 +799 <-> 1651 +800 <-> 851, 860, 1907 +801 <-> 1110, 1537, 1773 +802 <-> 539, 719 +803 <-> 156, 1528 +804 <-> 266, 797, 1549 +805 <-> 89, 708, 962 +806 <-> 1429 +807 <-> 1800 +808 <-> 873, 1421 +809 <-> 476, 809 +810 <-> 754 +811 <-> 516, 965 +812 <-> 401, 513 +813 <-> 712, 1023 +814 <-> 747 +815 <-> 1145 +816 <-> 1413 +817 <-> 1235 +818 <-> 237, 240, 1506 +819 <-> 391, 857 +820 <-> 549, 1162 +821 <-> 1410, 1607 +822 <-> 30, 1485 +823 <-> 1445, 1454 +824 <-> 519, 730, 1824 +825 <-> 400, 1381, 1472 +826 <-> 587, 1040, 1198, 1618 +827 <-> 40 +828 <-> 1870 +829 <-> 149 +830 <-> 16 +831 <-> 255 +832 <-> 384, 1890, 1913 +833 <-> 1529 +834 <-> 834 +835 <-> 314 +836 <-> 216, 1166 +837 <-> 377, 988 +838 <-> 236, 323 +839 <-> 461, 1825 +840 <-> 211, 637, 715, 1710 +841 <-> 361, 610, 841, 1815 +842 <-> 1669 +843 <-> 874, 1468 +844 <-> 789 +845 <-> 143, 589, 1053 +846 <-> 572 +847 <-> 1285 +848 <-> 292 +849 <-> 849 +850 <-> 526 +851 <-> 800, 1368, 1497 +852 <-> 593, 1798 +853 <-> 1339, 1593, 1749 +854 <-> 1445, 1787 +855 <-> 1026, 1356 +856 <-> 132 +857 <-> 819 +858 <-> 1511 +859 <-> 1191 +860 <-> 284, 800, 1619 +861 <-> 111, 1266 +862 <-> 60, 281 +863 <-> 1605 +864 <-> 646 +865 <-> 873 +866 <-> 255, 924 +867 <-> 871, 1707 +868 <-> 12 +869 <-> 96, 1278 +870 <-> 1307 +871 <-> 404, 867, 1482 +872 <-> 734, 1200 +873 <-> 741, 808, 865, 873 +874 <-> 255, 843, 1201 +875 <-> 510, 1325, 1797 +876 <-> 1504, 1825 +877 <-> 253 +878 <-> 721 +879 <-> 948, 1291, 1847 +880 <-> 85, 184, 301, 787, 1503, 1617 +881 <-> 1688 +882 <-> 882 +883 <-> 725, 1582, 1874 +884 <-> 1352 +885 <-> 885, 1974 +886 <-> 431, 1650 +887 <-> 101 +888 <-> 102, 152 +889 <-> 433, 1016 +890 <-> 890 +891 <-> 12 +892 <-> 1402, 1923 +893 <-> 767 +894 <-> 484, 567 +895 <-> 342, 1123, 1158, 1648 +896 <-> 767 +897 <-> 80, 986, 1418 +898 <-> 205, 592, 1019 +899 <-> 493, 1053 +900 <-> 489 +901 <-> 901 +902 <-> 456 +903 <-> 782 +904 <-> 467, 904, 1924 +905 <-> 626, 1881 +906 <-> 245, 257, 276 +907 <-> 907, 1101, 1826 +908 <-> 908, 1230 +909 <-> 34, 572, 1186 +910 <-> 677, 961 +911 <-> 607, 772, 786, 1196, 1405 +912 <-> 562 +913 <-> 1636 +914 <-> 1892, 1963 +915 <-> 150, 521, 710 +916 <-> 244 +917 <-> 23, 680, 1336 +918 <-> 490, 1483 +919 <-> 96 +920 <-> 1880 +921 <-> 921 +922 <-> 975, 1255 +923 <-> 228, 1202, 1452 +924 <-> 866 +925 <-> 296, 1270 +926 <-> 280, 776, 1170, 1788, 1970 +927 <-> 712 +928 <-> 362, 595, 1103 +929 <-> 929 +930 <-> 65, 526, 1256, 1500, 1722 +931 <-> 183, 280, 1484 +932 <-> 1737 +933 <-> 299 +934 <-> 1387, 1851 +935 <-> 136, 935, 1537, 1775 +936 <-> 353 +937 <-> 689, 1347 +938 <-> 381, 566 +939 <-> 56, 1762 +940 <-> 1559, 1860 +941 <-> 1504, 1671, 1723, 1724 +942 <-> 1293 +943 <-> 21, 593 +944 <-> 1335 +945 <-> 1650 +946 <-> 1556 +947 <-> 26 +948 <-> 744, 879 +949 <-> 717, 1604 +950 <-> 1201, 1322 +951 <-> 794 +952 <-> 668, 1371 +953 <-> 1272 +954 <-> 954 +955 <-> 74 +956 <-> 648, 1870 +957 <-> 44, 1769 +958 <-> 13, 1388, 1660 +959 <-> 959 +960 <-> 153 +961 <-> 910 +962 <-> 17, 805 +963 <-> 339, 1783 +964 <-> 1100 +965 <-> 811, 1677 +966 <-> 966 +967 <-> 304, 1029, 1269, 1910 +968 <-> 81, 1091 +969 <-> 1379, 1693 +970 <-> 1289 +971 <-> 971 +972 <-> 70 +973 <-> 973 +974 <-> 663, 738, 1005 +975 <-> 922 +976 <-> 319 +977 <-> 585, 631 +978 <-> 756, 1628 +979 <-> 687, 979 +980 <-> 1151, 1317 +981 <-> 1199, 1902 +982 <-> 1223 +983 <-> 1931 +984 <-> 2, 409 +985 <-> 985 +986 <-> 358, 897, 1564 +987 <-> 987, 1644 +988 <-> 36, 837 +989 <-> 1275 +990 <-> 990, 1295 +991 <-> 207, 1415 +992 <-> 1242, 1397, 1467, 1579 +993 <-> 1042, 1767 +994 <-> 633, 1595, 1813 +995 <-> 194 +996 <-> 1096, 1369 +997 <-> 1231, 1973 +998 <-> 1367 +999 <-> 999 +1000 <-> 684, 1078 +1001 <-> 219 +1002 <-> 1442 +1003 <-> 441 +1004 <-> 558, 628, 678 +1005 <-> 475, 974 +1006 <-> 103, 345, 604 +1007 <-> 490, 1274 +1008 <-> 1708, 1819 +1009 <-> 1009, 1118 +1010 <-> 1223, 1803 +1011 <-> 1867 +1012 <-> 299, 1923 +1013 <-> 561, 1187, 1477, 1926 +1014 <-> 1861 +1015 <-> 446, 1015, 1858 +1016 <-> 889 +1017 <-> 1435 +1018 <-> 42, 98 +1019 <-> 767, 898, 1764 +1020 <-> 1020 +1021 <-> 1666 +1022 <-> 347, 1022, 1310 +1023 <-> 26, 813, 1109, 1538, 1988 +1024 <-> 195, 738 +1025 <-> 616 +1026 <-> 722, 855, 1337, 1415 +1027 <-> 241, 1309 +1028 <-> 1028 +1029 <-> 745, 967 +1030 <-> 1577, 1689 +1031 <-> 1031 +1032 <-> 125 +1033 <-> 604, 1127, 1194 +1034 <-> 192 +1035 <-> 1992 +1036 <-> 707, 1509 +1037 <-> 1347 +1038 <-> 389 +1039 <-> 723, 1535 +1040 <-> 826, 1245, 1918 +1041 <-> 281 +1042 <-> 993 +1043 <-> 67, 769, 1142 +1044 <-> 1690 +1045 <-> 287 +1046 <-> 1561 +1047 <-> 4 +1048 <-> 472, 1703 +1049 <-> 632, 1816 +1050 <-> 1157, 1899 +1051 <-> 1818 +1052 <-> 347, 1904 +1053 <-> 593, 845, 899 +1054 <-> 1983 +1055 <-> 1599 +1056 <-> 41, 320, 325, 1567 +1057 <-> 1372, 1569 +1058 <-> 185 +1059 <-> 1112, 1939 +1060 <-> 576, 1314, 1557, 1751, 1752 +1061 <-> 1285 +1062 <-> 1162, 1338, 1739 +1063 <-> 1291 +1064 <-> 132 +1065 <-> 769, 1317 +1066 <-> 510 +1067 <-> 405, 1452, 1953 +1068 <-> 1200 +1069 <-> 1069 +1070 <-> 19 +1071 <-> 1361, 1382 +1072 <-> 1307, 1534 +1073 <-> 1282 +1074 <-> 1323, 1653 +1075 <-> 457 +1076 <-> 695, 1703 +1077 <-> 1180 +1078 <-> 434, 1000 +1079 <-> 733 +1080 <-> 130, 1757 +1081 <-> 202, 623 +1082 <-> 1082 +1083 <-> 506, 703, 1279 +1084 <-> 314, 1812 +1085 <-> 242 +1086 <-> 350 +1087 <-> 1524 +1088 <-> 706, 1900 +1089 <-> 788 +1090 <-> 1260 +1091 <-> 968, 1522 +1092 <-> 173, 631, 1850 +1093 <-> 1093, 1390 +1094 <-> 182, 390 +1095 <-> 756 +1096 <-> 996 +1097 <-> 448 +1098 <-> 464, 612 +1099 <-> 292, 486 +1100 <-> 964, 1326 +1101 <-> 907, 1799 +1102 <-> 1927 +1103 <-> 928, 1103 +1104 <-> 252 +1105 <-> 166, 297 +1106 <-> 1106, 1896 +1107 <-> 1107 +1108 <-> 459 +1109 <-> 1023 +1110 <-> 422, 801 +1111 <-> 456, 685 +1112 <-> 262, 1059 +1113 <-> 1267 +1114 <-> 485 +1115 <-> 1115, 1827 +1116 <-> 1596 +1117 <-> 395, 449, 1382 +1118 <-> 1009 +1119 <-> 281, 1670 +1120 <-> 434, 1165 +1121 <-> 167, 1121 +1122 <-> 1809 +1123 <-> 895 +1124 <-> 283 +1125 <-> 499, 720, 1308 +1126 <-> 790, 1526 +1127 <-> 1033 +1128 <-> 1500 +1129 <-> 168, 418, 1642, 1947 +1130 <-> 1454 +1131 <-> 1683 +1132 <-> 517, 1784 +1133 <-> 288 +1134 <-> 314, 749, 1586 +1135 <-> 102 +1136 <-> 1136 +1137 <-> 680 +1138 <-> 1755 +1139 <-> 654 +1140 <-> 1140 +1141 <-> 1141 +1142 <-> 1043, 1862 +1143 <-> 1550 +1144 <-> 535, 1144, 1849 +1145 <-> 209, 671, 815, 1268 +1146 <-> 145 +1147 <-> 134 +1148 <-> 774 +1149 <-> 36, 497, 499, 1652 +1150 <-> 271, 1150 +1151 <-> 51, 980, 1651 +1152 <-> 533 +1153 <-> 398, 757 +1154 <-> 1313 +1155 <-> 145, 617, 1336, 1721 +1156 <-> 1838 +1157 <-> 10, 1050 +1158 <-> 895 +1159 <-> 532, 1708 +1160 <-> 1357 +1161 <-> 1200, 1999 +1162 <-> 820, 1062 +1163 <-> 1821 +1164 <-> 488, 1572 +1165 <-> 515, 1120 +1166 <-> 36, 836 +1167 <-> 664 +1168 <-> 11, 515, 771, 1967 +1169 <-> 358 +1170 <-> 926 +1171 <-> 1666, 1827 +1172 <-> 262, 1439 +1173 <-> 123, 355, 1341 +1174 <-> 1204, 1525 +1175 <-> 530 +1176 <-> 501, 654 +1177 <-> 1311, 1796 +1178 <-> 186, 1536, 1551, 1853 +1179 <-> 1822, 1947 +1180 <-> 1077, 1264 +1181 <-> 163, 1181 +1182 <-> 225 +1183 <-> 1237, 1715, 1798 +1184 <-> 41 +1185 <-> 297, 1185 +1186 <-> 909 +1187 <-> 619, 1013 +1188 <-> 1698 +1189 <-> 488, 560 +1190 <-> 1834, 1933 +1191 <-> 402, 859, 1191 +1192 <-> 1839 +1193 <-> 608, 1438 +1194 <-> 435, 1033, 1754 +1195 <-> 46, 1828 +1196 <-> 612, 911, 1975 +1197 <-> 1503, 1854 +1198 <-> 733, 826 +1199 <-> 981 +1200 <-> 493, 872, 1068, 1161 +1201 <-> 874, 950 +1202 <-> 923 +1203 <-> 40, 729, 1719 +1204 <-> 542, 557, 1174 +1205 <-> 1332 +1206 <-> 148, 182 +1207 <-> 1207 +1208 <-> 91, 273, 413, 658, 1234 +1209 <-> 1995 +1210 <-> 576, 703, 796 +1211 <-> 1227, 1891 +1212 <-> 338, 1362 +1213 <-> 6 +1214 <-> 589, 732 +1215 <-> 4, 100, 444, 1842 +1216 <-> 497, 1745 +1217 <-> 409, 1354 +1218 <-> 607 +1219 <-> 29, 484, 1712 +1220 <-> 570 +1221 <-> 302, 1429 +1222 <-> 625, 1412 +1223 <-> 260, 982, 1010, 1591 +1224 <-> 9, 258, 278, 1506, 1893 +1225 <-> 1906 +1226 <-> 1226 +1227 <-> 1211 +1228 <-> 1773 +1229 <-> 18 +1230 <-> 908 +1231 <-> 701, 997 +1232 <-> 348, 349 +1233 <-> 59 +1234 <-> 1208 +1235 <-> 817, 1994 +1236 <-> 508 +1237 <-> 1183 +1238 <-> 1529 +1239 <-> 540, 1524, 1552 +1240 <-> 512 +1241 <-> 1241 +1242 <-> 992, 1685 +1243 <-> 1934 +1244 <-> 1574, 1839 +1245 <-> 727, 1040 +1246 <-> 1380 +1247 <-> 1506, 1923 +1248 <-> 50, 1610 +1249 <-> 674 +1250 <-> 485 +1251 <-> 444, 655, 1718 +1252 <-> 266, 1862 +1253 <-> 645, 1709 +1254 <-> 1254 +1255 <-> 922, 1255, 1341 +1256 <-> 930, 1346 +1257 <-> 1465, 1844 +1258 <-> 763 +1259 <-> 335, 590, 1259 +1260 <-> 129, 1090 +1261 <-> 652, 1261, 1838 +1262 <-> 1262, 1912 +1263 <-> 7, 1438, 1554 +1264 <-> 338, 1180 +1265 <-> 269, 1265 +1266 <-> 861, 1281, 1423 +1267 <-> 612, 1113, 1289 +1268 <-> 1145 +1269 <-> 967 +1270 <-> 94, 215, 925, 1860 +1271 <-> 1376 +1272 <-> 223, 953 +1273 <-> 1301 +1274 <-> 1007, 1860 +1275 <-> 216, 393, 989, 1275 +1276 <-> 470 +1277 <-> 288 +1278 <-> 869 +1279 <-> 1083, 1755 +1280 <-> 1588 +1281 <-> 1266 +1282 <-> 677, 1073, 1575, 1625 +1283 <-> 1571 +1284 <-> 1828 +1285 <-> 847, 1061, 1641 +1286 <-> 1494, 1649, 1889 +1287 <-> 159 +1288 <-> 142, 1288 +1289 <-> 970, 1267, 1668 +1290 <-> 406 +1291 <-> 728, 879, 1063, 1885 +1292 <-> 1407 +1293 <-> 942, 1318, 1459 +1294 <-> 311, 1754 +1295 <-> 990, 1512 +1296 <-> 130, 479, 508 +1297 <-> 533, 559 +1298 <-> 1839 +1299 <-> 70 +1300 <-> 37, 1886, 1998 +1301 <-> 1273, 1340 +1302 <-> 317, 674, 1485 +1303 <-> 161, 1624 +1304 <-> 1304 +1305 <-> 1410 +1306 <-> 744 +1307 <-> 20, 870, 1072 +1308 <-> 194, 212, 1125 +1309 <-> 251, 1027 +1310 <-> 22, 1022, 1777 +1311 <-> 1177 +1312 <-> 786 +1313 <-> 1154, 1706 +1314 <-> 1060 +1315 <-> 683, 745 +1316 <-> 1793, 1898 +1317 <-> 523, 980, 1065, 1787 +1318 <-> 1293 +1319 <-> 1319 +1320 <-> 1320 +1321 <-> 206 +1322 <-> 950, 1957 +1323 <-> 1074, 1823 +1324 <-> 352 +1325 <-> 875, 1740 +1326 <-> 493, 1100 +1327 <-> 701, 1633 +1328 <-> 1, 55 +1329 <-> 1633 +1330 <-> 503, 1687, 1782 +1331 <-> 376, 1531, 1766 +1332 <-> 436, 705, 1205 +1333 <-> 565 +1334 <-> 1805 +1335 <-> 408, 944 +1336 <-> 917, 1155 +1337 <-> 1026 +1338 <-> 527, 1062 +1339 <-> 517, 853 +1340 <-> 601, 1301, 1708 +1341 <-> 1173, 1255 +1342 <-> 684 +1343 <-> 210 +1344 <-> 121, 483 +1345 <-> 175 +1346 <-> 578, 1256 +1347 <-> 937, 1037, 1735 +1348 <-> 685 +1349 <-> 275, 1594 +1350 <-> 127, 130 +1351 <-> 485 +1352 <-> 884, 1352 +1353 <-> 1604, 1800 +1354 <-> 1217 +1355 <-> 1355, 1985 +1356 <-> 855, 1840 +1357 <-> 651, 1160, 1388 +1358 <-> 92 +1359 <-> 112 +1360 <-> 1455 +1361 <-> 1071, 1909 +1362 <-> 304, 1212 +1363 <-> 791 +1364 <-> 161, 1426 +1365 <-> 1365 +1366 <-> 1366, 1433 +1367 <-> 133, 998 +1368 <-> 851 +1369 <-> 12, 996, 1425 +1370 <-> 665 +1371 <-> 13, 735, 952, 1371, 1857 +1372 <-> 613, 1057 +1373 <-> 638, 1511 +1374 <-> 230, 1593 +1375 <-> 104 +1376 <-> 179, 1271, 1639 +1377 <-> 291 +1378 <-> 1919 +1379 <-> 575, 969 +1380 <-> 1246, 1501, 1903 +1381 <-> 73, 825, 1922 +1382 <-> 1071, 1117, 1541, 1810 +1383 <-> 111 +1384 <-> 457 +1385 <-> 1878, 1966 +1386 <-> 1396 +1387 <-> 229, 934, 1853 +1388 <-> 958, 1357, 1424 +1389 <-> 531 +1390 <-> 1093, 1603 +1391 <-> 408 +1392 <-> 446 +1393 <-> 411 +1394 <-> 1866 +1395 <-> 450, 1851 +1396 <-> 519, 1386 +1397 <-> 79, 568, 992 +1398 <-> 224 +1399 <-> 1443, 1799, 1915 +1400 <-> 744 +1401 <-> 1685 +1402 <-> 892 +1403 <-> 1714 +1404 <-> 632 +1405 <-> 911, 1532 +1406 <-> 233, 1606 +1407 <-> 700, 1292 +1408 <-> 431, 1408, 1416 +1409 <-> 211, 472 +1410 <-> 821, 1305 +1411 <-> 1653, 1993 +1412 <-> 628, 1222 +1413 <-> 473, 816 +1414 <-> 451 +1415 <-> 991, 1026 +1416 <-> 1408 +1417 <-> 752 +1418 <-> 423, 897 +1419 <-> 2, 30 +1420 <-> 1420 +1421 <-> 808 +1422 <-> 58, 104 +1423 <-> 1266 +1424 <-> 1388 +1425 <-> 1369 +1426 <-> 737, 1364, 1847, 1913 +1427 <-> 246, 274 +1428 <-> 1964 +1429 <-> 76, 806, 1221 +1430 <-> 1430 +1431 <-> 322 +1432 <-> 1719 +1433 <-> 1366, 1988 +1434 <-> 89, 106 +1435 <-> 1017, 1730 +1436 <-> 1997 +1437 <-> 317, 352 +1438 <-> 1193, 1263 +1439 <-> 1172 +1440 <-> 344 +1441 <-> 37 +1442 <-> 1002, 1860 +1443 <-> 1399 +1444 <-> 31, 298 +1445 <-> 823, 854 +1446 <-> 113, 403 +1447 <-> 1508, 1720 +1448 <-> 766, 1791 +1449 <-> 527 +1450 <-> 134 +1451 <-> 88, 571 +1452 <-> 923, 1067 +1453 <-> 770 +1454 <-> 95, 823, 1130, 1454 +1455 <-> 1360, 1533 +1456 <-> 1456, 1489, 1529 +1457 <-> 114, 149, 1956 +1458 <-> 382, 631, 1458 +1459 <-> 570, 1293 +1460 <-> 202, 369 +1461 <-> 300 +1462 <-> 1636 +1463 <-> 393, 1659, 1939 +1464 <-> 31 +1465 <-> 3, 323, 547, 1257, 1732 +1466 <-> 320 +1467 <-> 723, 992, 1706 +1468 <-> 154, 843 +1469 <-> 713 +1470 <-> 354, 699 +1471 <-> 1471 +1472 <-> 825 +1473 <-> 715 +1474 <-> 745 +1475 <-> 645 +1476 <-> 622, 758 +1477 <-> 1013, 1645, 1669 +1478 <-> 711 +1479 <-> 734 +1480 <-> 650 +1481 <-> 1481 +1482 <-> 310, 871 +1483 <-> 918, 1504 +1484 <-> 931 +1485 <-> 336, 421, 775, 822, 1302 +1486 <-> 157, 1631 +1487 <-> 236, 437, 788, 1980 +1488 <-> 1560 +1489 <-> 739, 1456 +1490 <-> 383 +1491 <-> 535 +1492 <-> 471, 614 +1493 <-> 743 +1494 <-> 565, 1286 +1495 <-> 1627 +1496 <-> 761, 1496 +1497 <-> 249, 425, 851 +1498 <-> 749 +1499 <-> 231 +1500 <-> 930, 1128 +1501 <-> 390, 1380 +1502 <-> 1713 +1503 <-> 152, 880, 1197 +1504 <-> 47, 876, 941, 1483, 1945 +1505 <-> 295, 530, 753 +1506 <-> 818, 1224, 1247 +1507 <-> 141, 216, 1565, 1726 +1508 <-> 647, 1447, 1521, 1590 +1509 <-> 580, 1036, 1605, 1609 +1510 <-> 40, 1885 +1511 <-> 858, 1373 +1512 <-> 1295 +1513 <-> 78, 430 +1514 <-> 1772 +1515 <-> 153 +1516 <-> 144, 260, 1818 +1517 <-> 32, 1616, 1806 +1518 <-> 472 +1519 <-> 259 +1520 <-> 94, 1542 +1521 <-> 1508 +1522 <-> 313, 1091, 1631 +1523 <-> 685 +1524 <-> 241, 1087, 1239 +1525 <-> 1174 +1526 <-> 1126 +1527 <-> 1835 +1528 <-> 803 +1529 <-> 460, 833, 1238, 1456 +1530 <-> 1784 +1531 <-> 1331 +1532 <-> 629, 1405 +1533 <-> 470, 1455, 1533, 1796 +1534 <-> 1072 +1535 <-> 605, 724, 1039 +1536 <-> 1178 +1537 <-> 273, 801, 935 +1538 <-> 1023, 1734 +1539 <-> 713 +1540 <-> 1748 +1541 <-> 1382, 1683 +1542 <-> 1520 +1543 <-> 781 +1544 <-> 1631 +1545 <-> 1910 +1546 <-> 1942 +1547 <-> 260 +1548 <-> 581, 747 +1549 <-> 804 +1550 <-> 159, 1143 +1551 <-> 1178 +1552 <-> 461, 1239, 1846 +1553 <-> 1553, 1982 +1554 <-> 68, 85, 1263, 1597 +1555 <-> 1713, 1931 +1556 <-> 946, 1556 +1557 <-> 718, 1060 +1558 <-> 783 +1559 <-> 640, 940 +1560 <-> 1488, 1806, 1898, 1949 +1561 <-> 441, 1046 +1562 <-> 715, 1889 +1563 <-> 552 +1564 <-> 986 +1565 <-> 1507, 1689 +1566 <-> 1570 +1567 <-> 1056 +1568 <-> 3, 371 +1569 <-> 119, 1057, 1852 +1570 <-> 1566, 1570 +1571 <-> 1283, 1736 +1572 <-> 569, 1164, 1995 +1573 <-> 1573, 1784, 1987 +1574 <-> 1244, 1574 +1575 <-> 1282, 1575, 1866 +1576 <-> 123 +1577 <-> 1030 +1578 <-> 289, 710 +1579 <-> 992, 1684 +1580 <-> 4 +1581 <-> 1581 +1582 <-> 128, 883 +1583 <-> 57 +1584 <-> 116 +1585 <-> 637 +1586 <-> 1134 +1587 <-> 1587 +1588 <-> 159, 1280 +1589 <-> 1915 +1590 <-> 136, 1508 +1591 <-> 1223 +1592 <-> 293, 1891 +1593 <-> 853, 1374 +1594 <-> 1349, 1886 +1595 <-> 994, 1595 +1596 <-> 364, 1116 +1597 <-> 1554 +1598 <-> 1729 +1599 <-> 583, 1055 +1600 <-> 147, 458, 1600 +1601 <-> 1894 +1602 <-> 116 +1603 <-> 1390 +1604 <-> 481, 657, 949, 1353, 1983 +1605 <-> 115, 668, 863, 1509 +1606 <-> 1406 +1607 <-> 261, 410, 821 +1608 <-> 690 +1609 <-> 1509 +1610 <-> 673, 1248 +1611 <-> 118, 1788 +1612 <-> 1854 +1613 <-> 547 +1614 <-> 547, 1807 +1615 <-> 479 +1616 <-> 222, 1517 +1617 <-> 880, 1989 +1618 <-> 826 +1619 <-> 860, 1807 +1620 <-> 291 +1621 <-> 618, 1957 +1622 <-> 535 +1623 <-> 480, 531 +1624 <-> 1303 +1625 <-> 223, 1282 +1626 <-> 503, 604 +1627 <-> 1495, 1933 +1628 <-> 288, 978 +1629 <-> 1629 +1630 <-> 465, 1872 +1631 <-> 1486, 1522, 1544 +1632 <-> 196 +1633 <-> 1327, 1329 +1634 <-> 123, 661, 740 +1635 <-> 139 +1636 <-> 913, 1462, 1752 +1637 <-> 404, 522 +1638 <-> 1779, 1813 +1639 <-> 33, 190, 1376, 1639 +1640 <-> 1816 +1641 <-> 554, 1285 +1642 <-> 1129 +1643 <-> 71, 1844 +1644 <-> 171, 987 +1645 <-> 1477 +1646 <-> 16, 199 +1647 <-> 1702 +1648 <-> 895 +1649 <-> 1286 +1650 <-> 344, 886, 945 +1651 <-> 799, 1151 +1652 <-> 1149, 1961, 1984 +1653 <-> 222, 1074, 1411 +1654 <-> 108, 553 +1655 <-> 35, 156, 226, 1992 +1656 <-> 537, 655 +1657 <-> 105, 609 +1658 <-> 1658 +1659 <-> 519, 1463 +1660 <-> 958 +1661 <-> 290, 1929 +1662 <-> 435 +1663 <-> 1855 +1664 <-> 345 +1665 <-> 554 +1666 <-> 1021, 1171 +1667 <-> 662, 687 +1668 <-> 1289 +1669 <-> 842, 1477, 1795, 1975 +1670 <-> 1119, 1921 +1671 <-> 941 +1672 <-> 115 +1673 <-> 385 +1674 <-> 518 +1675 <-> 247, 676 +1676 <-> 509, 1987 +1677 <-> 965, 1677 +1678 <-> 151, 1692 +1679 <-> 541 +1680 <-> 1680 +1681 <-> 221, 789 +1682 <-> 1736, 1767, 1947 +1683 <-> 1131, 1541 +1684 <-> 1579 +1685 <-> 1242, 1401 +1686 <-> 1736 +1687 <-> 680, 1330 +1688 <-> 881, 1829 +1689 <-> 1030, 1565 +1690 <-> 778, 1044, 1900 +1691 <-> 28, 75 +1692 <-> 627, 1678 +1693 <-> 122, 400, 671, 969 +1694 <-> 58, 61 +1695 <-> 741 +1696 <-> 224, 1958 +1697 <-> 1935 +1698 <-> 301, 1188 +1699 <-> 29, 37 +1700 <-> 742, 1883 +1701 <-> 662 +1702 <-> 441, 1647 +1703 <-> 1048, 1076 +1704 <-> 185 +1705 <-> 715 +1706 <-> 1313, 1467 +1707 <-> 867 +1708 <-> 1008, 1159, 1340 +1709 <-> 560, 561, 1253, 1976 +1710 <-> 840 +1711 <-> 1711 +1712 <-> 12, 1219 +1713 <-> 631, 1502, 1555 +1714 <-> 1403, 1714, 1902 +1715 <-> 1183 +1716 <-> 79 +1717 <-> 738 +1718 <-> 602, 1251 +1719 <-> 1203, 1432 +1720 <-> 1447 +1721 <-> 1155 +1722 <-> 930 +1723 <-> 941 +1724 <-> 941 +1725 <-> 432 +1726 <-> 1507 +1727 <-> 397 +1728 <-> 1728, 1937 +1729 <-> 1598, 1913 +1730 <-> 105, 757, 768, 1435, 1730 +1731 <-> 789 +1732 <-> 795, 1465 +1733 <-> 551, 1765, 1835 +1734 <-> 1538 +1735 <-> 755, 1347 +1736 <-> 1571, 1682, 1686 +1737 <-> 932, 1795 +1738 <-> 329, 1738 +1739 <-> 267, 1062, 1848 +1740 <-> 1325 +1741 <-> 326, 541, 1952 +1742 <-> 344, 754 +1743 <-> 75, 253, 507 +1744 <-> 288 +1745 <-> 1216 +1746 <-> 92, 138 +1747 <-> 333 +1748 <-> 182, 1540 +1749 <-> 853 +1750 <-> 88 +1751 <-> 363, 1060 +1752 <-> 1060, 1636 +1753 <-> 433, 583, 1873 +1754 <-> 1194, 1294 +1755 <-> 1138, 1279 +1756 <-> 538, 636 +1757 <-> 1080 +1758 <-> 472, 514 +1759 <-> 284 +1760 <-> 1760 +1761 <-> 326, 620 +1762 <-> 648, 939, 1989 +1763 <-> 383 +1764 <-> 599, 1019, 1941 +1765 <-> 1733 +1766 <-> 289, 365, 1331 +1767 <-> 993, 1682, 1767 +1768 <-> 1768, 1859 +1769 <-> 957 +1770 <-> 288 +1771 <-> 1875 +1772 <-> 1514, 1772 +1773 <-> 801, 1228 +1774 <-> 0 +1775 <-> 935 +1776 <-> 133 +1777 <-> 1310 +1778 <-> 17, 320 +1779 <-> 465, 1638 +1780 <-> 1906 +1781 <-> 1969 +1782 <-> 1330 +1783 <-> 97, 963, 1960, 1983 +1784 <-> 1132, 1530, 1573 +1785 <-> 422 +1786 <-> 1786 +1787 <-> 854, 1317 +1788 <-> 926, 1611 +1789 <-> 586, 1829 +1790 <-> 74, 1790 +1791 <-> 52, 109, 1448 +1792 <-> 1860 +1793 <-> 1316, 1981 +1794 <-> 138 +1795 <-> 1669, 1737, 1861 +1796 <-> 1177, 1533 +1797 <-> 327, 875 +1798 <-> 852, 1183 +1799 <-> 1101, 1399, 1964 +1800 <-> 491, 641, 807, 1353 +1801 <-> 20, 455 +1802 <-> 123 +1803 <-> 415, 1010 +1804 <-> 1804 +1805 <-> 1334, 1926 +1806 <-> 1517, 1560 +1807 <-> 1614, 1619 +1808 <-> 261, 643 +1809 <-> 145, 1122 +1810 <-> 1382 +1811 <-> 60 +1812 <-> 1084 +1813 <-> 213, 994, 1638 +1814 <-> 14, 355 +1815 <-> 841, 1996 +1816 <-> 1049, 1640 +1817 <-> 388 +1818 <-> 1051, 1516 +1819 <-> 1008 +1820 <-> 403 +1821 <-> 350, 1163 +1822 <-> 669, 1179, 1927 +1823 <-> 1323 +1824 <-> 667, 824, 1879 +1825 <-> 608, 839, 876, 1965 +1826 <-> 473, 907 +1827 <-> 1115, 1171 +1828 <-> 440, 1195, 1284, 1913 +1829 <-> 275, 1688, 1789 +1830 <-> 1830 +1831 <-> 1831 +1832 <-> 248, 726 +1833 <-> 1833 +1834 <-> 1190 +1835 <-> 639, 1527, 1733 +1836 <-> 250, 1836 +1837 <-> 577, 1970 +1838 <-> 1156, 1261 +1839 <-> 1192, 1244, 1298 +1840 <-> 1356 +1841 <-> 81 +1842 <-> 738, 1215 +1843 <-> 1843 +1844 <-> 383, 1257, 1643 +1845 <-> 260, 451 +1846 <-> 1552 +1847 <-> 755, 879, 1426 +1848 <-> 38, 1739 +1849 <-> 468, 1144 +1850 <-> 1092 +1851 <-> 934, 1395 +1852 <-> 198, 1569 +1853 <-> 718, 1178, 1387 +1854 <-> 588, 1197, 1612 +1855 <-> 162, 734, 1663 +1856 <-> 236, 751 +1857 <-> 1371 +1858 <-> 1015 +1859 <-> 1768 +1860 <-> 940, 1270, 1274, 1442, 1792 +1861 <-> 1014, 1795 +1862 <-> 1142, 1252 +1863 <-> 281 +1864 <-> 717 +1865 <-> 1865 +1866 <-> 574, 602, 1394, 1575 +1867 <-> 707, 1011 +1868 <-> 659, 1868 +1869 <-> 173, 1991 +1870 <-> 391, 828, 956, 1880 +1871 <-> 189, 692 +1872 <-> 1630 +1873 <-> 42, 1753 +1874 <-> 883 +1875 <-> 11, 1771 +1876 <-> 158 +1877 <-> 186 +1878 <-> 796, 1385 +1879 <-> 486, 1824 +1880 <-> 920, 1870 +1881 <-> 433, 573, 905 +1882 <-> 625, 1954 +1883 <-> 300, 1700 +1884 <-> 1884 +1885 <-> 1291, 1510 +1886 <-> 19, 209, 1300, 1594 +1887 <-> 277 +1888 <-> 85 +1889 <-> 489, 1286, 1562 +1890 <-> 170, 832 +1891 <-> 1211, 1592, 1973 +1892 <-> 611, 697, 914 +1893 <-> 1224 +1894 <-> 775, 1601 +1895 <-> 308, 323, 618 +1896 <-> 1106 +1897 <-> 118, 368, 408 +1898 <-> 1316, 1560, 1944 +1899 <-> 463, 1050 +1900 <-> 1088, 1690, 1951 +1901 <-> 16, 27 +1902 <-> 981, 1714 +1903 <-> 1380 +1904 <-> 278, 1052 +1905 <-> 20 +1906 <-> 671, 1225, 1780 +1907 <-> 800 +1908 <-> 583 +1909 <-> 1361, 1940 +1910 <-> 134, 967, 1545 +1911 <-> 1973 +1912 <-> 1262 +1913 <-> 832, 1426, 1729, 1828 +1914 <-> 1914 +1915 <-> 1399, 1589 +1916 <-> 650, 1916 +1917 <-> 726, 1917 +1918 <-> 1040 +1919 <-> 196, 1378, 1919 +1920 <-> 1, 218 +1921 <-> 1670, 1952 +1922 <-> 1381 +1923 <-> 892, 1012, 1247 +1924 <-> 373, 904 +1925 <-> 210, 1935 +1926 <-> 543, 1013, 1805 +1927 <-> 1102, 1822 +1928 <-> 346, 1928 +1929 <-> 1661 +1930 <-> 19 +1931 <-> 983, 1555 +1932 <-> 685 +1933 <-> 16, 1190, 1627, 1933 +1934 <-> 288, 1243 +1935 <-> 535, 1697, 1925 +1936 <-> 295 +1937 <-> 112, 157, 1728 +1938 <-> 293 +1939 <-> 689, 1059, 1463 +1940 <-> 616, 1909 +1941 <-> 1764 +1942 <-> 243, 256, 1546 +1943 <-> 1950 +1944 <-> 260, 1898 +1945 <-> 1504 +1946 <-> 1946 +1947 <-> 87, 1129, 1179, 1682 +1948 <-> 294 +1949 <-> 1560 +1950 <-> 21, 1943 +1951 <-> 407, 1900 +1952 <-> 1741, 1921 +1953 <-> 1067 +1954 <-> 696, 1882 +1955 <-> 754 +1956 <-> 1457 +1957 <-> 1322, 1621 +1958 <-> 48, 708, 1696 +1959 <-> 1959 +1960 <-> 389, 1783 +1961 <-> 1652 +1962 <-> 29 +1963 <-> 914 +1964 <-> 1428, 1799 +1965 <-> 1825 +1966 <-> 1385 +1967 <-> 1168 +1968 <-> 265, 475 +1969 <-> 4, 1781 +1970 <-> 315, 926, 1837 +1971 <-> 242, 545, 1971 +1972 <-> 1972 +1973 <-> 997, 1891, 1911 +1974 <-> 885 +1975 <-> 1196, 1669 +1976 <-> 1709 +1977 <-> 1977 +1978 <-> 1978 +1979 <-> 1979 +1980 <-> 598, 1487 +1981 <-> 1793 +1982 <-> 1553 +1983 <-> 1054, 1604, 1783 +1984 <-> 731, 1652 +1985 <-> 1355 +1986 <-> 795 +1987 <-> 1573, 1676 +1988 <-> 495, 1023, 1433 +1989 <-> 1617, 1762 +1990 <-> 376 +1991 <-> 1869 +1992 <-> 1035, 1655 +1993 <-> 1411 +1994 <-> 1235, 1994 +1995 <-> 57, 1209, 1572 +1996 <-> 181, 1815 +1997 <-> 395, 1436 +1998 <-> 1300 +1999 <-> 175, 1161 diff --git a/2017/d13/ex1/ex1.py b/2017/d13/ex1/ex1.py new file mode 100755 index 0000000..3c23665 --- /dev/null +++ b/2017/d13/ex1/ex1.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python + +import sys + + +def solve(input: str) -> int: + def parse(input: str) -> dict[int, int]: + return { + depth: range + for depth, range in (map(int, l.split(": ")) for l in input.splitlines()) + } + + def would_catch(depth: int, range: int) -> bool: + cycle_length = (range - 1) * 2 + return depth % cycle_length == 0 + + def compute_severity(firewall: dict[int, int]) -> int: + return sum( + depth * range + for depth, range in firewall.items() + if would_catch(depth, range) + ) + + firewall = parse(input) + return compute_severity(firewall) + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d13/ex1/input b/2017/d13/ex1/input new file mode 100644 index 0000000..269c1e7 --- /dev/null +++ b/2017/d13/ex1/input @@ -0,0 +1,44 @@ +0: 3 +1: 2 +2: 4 +4: 4 +6: 5 +8: 6 +10: 8 +12: 8 +14: 6 +16: 6 +18: 8 +20: 8 +22: 6 +24: 12 +26: 9 +28: 12 +30: 8 +32: 14 +34: 12 +36: 8 +38: 14 +40: 12 +42: 12 +44: 12 +46: 14 +48: 12 +50: 14 +52: 12 +54: 10 +56: 14 +58: 12 +60: 14 +62: 14 +66: 10 +68: 14 +74: 14 +76: 12 +78: 14 +80: 20 +86: 18 +92: 14 +94: 20 +96: 18 +98: 17 diff --git a/2017/d13/ex2/ex2.py b/2017/d13/ex2/ex2.py new file mode 100755 index 0000000..3c146c3 --- /dev/null +++ b/2017/d13/ex2/ex2.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python + +import itertools +import sys + + +def solve(input: str) -> int: + def parse(input: str) -> dict[int, int]: + return { + depth: range + for depth, range in (map(int, l.split(": ")) for l in input.splitlines()) + } + + def would_catch(depth: int, range: int, offset: int) -> bool: + cycle_length = (range - 1) * 2 + return (depth + offset) % cycle_length == 0 + + def compute_delay(firewall: dict[int, int]) -> int: + for i in itertools.count(): + if any(would_catch(depth, range, i) for depth, range in firewall.items()): + continue + return i + assert False # Sanity check + + firewall = parse(input) + return compute_delay(firewall) + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d13/ex2/input b/2017/d13/ex2/input new file mode 100644 index 0000000..269c1e7 --- /dev/null +++ b/2017/d13/ex2/input @@ -0,0 +1,44 @@ +0: 3 +1: 2 +2: 4 +4: 4 +6: 5 +8: 6 +10: 8 +12: 8 +14: 6 +16: 6 +18: 8 +20: 8 +22: 6 +24: 12 +26: 9 +28: 12 +30: 8 +32: 14 +34: 12 +36: 8 +38: 14 +40: 12 +42: 12 +44: 12 +46: 14 +48: 12 +50: 14 +52: 12 +54: 10 +56: 14 +58: 12 +60: 14 +62: 14 +66: 10 +68: 14 +74: 14 +76: 12 +78: 14 +80: 20 +86: 18 +92: 14 +94: 20 +96: 18 +98: 17 diff --git a/2017/d14/ex1/ex1.py b/2017/d14/ex1/ex1.py new file mode 100755 index 0000000..0875b32 --- /dev/null +++ b/2017/d14/ex1/ex1.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python + +import functools +import itertools +import operator +import sys + + +def solve(input: str) -> int: + def knot_hash(byte_string: str) -> str: + def compute_sparse_hash(lengths: list[int]) -> list[int]: + circle = list(range(256)) + cur_pos, skip_size = 0, 0 + for _ in range(64): + for n in lengths: + # Invalid length + assert n < len(circle) # Sanity check + # Reverse + for i, j in zip( + range(cur_pos, cur_pos + n // 2), + # Avoid off-by-one by going further than necessary + range(cur_pos + n - 1, cur_pos, -1), + ): + i %= len(circle) + j %= len(circle) + circle[i], circle[j] = circle[j], circle[i] + # Move + cur_pos += n + skip_size + # Increase + skip_size += 1 + return circle + + def compute_dense_hash(sparse_hash: list[int]) -> list[int]: + assert len(sparse_hash) == 256 # Sanity check + return [ + functools.reduce(operator.xor, chunk) + for chunk in itertools.batched(sparse_hash, 16) + ] + + lengths = [ord(c) for c in byte_string] + lengths += [17, 31, 73, 47, 23] # Additional lengths + sparse_hash = compute_sparse_hash(lengths) + dense_hash = compute_dense_hash(sparse_hash) + return "".join(f"{n:02x}" for n in dense_hash) + + input = input.strip() + hashes = [int(knot_hash(f"{input}-{i}"), 16) for i in range(128)] + return sum(n.bit_count() for n in hashes) + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d14/ex1/input b/2017/d14/ex1/input new file mode 100644 index 0000000..191abdd --- /dev/null +++ b/2017/d14/ex1/input @@ -0,0 +1 @@ +hxtvlmkl diff --git a/2017/d14/ex2/ex2.py b/2017/d14/ex2/ex2.py new file mode 100755 index 0000000..0875507 --- /dev/null +++ b/2017/d14/ex2/ex2.py @@ -0,0 +1,128 @@ +#!/usr/bin/env python + +import collections +import functools +import itertools +import operator +import sys + + +class UnionFind: + _parent: list[int] + _rank: list[int] + + def __init__(self, size: int): + # Each node is in its own set, making it its own parent... + self._parent = list(range(size)) + # ... And its rank 0 + self._rank = [0] * size + + def find(self, elem: int) -> int: + while (parent := self._parent[elem]) != elem: + # Replace each parent link by a link to the grand-parent + elem, self._parent[elem] = parent, self._parent[parent] + return elem + + def union(self, lhs: int, rhs: int) -> int: + lhs = self.find(lhs) + rhs = self.find(rhs) + # Bail out early if they already belong to the same set + if lhs == rhs: + return lhs + # Always keep `lhs` as the taller tree + if self._rank[lhs] < self._rank[rhs]: + lhs, rhs = rhs, lhs + # Merge the smaller tree into the taller one + self._parent[rhs] = lhs + # Update the rank when merging trees of approximately the same size + if self._rank[lhs] == self._rank[rhs]: + self._rank[lhs] += 1 + return lhs + + def sets(self) -> dict[int, set[int]]: + res: dict[int, set[int]] = collections.defaultdict(set) + for elem in range(len(self._parent)): + res[self.find(elem)].add(elem) + return dict(res) + + +def solve(input: str) -> int: + def knot_hash(byte_string: str) -> str: + def compute_sparse_hash(lengths: list[int]) -> list[int]: + circle = list(range(256)) + cur_pos, skip_size = 0, 0 + for _ in range(64): + for n in lengths: + # Invalid length + assert n < len(circle) # Sanity check + # Reverse + for i, j in zip( + range(cur_pos, cur_pos + n // 2), + # Avoid off-by-one by going further than necessary + range(cur_pos + n - 1, cur_pos, -1), + ): + i %= len(circle) + j %= len(circle) + circle[i], circle[j] = circle[j], circle[i] + # Move + cur_pos += n + skip_size + # Increase + skip_size += 1 + return circle + + def compute_dense_hash(sparse_hash: list[int]) -> list[int]: + assert len(sparse_hash) == 256 # Sanity check + return [ + functools.reduce(operator.xor, chunk) + for chunk in itertools.batched(sparse_hash, 16) + ] + + lengths = [ord(c) for c in byte_string] + lengths += [17, 31, 73, 47, 23] # Additional lengths + sparse_hash = compute_sparse_hash(lengths) + dense_hash = compute_dense_hash(sparse_hash) + return "".join(f"{n:02x}" for n in dense_hash) + + def count_regions(hashes: list[int]) -> int: + def occupied(row: int, bit: int) -> bool: + return (hashes[row] & 1 << bit) != 0 + + def key(row: int, bit: int) -> int: + return row * 128 + bit + + def unkey(key: int) -> tuple[int, int]: + return key // 128, key % 128 + + uf = UnionFind(128 * 128) + for i in range(128): + for bit in range(128): + if not occupied(i, bit): + continue + for ni, nbit in ( + (i - 1, bit), + (i, bit - 1), + (i + 1, bit), + (i, bit + 1), + ): + if ni < 0 or ni >= 128: + continue + if nbit < 0 or nbit >= 128: + continue + if not occupied(ni, nbit): + continue + uf.union(key(i, bit), key(ni, nbit)) + # We created a UnionFind over *all* squares, only count *occupied* squares + return sum(occupied(*unkey(root)) for root in uf.sets()) + + input = input.strip() + hashes = [int(knot_hash(f"{input}-{i}"), 16) for i in range(128)] + return count_regions(hashes) + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d14/ex2/input b/2017/d14/ex2/input new file mode 100644 index 0000000..191abdd --- /dev/null +++ b/2017/d14/ex2/input @@ -0,0 +1 @@ +hxtvlmkl diff --git a/2017/d15/ex1/ex1.py b/2017/d15/ex1/ex1.py new file mode 100755 index 0000000..24bd9ba --- /dev/null +++ b/2017/d15/ex1/ex1.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python + +import functools +import itertools +import sys +from collections.abc import Iterator + + +def solve(input: str) -> int: + def parse(input: str) -> tuple[int, int]: + a, b = input.splitlines() + return int(a.split()[-1]), int(b.split()[-1]) + + def generate(seed: int, factor: int) -> int: + seed *= factor + return seed % 2147483647 + + def judge(a: int, b: int) -> bool: + mask = (1 << 16) - 1 + return (a & mask) == (b & mask) + + def iter_judgements(seed_a: int, seed_b: int) -> Iterator[bool]: + generate_a = functools.partial(generate, factor=16807) + generate_b = functools.partial(generate, factor=48271) + + while True: + seed_a, seed_b = generate_a(seed_a), generate_b(seed_b) + yield judge(seed_a, seed_b) + + seed_a, seed_b = parse(input) + return sum(itertools.islice(iter_judgements(seed_a, seed_b), 40000000)) + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d15/ex1/input b/2017/d15/ex1/input new file mode 100644 index 0000000..4cac76f --- /dev/null +++ b/2017/d15/ex1/input @@ -0,0 +1,2 @@ +Generator A starts with 699 +Generator B starts with 124 diff --git a/2017/d15/ex2/ex2.py b/2017/d15/ex2/ex2.py new file mode 100755 index 0000000..17eab8e --- /dev/null +++ b/2017/d15/ex2/ex2.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python + +import functools +import itertools +import sys +from collections.abc import Iterator + + +def solve(input: str) -> int: + def parse(input: str) -> tuple[int, int]: + a, b = input.splitlines() + return int(a.split()[-1]), int(b.split()[-1]) + + def generate(seed: int, factor: int, criteria: int) -> int: + while True: + seed *= factor + seed %= 2147483647 + if (seed % criteria) == 0: + return seed + + def judge(a: int, b: int) -> bool: + mask = (1 << 16) - 1 + return (a & mask) == (b & mask) + + def iter_judgements(seed_a: int, seed_b: int) -> Iterator[bool]: + generate_a = functools.partial(generate, factor=16807, criteria=4) + generate_b = functools.partial(generate, factor=48271, criteria=8) + + while True: + seed_a, seed_b = generate_a(seed_a), generate_b(seed_b) + yield judge(seed_a, seed_b) + + seed_a, seed_b = parse(input) + return sum(itertools.islice(iter_judgements(seed_a, seed_b), 5000000)) + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d15/ex2/input b/2017/d15/ex2/input new file mode 100644 index 0000000..4cac76f --- /dev/null +++ b/2017/d15/ex2/input @@ -0,0 +1,2 @@ +Generator A starts with 699 +Generator B starts with 124 diff --git a/2017/d16/ex1/ex1.py b/2017/d16/ex1/ex1.py new file mode 100755 index 0000000..98d6107 --- /dev/null +++ b/2017/d16/ex1/ex1.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python + +import sys +from typing import NamedTuple + + +class Spin(NamedTuple): + n: int + + +class Exchange(NamedTuple): + a: int + b: int + + +class Partner(NamedTuple): + a: str + b: str + + +Move = Spin | Exchange | Partner + +Programs = tuple[str, ...] + + +def solve(input: str) -> str: + def parse_move(input: str) -> Move: + if input[0] == "s": + return Spin(int(input[1:])) + if input[0] == "x": + return Exchange(*map(int, input[1:].split("/"))) + if input[0] == "p": + return Partner(*input[1:].split("/")) + assert False # Sanity check + + def parse(input: str) -> list[Move]: + return [parse_move(move) for move in input.strip().split(",")] + + def apply_move(programs: Programs, move: Move) -> Programs: + match move: + case Spin(n): + return programs[-n:] + programs[:-n] + case Exchange(a, b): + tmp = list(programs) + tmp[a], tmp[b] = tmp[b], tmp[a] + return tuple(tmp) + case Partner(a, b): + ia, ib = programs.index(a), programs.index(b) + tmp = list(programs) + tmp[ia], tmp[ib] = tmp[ib], tmp[ia] + return tuple(tmp) + + moves = parse(input) + programs = tuple(chr(ord("a") + i) for i in range(16)) + for move in moves: + programs = apply_move(programs, move) + return "".join(programs) + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d16/ex1/input b/2017/d16/ex1/input new file mode 100644 index 0000000..205f5dc --- /dev/null +++ b/2017/d16/ex1/input @@ -0,0 +1 @@ +x6/12,s14,x14/1,s5,x12/7,pn/i,x10/11,ph/p,x7/4,s7,x3/11,s4,pf/d,x13/12,s14,x1/8,pc/p,x13/0,s5,x1/6,s11,x4/8,s8,x6/12,s10,x3/4,pf/h,x14/11,pe/k,x10/13,s13,x11/5,pl/j,x15/13,pp/a,x14/2,pn/g,x5/0,pe/m,x13/8,s6,x5/3,ph/k,x1/4,s5,x5/15,s3,x11/14,s12,x9/3,po/f,x11/0,pj/k,x12/5,s14,x9/3,s1,x8/6,s10,x9/2,s11,x11/13,pp/d,x4/0,s2,x7/9,s1,x6/15,pk/h,x3/1,s10,x5/11,s14,x14/13,s2,pe/b,x1/12,pn/g,x4/3,pj/a,x10/2,s3,x8/9,pk/b,x3/2,s9,x15/11,pe/g,x3/9,pn/i,x4/10,pb/g,s15,x0/6,pa/e,x7/14,s3,x3/10,pp/f,s13,x4/9,pl/n,x5/8,s7,x9/15,s14,x6/14,pg/j,x13/15,po/m,x2/5,s8,x14/3,s15,x5/2,pe/l,s13,x12/11,pj/i,x2/6,pm/p,x5/13,s3,x9/6,pn/h,x3/12,s14,x10/8,po/g,x1/13,s15,x5/0,pj/c,x7/2,s9,x5/14,pl/o,x11/2,pi/h,x3/4,po/p,s2,pf/c,x6/8,pi/e,s9,x0/15,s3,x10/1,s12,x6/3,s7,x8/4,pp/g,x9/6,s6,x11/0,pi/h,x2/12,s10,x4/11,s12,x12/7,s8,x11/8,s8,x5/15,s13,x0/14,pc/b,x1/9,pd/a,x13/15,s13,pn/l,x1/3,s12,x4/11,pd/h,x6/9,po/e,x1/14,pg/k,x8/6,s1,x10/0,s9,x2/8,pd/l,x15/4,s8,x9/1,s11,x15/3,s7,x12/2,s8,x3/1,s12,x9/5,s11,x3/7,s4,x8/13,pf/i,x11/9,s4,x5/0,s6,x8/12,pk/n,x7/14,s10,x2/5,pl/c,x1/13,pa/d,x11/0,s9,x6/3,pn/c,x2/5,s14,x15/10,s4,x9/2,pi/a,x15/10,pc/o,x0/9,pe/j,x8/3,po/l,x9/0,s10,x5/2,s12,x6/11,s6,x12/8,s6,x4/15,pp/j,x3/10,s13,x15/11,pg/f,x3/14,s10,x7/9,s7,x2/5,s2,x0/7,pl/m,x3/8,s14,x14/0,s1,x4/10,s12,x15/8,s15,x2/6,pc/a,s12,x15/5,ph/b,x6/12,s1,x11/8,s15,x10/13,po/a,s13,x5/14,pi/e,x4/12,s13,x7/9,s15,x15/8,s4,x3/7,pb/c,x13/5,s11,x12/1,s13,x14/6,s15,x1/2,s9,x10/11,pp/f,x14/5,pb/d,x10/8,s4,pl/k,x5/11,pn/d,x8/15,s1,x2/4,s4,x12/8,s11,x2/10,pb/m,x8/15,ph/i,x7/6,s3,x2/12,s3,pg/n,x8/9,pe/j,x4/11,s13,x13/5,s13,x9/10,pi/n,x5/3,s11,x12/0,s4,x4/6,s12,x14/2,s15,x0/4,s2,x5/15,s6,po/l,x8/11,s4,x14/6,pg/f,x3/4,pb/j,x15/8,pe/i,x12/6,pb/h,s12,x1/8,pg/j,x11/15,pf/i,x6/2,s6,x15/3,pk/g,x14/4,s8,x8/10,s9,pj/n,x1/6,s15,x7/0,pb/h,x2/11,pm/d,s3,x6/8,s9,x2/14,s12,x7/12,pb/g,x11/5,s10,x4/2,s12,x9/13,pn/d,s3,x2/12,po/h,x5/8,s2,x13/9,s15,x4/7,s9,x14/0,s13,pj/g,x3/2,s13,x12/14,s5,x0/5,s14,pl/p,x1/6,s2,x3/12,pi/b,s11,x6/5,pj/a,x14/7,s14,x3/12,s6,x10/7,po/k,x8/1,s13,x3/5,pe/f,x13/12,s12,x8/3,pj/n,x12/13,pm/f,s3,x8/14,po/e,x4/5,pk/l,s12,x2/3,s13,x10/15,s4,x4/12,pg/b,x9/14,pa/e,x13/4,s5,pb/p,x6/11,s1,x2/7,s11,x6/4,s3,x5/1,pi/d,x4/15,pc/e,s5,x8/1,s5,x7/0,s11,x4/15,pl/m,x8/14,pe/g,s13,pm/c,x4/0,pp/l,x9/15,pn/e,x4/8,s8,x7/15,s4,x4/8,s14,x9/0,s7,x14/2,s10,x1/11,s2,x5/0,pp/c,x3/1,s14,x4/2,po/b,s10,x15/9,s4,x0/6,s4,x12/14,s6,pe/n,x7/9,pj/a,x4/11,pn/c,x8/0,pb/f,x10/2,s15,x4/5,s3,x7/14,pg/h,x6/8,pd/i,x10/3,pc/a,x5/14,ph/n,x11/8,s6,x6/7,s6,x2/5,s12,x6/14,pi/p,x8/10,s11,x2/7,s13,x10/8,pd/g,x11/2,s7,x4/15,s2,x3/12,s4,x7/13,s6,x3/15,s8,pa/i,x14/13,pj/e,x7/10,s4,x1/6,s3,ph/i,s13,x13/11,s2,x7/12,s4,x5/6,s14,x12/13,s8,pk/e,x14/7,s13,x5/10,s9,x4/12,s3,x10/11,ph/n,x0/12,pb/o,x9/14,s13,x6/4,ph/m,x0/1,pc/d,x3/6,po/h,x1/14,pe/k,x9/12,pf/n,s3,pp/e,s15,x5/10,pf/b,x0/1,s2,x11/15,pj/a,x0/6,s15,x9/4,s11,x3/11,pn/l,x4/14,pi/d,x13/7,pp/a,x2/9,pg/j,x15/1,pl/b,x14/5,pg/k,x10/6,pm/i,x4/11,ph/f,x12/0,s3,pn/o,s13,x4/15,pa/b,x13/10,pi/j,x4/15,s5,x12/13,s11,x2/5,s9,x8/9,s7,x5/14,s5,x0/15,s10,pb/h,x2/13,pn/a,x5/15,pf/g,s15,x4/12,pd/k,s9,x8/13,s3,x12/3,pa/b,s1,x14/2,s8,pm/d,x6/15,s5,x12/11,s7,x0/15,s1,x5/13,pg/b,x0/11,s13,x14/2,s8,x5/15,pc/l,x10/0,pf/i,x12/9,s8,pg/h,s8,x7/14,s5,x13/0,pj/d,x1/8,pb/c,x2/6,s10,pa/h,x1/14,pk/b,x2/8,s2,x0/10,po/i,s11,pp/b,x12/7,s4,x14/15,s5,x2/7,pf/k,x1/6,pl/g,x0/7,pp/e,x8/12,s1,x5/3,s9,x0/8,pg/d,x10/3,pk/b,x15/2,pf/h,x12/14,pl/n,x4/3,s7,x12/10,pg/f,x6/0,ph/o,x7/9,pm/p,x1/14,s14,x4/11,s9,x6/5,s14,x7/12,s8,x14/6,s12,x8/13,s5,x5/9,s9,x2/11,s5,x9/14,s8,x15/6,s11,x1/0,s11,x11/14,pc/o,x10/7,s2,x5/15,pi/l,x12/14,s5,x7/6,pa/f,x4/2,pk/e,x6/13,s5,x5/4,s13,x10/6,pc/l,x12/3,pf/h,x15/8,s13,x13/5,pd/m,x15/12,s7,pb/i,x7/13,s11,x10/4,po/g,x3/13,s14,x11/15,s8,x13/10,pc/p,x9/12,pn/e,x15/8,s14,x3/7,pc/k,x10/8,s4,x9/1,s4,x7/3,s11,x15/8,s2,x2/3,s4,x12/4,s2,x9/14,pp/i,x11/7,s15,pe/b,x2/5,s13,x1/0,pn/p,x6/12,s8,x15/10,pg/d,s10,x4/9,pb/e,s8,x3/1,s7,x4/6,s10,x15/12,pi/o,x10/9,s6,x7/15,s5,x5/4,pl/b,x14/0,s6,x7/6,s7,x12/8,pa/f,s13,x4/13,s14,x8/9,s3,x14/12,s6,x15/6,s13,x11/10,pl/o,x5/0,s1,x1/11,s13,pg/k,x13/5,s1,x6/1,pm/o,x4/2,s13,x1/15,s15,x10/8,ph/b,x6/2,pj/m,s15,x7/13,s5,x9/3,pn/f,x6/7,pl/e,x12/8,pa/p,x15/10,s4,x2/8,s9,x7/0,s1,x6/5,s3,x8/9,pc/g,x13/14,s7,x0/5,pd/n,x15/3,pj/c,x2/7,pi/p,x14/13,ph/m,x11/0,s15,x15/10,pk/p,x7/0,pf/b,x11/13,s11,x2/14,s10,x12/15,s5,x13/5,pg/j,x15/0,s1,pb/p,x11/3,pf/o,x6/2,s6,x5/1,s12,x2/15,pj/n,x13/1,s13,x9/11,s4,x5/12,s12,x6/2,ph/f,x4/3,pj/g,x2/12,pp/m,x9/13,s4,x11/3,s14,x14/6,s13,x5/9,s12,x3/8,pk/j,x4/1,pb/d,x7/5,s1,pa/c,x15/9,s6,x14/7,s2,x12/3,po/m,x15/1,pp/e,x2/3,pa/i,x6/4,s5,x13/15,s6,x6/5,pj/p,x4/12,s6,pg/o,x7/10,s8,x15/12,s10,x1/9,s11,x4/12,s10,x3/7,s4,x5/13,s14,pb/p,x7/3,s6,pf/a,x4/1,s5,x11/5,s4,x14/1,pm/n,x11/15,s3,x12/13,s12,x14/6,s2,x2/3,pj/c,x7/1,s3,x2/11,s15,x13/5,pk/m,x4/1,pc/e,x14/11,pk/l,x7/15,s6,x6/9,s6,x15/2,pj/n,x9/12,pp/g,x2/3,pm/c,x4/9,s6,x13/10,s3,x5/14,pf/a,s7,x4/2,ph/c,x7/6,s7,pg/b,x3/14,pi/j,x0/1,s3,x13/12,s5,x8/0,s2,x6/1,s12,x14/7,s11,po/c,s13,x5/9,pf/a,x12/2,s2,x3/11,s3,x2/1,pm/i,x12/4,s5,x13/10,s2,x4/1,pf/b,x9/8,s12,pm/a,x0/3,pj/f,x4/6,pb/d,x15/10,pe/g,x2/7,s4,x10/9,s4,x1/7,s1,x8/12,s5,x10/0,s9,x1/11,s9,x2/14,s12,x3/6,s3,x13/8,s6,pi/c,x6/2,pa/h,x5/8,s4,x4/1,s6,x6/8,pg/l,x10/4,ph/o,x12/8,s7,x13/10,pa/d,x0/3,pm/l,x1/15,s1,x9/10,s3,pp/g,x13/7,s3,x3/11,pk/h,x14/6,s14,x12/9,s12,x15/8,pl/p,x5/13,s6,pg/d,x6/14,pb/a,x4/13,s15,x12/3,s3,x1/0,s7,x5/4,s8,x3/7,s9,x2/6,po/c,x0/7,s11,x3/1,s2,x12/7,s6,x6/5,s12,x15/13,s14,x14/11,s8,x8/13,pp/g,x15/6,pk/d,x8/1,s9,x7/12,pe/c,x13/2,s9,x1/12,s8,x2/11,s1,x0/13,pl/a,x3/5,s9,x14/2,s12,x5/12,pn/k,x0/14,s3,x7/6,s9,pl/f,x10/2,pe/m,x4/14,s15,x0/3,s15,x15/10,s14,x6/7,pd/h,x13/2,s1,x0/11,s6,x14/6,pp/a,x4/11,s9,x2/14,s3,x9/8,s7,x7/5,pi/f,x10/9,s6,x15/11,pm/a,x13/14,s1,x3/6,s6,x1/9,s11,pp/i,x11/12,pd/n,x5/0,pk/l,x2/1,ph/p,s9,x13/8,s12,x1/9,s10,x11/10,s15,x8/3,s12,pj/f,x1/7,s11,x4/3,pp/g,s2,ph/n,x7/9,s9,x1/3,pg/k,x13/15,s7,x5/10,po/e,x9/12,s1,x8/11,ph/l,x13/4,s7,x15/10,s13,x9/8,pp/k,x4/2,s6,x9/10,s9,pa/g,s9,x1/7,s9,x9/10,s4,x3/4,s10,po/f,x5/2,s10,x14/15,pc/h,x5/0,s14,x3/7,pi/a,s11,x15/9,s6,x12/2,po/l,s11,x10/4,ph/p,x1/0,pe/c,x3/15,s9,x9/1,s1,pg/j,x2/12,s6,x5/6,ph/l,x7/4,pp/b,s7,x3/9,s13,x1/8,s15,x2/13,pe/n,s9,x9/12,s15,x14/6,s1,x11/2,s11,x1/12,s1,x13/11,s15,x2/8,pf/j,x12/0,po/n,s4,x9/1,s5,x10/8,pj/p,x9/12,pn/d,x0/15,pk/h,s3,x8/4,pi/o,x14/10,s12,x13/3,s12,x10/1,s4,x11/13,s11,x9/1,s6,x13/8,s2,x1/0,s13,x6/9,pd/l,x12/14,pp/h,x11/9,pc/f,s9,ph/k,x14/1,pj/g,x8/15,pf/e,x13/1,pb/o,x5/14,pa/c,x9/13,s9,x15/7,pp/m,x10/1,s7,x0/13,pi/j,s1,x14/2,s6,pc/b,x15/13,pp/i,x14/7,s14,x5/12,s2,x8/6,s12,x0/3,s10,x13/7,s12,x10/4,s5,x2/7,pm/e,x3/15,s6,x11/9,s14,x15/10,pi/o,s4,x7/12,pf/l,x9/11,s7,x4/2,pk/m,x0/8,pb/p,x6/9,pc/o,x11/13,pe/f,x5/3,s4,x9/12,s8,x15/10,s12,x1/9,s7,x0/10,s3,x4/15,s7,x3/13,s7,x7/5,s5,x4/14,s13,x15/9,s1,x12/10,s15,x14/9,pl/a,x10/6,pd/n,x0/5,pp/i,x3/11,s15,x10/2,pk/d,x15/1,s4,x3/14,s7,x8/13,s3,pm/o,x3/1,s3,x0/2,s3,x15/8,ph/e,x12/9,pl/k,x0/11,pf/e,x8/10,s10,x2/6,s4,x7/4,s8,x2/13,pj/p,x15/4,s11,x11/10,s4,pe/f,x5/8,s11,x3/15,s5,x0/9,s15,x6/15,pl/h,x0/2,s10,x13/8,pd/m,x11/3,pb/n,x2/12,s15,x15/14,s2,x1/9,ph/d,x8/14,pj/a,x3/5,s2,x14/10,s2,x0/11,pl/f,s11,x4/8,s4,x7/15,s3,x13/0,pb/c,x12/2,pp/o,s11,x14/5,pk/h,x12/11,pm/l,x6/3,s9,x7/0,s8,x5/9,pf/n,x15/4,s7,x9/12,s11,x8/11,pb/i,x6/15,s1,x9/14,s1,x7/10,ph/l,x11/0,pp/e,x8/14,pd/l,x5/9,s6,x4/10,pb/c,x15/11,s5,x7/10,s2,x2/8,s4,x6/9,pd/h,x2/5,pc/o,x6/4,pf/i,x15/8,pl/e,s5,x12/9,pf/p,x14/0,pb/m,x7/15,s3,x1/8,s6,x0/6,s12,x13/15,pj/l,s15,x12/2,pf/h,x10/8,s10,x14/7,pm/a,x1/15,s8,x10/6,pf/e,s10,x15/7,s12,x9/0,s2,x10/14,s1,x0/2,s14,x13/6,s13,x9/15,s11,x3/11,s11,x15/6,pi/d,s13,x7/9,s1,x4/15,s12,x8/5,s8,x10/7,s15,x12/13,s5,x11/10,s8,x13/7,s4,x10/2,s5,x3/1,pl/b,x10/6,pg/d,x8/11,s5,x7/1,s2,x13/0,s6,x11/8,s8,x13/3,s10,x14/7,s14,x12/5,s14,x10/6,s1,x4/13,pn/b,x14/6,s13,x5/3,s15,x7/2,pm/i,x13/11,pe/h,x15/3,s3,x14/2,pk/n,x13/0,s3,x2/1,pe/b,x3/10,s1,x12/1,pd/l,x0/8,pe/m,x9/14,ph/i,x12/8,pm/e,s5,x4/10,s13,x2/7,s2,x4/12,s13,x7/3,pj/g,x2/13,s2,x0/1,pa/n,s8,ph/l,x14/7,s13,x0/13,s8,x6/9,pe/a,x10/1,s13,x13/11,s5,x10/7,s1,x4/1,pd/g,x9/11,s5,x6/2,s5,x4/1,s10,x0/14,s14,x13/6,pl/c,x7/0,s1,x12/11,s3,x10/3,s8,x7/12,s3,pe/k,x2/4,pa/p,s4,x12/7,pe/g,x15/1,s9,x8/2,s8,x15/14,pj/d,x13/8,pp/b,x14/3,s2,x1/9,s3,x13/5,s8,x15/11,pn/e,x9/0,s15,x1/13,pa/p,x9/6,s15,x15/14,s15,x7/5,s4,x15/3,pf/g,x7/6,s5,x3/12,pd/l,x15/8,s7,x7/3,s6,x9/14,s8,x0/7,s6,po/c,x12/9,s11,x13/7,s8,x14/6,s6,x10/11,s1,x2/1,ph/m,x0/4,s14,x2/12,s2,x9/1,pl/f,s15,x4/3,s13,x12/15,pg/d,x10/2,s5,x0/6,pi/k,x5/1,pg/d,x10/6,pj/a,x8/2,pn/o,x13/12,s5,x8/0,s8,x10/4,s6,x9/6,s4,x13/3,s1,x4/5,pp/h,x3/10,s12,x7/15,s12,x2/8,s2,x10/15,s12,x11/12,pl/f,x9/4,s2,x12/5,pk/d,x1/6,pg/j,x9/7,pd/c,x5/14,s11,x2/0,s15,x15/4,pn/l,x8/11,s1,x14/12,s12,x6/4,pc/h,x3/8,s6,x4/7,pl/j,x6/1,pn/g,s2,x3/0,s5,x15/6,pf/e,x11/1,po/k,x4/15,s12,x10/7,pl/c,s8,x5/3,pj/n,x6/12,pd/h,x15/8,s12,pn/l,s3,x11/1,s2,x6/15,pa/m,x11/0,pn/i,x14/10,pd/m,x4/1,po/p,x9/8,ph/b,x14/6,s11,x13/9,s9,x12/4,pp/g,x14/2,s4,pn/b,x6/15,pc/m,x1/0,s7,x9/15,s12,x7/13,s10,x9/5,pe/h,x2/7,s4,pl/m,s7,x10/12,s3,x4/9,pn/o,x12/7,pf/h,x5/13,pp/o,x2/12,pm/j,s10,x7/13,s5,x12/15,pf/b,s6,x1/0,pm/e,x4/12,pb/d,x5/2,pg/e,x9/11,pd/o,x10/5,s8,x11/3,s7,x9/1,s2,pn/j,x4/0,s5,x7/15,s5,x8/1,pb/i,x2/0,pn/j,x7/5,s15,x2/6,pi/g,x14/12,pj/d,x2/1,s4,x10/4,pi/n,x9/14,s14,x8/11,pg/m,x15/2,pp/b,x11/14,s12,x9/8,s7,x7/2,pk/j,x3/15,pc/i,x1/9,s7,x7/8,s2,x12/6,s10,x2/15,pe/g,x6/0,s2,x5/13,s2,pp/f,x11/3,s1,x4/14,s7,x9/6,s10,x7/5,s13,x11/13,s7,x7/6,pd/b,x1/8,s8,x13/15,pm/e,x4/7,pd/c,s11,x3/12,pj/a,x5/8,s7,x1/11,s12,x0/10,pb/e,x4/8,s9,x13/0,pp/m,x6/8,pd/i,x10/0,pg/h,x5/2,s1,x3/4,s8,pc/b,s5,x12/8,pe/a,x11/6,pm/h,x3/12,pf/b,x14/13,pm/o,x10/4,s7,x13/12,s3,x4/5,s14,x7/8,s13,pg/l,x1/14,po/f,x13/8,pg/l,x1/7,pc/f,x2/14,s15,x9/10,pd/p,x1/11,s13,x15/12,s12,x8/6,s7,x10/5,pc/m,x13/12,pg/a,x8/9,s15,x13/1,s12,x7/8,pi/l,x12/14,s6,x8/3,pp/h,s10,x12/2,pk/m,x5/13,s8,x8/15,s14,ph/o,x5/1,pj/m,x6/0,s13,pf/c,x15/12,pk/d,x10/2,s3,pg/o,x5/8,pm/f,x9/0,s9,x12/5,pg/d,x9/11,pl/h,x0/6,pk/i,x8/15,s12,x7/3,s3,x12/4,s10,x5/3,s1,x0/4,s2,x1/15,s2,x8/9,s7,x3/11,pe/a,x15/5,s7,pk/n,x2/14,pe/o,x8/13,s4,x2/11,pg/b,x0/9,pm/h,x4/8,s3,pe/p,x2/1,pm/f,x0/6,s10,pj/a,x5/1,pg/d,x2/6,po/a,x5/0,pc/h,x3/15,pb/g,s9,x4/8,pf/i,x15/10,s3,x11/6,s7,x14/0,s5,x6/11,pj/b,x13/9,s3,x15/5,s9,x3/12,s13,x14/13,s9,pf/k,x1/7,s14,x8/13,s10,x15/4,pe/b,s15,x1/14,s1,pc/i,x8/6,pp/f,x10/13,pn/j,x12/14,s9,x8/0,s14,x13/7,s3,x15/1,s15,x11/12,s8,x1/2,s1,x0/7,s5,x12/6,pi/d,x13/9,pc/g,s6,pi/k,x11/6,pd/h,x8/12,s14,x1/10,pj/b,x5/13,s9,x8/2,pk/n,x7/11,pl/e,x2/12,s10,x7/15,s4,x11/0,s1,x2/7,pb/n,x4/0,s15,x7/14,s6,x8/1,s14,po/k,x5/15,s7,pe/a,x11/8,pl/o,x4/3,pj/e,s13,x11/1,s10,x4/13,pa/d,x8/3,s12,x14/15,s7,x1/5,pc/b,s15,x9/4,s9,x8/11,s1,x10/5,pd/p,s2,ph/o,x2/4,s5,x13/11,s14,x4/3,pb/n,x7/12,s14,x15/11,s13,x7/0,s3,x2/13,pk/o,x8/7,pm/a,x4/3,s10,x6/15,s15,x11/4,s4,x5/2,pk/l,x10/8,pa/f,x12/3,pd/i,x5/7,s11,x8/15,s13,x13/14,pe/p,x9/3,s1,x6/7,pd/j,x14/4,pn/e,x12/11,ph/c,x0/15,s13,pk/o,x11/10,pa/e,x12/13,s10,x10/2,pg/l,x15/1,s13,x10/13,pd/c,x0/11,s3,x5/13,pb/f,x2/15,s1,x11/6,s12,x2/14,s8,x13/6,pc/d,s15,x11/0,s1,x10/2,pf/b,x1/6,s10,x15/12,pe/j,x6/4,s1,pf/l,x13/2,pj/b,x0/14,s13,x10/5,s8,x15/0,s12,x7/13,pg/c,x14/15,pl/n,x5/7,s3,x12/9,s3,x3/15,pb/m,x12/6,s4,x15/11,s3,pl/j,s2,x2/7,pb/d,s14,x9/4,pp/m,x5/6,pj/h,s8,x2/4,s14,x1/8,s7,x10/3,pe/d,x15/14,s2,x4/1,s14,x14/11,pc/g,x7/4,s4,x14/15,pa/h,x12/9,pe/j,x8/4,pf/l,x13/7,s14,x9/6,s8,x10/13,s9,x15/7,s1,x6/9,pb/n,x0/11,s3,x6/14,s6,x5/7,s7,x1/10,pi/f,s12,x5/3,s6,x2/1,pa/l,x4/10,s3,x12/2,s2,x0/10,pp/f,x3/9,pm/h,x11/14,pk/n,x15/8,pg/h,s1,x6/11,s10,x2/10,s15,x4/7,pp/e,x5/10,pb/m,x7/2,s11,x13/3,pj/a,x5/8,pm/e,x7/1,s2,x8/3,pa/f,s9,x6/2,s3,x5/12,pc/l,x6/0,s1,x10/12,pi/m,x3/4,s3,pc/h,x14/10,pe/a,x7/5,s6,x13/2,s5,x14/15,pj/g,x9/13,s2,x4/11,s14,x15/0,s8,x1/8,s6,x10/6,pa/c,x4/3,s13,pm/b,x12/13,s3,x14/9,s9,x15/2,s10,x9/13,s10,x10/14,s8,x13/2,s10,x0/5,pe/g,x9/3,ph/p,x15/2,pl/k,x7/6,pb/i,x0/15,po/e,x4/6,pj/f,s4,x15/2,pk/e,x9/11,s7,x13/12,pg/p,x11/3,pc/m,x5/14,pf/l,x13/11,pg/a,x0/10,pm/o,x5/15,s12,x1/6,s5,x12/4,pg/d,x15/1,pc/e,x11/4,s14,x3/2,s9,x13/10,s6,pd/i,x9/2,s8,x8/12,ph/p,x7/3,s8,pn/o,x6/14,pd/e,x15/0,s2,x7/1,s8,x14/4,s3,x7/15,s4,x9/8,pm/k,x7/5,s5,x13/8,pd/o,x4/10,pf/i,x9/14,s6,x11/13,s5,x2/5,pk/o,s1,pi/a,x7/11,s5,x6/9,s12,x7/4,s1,x10/13,s1,x0/11,s11,x13/14,s2,x2/15,pm/l,x6/12,pk/p,x14/1,po/e,x7/15,pb/a,x3/11,pj/d,x6/1,s9,x8/10,s4,x2/7,pk/n,x5/4,s3,x12/7,s6,x13/4,s6,x3/2,s8,x11/13,s4,x7/4,pe/h,x1/6,s1,x4/15,s11,x1/13,pb/p,x7/15,s15,x5/9,ph/e,x6/10,s14,x1/5,s15,x6/11,pm/i,x7/14,s3,x12/3,s12,x9/13,s7,x15/2,s8,x7/12,s8,x6/0,s4,pj/g,x10/3,s5,x5/14,s2,x0/8,pk/b,s10,x4/13,s13,x6/0,pg/c,x7/9,s11,pd/f,x11/0,pk/j,x1/12,s11,x6/7,s10,x9/0,pb/d,x4/14,s5,x10/5,pn/f,x2/3,s10,pc/j,s2,x14/15,pb/g,x12/7,s7,x11/6,s8,x14/15,s3,x13/7,s9,x15/0,pl/k,x3/10,s14,x8/11,s1,x3/1,s14,x10/9,pp/o,x2/4,pk/a,x11/14,s14,x12/3,s8,x2/8,s3,x11/7,s4,x15/12,s14,x3/7,s13,x15/9,ph/i,x2/11,s8,pd/c,x0/6,s11,po/l,x11/15,ph/k,x14/13,pm/n,x6/10,s8,x7/5,pf/p,x2/12,pe/i,x11/8,pl/a,x12/13,s8,x14/8,s9,x3/1,s7,x15/10,s12,x2/13,pe/b,x1/5,s14,x9/4,pm/p,s4,x11/12,pb/f,s5,pk/c,x6/5,pi/b,s14,x0/3,s13,x2/15,s5,x9/6,s4,x2/11,s12,x9/6,s10,x13/11,s15,x12/2,s6,x9/11,s10,x8/7,s14,x0/14,pg/f,x15/1,s2,pb/h,x4/12,pl/k,x5/6,s4,pj/i,x7/13,s5,x14/0,s11,x1/15,pa/f,s5,x6/14,s14,x15/2,s8,x5/0,pd/h,x1/13,pm/f,x3/5,s11,x11/6,pp/n,x15/0,s2,pi/f,x9/2,s2,x12/0,s13,x2/13,pn/k,s11,pp/a,x10/14,s10,x3/0,s7,x10/13,s11,x15/2,pj/m,x13/0,s14,x4/6,s5,x9/13,s12,po/n,s2,x8/3,pf/e,x15/2,s10,pc/o,x8/0,pj/h,x6/15,s14,x10/1,pd/p,s3,x13/12,ph/b,s9,pf/n,x7/2,s7,pg/d,x13/6,pc/k,x14/10,s12,x8/0,s2,x12/1,s9,x4/8,s15,x7/10,pj/p,x5/0,s4,x14/11,s12,x5/0,s12,x10/6,pe/a,x15/0,pd/h,x7/1,pf/n,x5/2,s12,x9/12,po/l,s5,x7/5,s5,x4/2,pm/i,x5/6,s6,x8/9,pk/d,x11/5,s7,x4/1,s4,x11/13,s1,x15/7,s3,x9/11,s14,x13/3,pi/a,s3,x1/4,s6,x11/3,pj/e,x1/7,pi/h,x5/4,po/e,x6/12,s12,x3/9,s6,x10/8,s13,x3/15,pc/b,s13,x11/8,s14,x6/12,s14,x7/9,s11,x1/8,s4,x10/3,pe/k,x6/1,pj/l,x5/15,pi/e,s5,x8/0,s1,x1/3,s14,x13/0,s9,x5/2,s5,x3/11,pg/o,x5/10,pe/a,x11/14,pj/l,x15/8,s1,x12/13,s3,pc/g,x5/11,pb/p,x1/12,pf/o,x7/11,s4,pl/h,x10/0,s6,x3/12,pi/e,x7/15,pp/b,x12/6,s8,x5/11,s5,x6/7,pe/l,s7,x8/2,pd/c,x15/5,pm/e,x13/0,s1,x14/8,s6,x6/3,s15,x5/12,pk/f,x3/4,s11,x14/8,pg/a,x6/1,s7,x12/11,s12,x1/10,s5,x12/8,s8,x14/4,s10,pf/c,x1/10,s7,x0/12,pj/n,s11,x13/15,s9,x3/9,po/a,x7/8,pk/d,x10/0,s13,pl/n,x3/14,po/d,x11/2,s7,pc/i,x13/1,s13,x6/12,pa/b,x8/1,pd/k,s11,x12/0,s1,po/n,x14/15,s11,x8/4,s2,pm/c,x15/7,pg/l,x3/1,pp/j,x11/5,pn/l,x6/4,s6,x12/9,s10,x14/10,pa/e,x4/13,s8,x12/2,pj/l,x14/6,s10,pe/d,x12/2,s11,x8/15,pj/h,x0/13,pn/m,s4,x7/2,s10,x12/11,ph/g,x14/15,pj/m,x10/2,s9,x7/14,pp/g,x10/13,s7,x12/3,s15,x15/5,s1,x3/12,s12,x9/13,pf/o,x14/7,s13,x6/1,s2,x10/0,s10,x4/15,pl/g,x1/6,pm/j,x8/15,pa/f,x14/5,po/l,x10/12,s4,x1/14,s12,x3/6,pa/h,x11/14,s9,x8/4,s4,pc/m,x15/10,s6,ph/b,x13/9,s5,x14/0,s6,x3/6,s2,pk/n,x15/8,s7,x4/13,s1,x14/0,pp/i,x6/12,s4,x10/11,s5,pk/e,x7/14,s11,x6/15,s9,pa/b,x9/7,s13,x4/5,s1,x8/11,pe/d,x10/4,s15,x9/6,pl/p,x4/7,s3,x9/14,s7,x8/10,s12,x11/14,s1,x12/7,pi/f,x13/9,pm/h,x7/1,s10,x5/15,pf/l,x10/4,s7,pc/b,x5/0,pf/o,x13/14,pk/d,x10/5,pc/m,x2/12,pn/o,s6,x4/1,pg/h,x0/3,s11,x2/8,s10,x12/1,pm/j,x15/2,s9,x1/14,pk/g,x7/5,pm/a,x14/13,s9,x8/6,s13,x13/14,s11,x3/7,po/d,x14/5,s4,x11/4,pi/j,x8/10,ph/a,s14,x3/1,s9,x5/4,pb/k,x10/15,s13,x5/12,s9,x8/10,po/f,x1/9,pn/g,x8/15,s11,x7/9,s13,x4/2,s12,x14/11,ph/o,x13/10,pe/p,x15/3,pf/i,x7/1,ph/g,x13/9,pp/f,x7/15,pe/o,x8/10,s15,x13/7,pl/c,x9/14,s9,x12/0,pa/b,s7,x1/6,s7,x5/8,s8,pn/o,x4/3,pp/m,x7/1,pk/d,x11/0,s11,x15/4,pi/e,x13/5,s3,x14/4,pg/l,x1/7,s10,x9/8,s13,x3/11,po/h,x9/15,pi/l,x2/14,s12,x12/4,ph/e,x7/10,s15,x1/15,s8,x10/13,pg/p,x7/0,pb/i,x8/14,s4,x0/11,pn/o,x6/15,pm/c,x13/9,s11,x0/6,s5,x3/4,s12,x15/0,s13,x8/1,s14,pa/d,x13/14,s4,x8/10,pg/h,x1/7,s5,x5/3,s6,x2/15,s11,pj/k,s2,x4/7,pm/p,x14/15,s4,x5/4,pf/c,x3/13,s13,x4/12,s2,x11/9,s14,x15/1,pd/k,x8/6,pp/m,x4/2,s14,x8/1,s15,x15/10,s5,x7/6,s12,x11/15,pj/e,x5/7,pb/a,x0/2,s7,x14/13,pc/k,x11/9,s13,x3/2,pa/i,x14/11,s2,x0/1,s9,x14/3,pd/j,x15/12,s9,x11/10,s4,x14/13,s4,x3/12,pg/i,x14/10,s10,x1/9,s1,x12/15,ph/k,x0/8,pj/p,x7/1,s13,x9/6,s14,x12/8,pk/f,x6/1,s12,x8/2,pj/o,x9/13,s6,x1/8,s12,x9/14,ph/i,x15/8,s5,x0/3,pm/k,x6/14,s7,x4/2,pg/d,x14/5,s13,x6/1,s9,x3/5,s12,pn/j,x6/14,s13,x12/0,s13,x1/3,s11,x0/6,po/l,s8,x9/2,pj/e,x3/1,s8,pa/f,x0/8,s8,pc/h,x7/9,s4,x0/14,pd/l,x9/6,s12,x13/12,pi/p,x2/6,s11,x11/9,s14,x2/4,s15,x12/14,s14,x3/7,pb/d,x12/0,s6,x9/10,s11,x4/8,pp/i,x11/7,pj/g,x13/8,s1,x6/11,s12,x15/9,s2,pp/f,s3,x14/5,s6,x7/8,s8,x5/9,s5,x10/11,pg/c,x14/13,s5,x6/0,s12,x9/12,s8,x5/3,ph/i,x7/2,s14,x9/0,s9,x7/10,pg/l,x11/3,pd/o,x4/13,s7,pn/k,x2/7,s10,x3/9,ph/a,x14/8,pe/n,x12/2,s7,x13/14,po/k,x9/11,pj/d,x8/1,s10,x3/15,pc/k,x6/4,s9,x5/0,s11,x3/9,s11,x14/13,s11,x2/0,pj/i,x1/14,pa/c,x11/13,s11,x5/0,s8,x2/8,pf/e,x15/14,pc/j,x1/7,pm/i,x11/5,s9,x13/1,s6,x15/9,pk/g,s7,x5/0,pf/p,x14/9,s1,x1/11,pe/h,x4/9,pd/m,x14/2,s4,x1/7,s4,x15/4,s2,ph/l,x14/3,s5,pi/d,x9/12,s8,x4/2,pb/f,x0/1,s15,pd/a,x2/9,s5,x14/7,s2,x5/1,s6,x7/9,po/i,x6/10,s11,x15/4,s5,x14/9,s4,x1/7,pf/b,x3/2,pd/j,x15/5,s3,x13/7,s8,x1/9,pe/p,x2/6,s14,x9/15,pc/h,x2/14,s13,x3/1,pd/f,s13,x0/5,pl/i,x13/14,s1,x8/4,s3,pf/j,s1,x12/11,pn/e,x3/10,s12,x0/13,s14,x1/8,s13,x2/5,s12,x9/14,s14,x11/8,s14,x6/5,pb/o,x14/12,s10,x15/8,s3,x1/2,pj/m,x3/10,s4,x0/6,pd/a,x3/7,pp/m,x9/15,pa/j,x8/14,po/n,x2/13,pg/f,x0/9,s1,pa/n,x7/1,s6,x3/13,s15,x10/2,s6,x4/0,pk/d,x9/13,s14,x5/11,s4,x8/2,s13,x12/11,s7,x0/8,s15,x13/1,s5,x10/15,s8,pa/p,x4/13,s11,x7/10,po/c,x13/3,pe/n,x10/7,s9,x6/13,s2,x9/0,pj/o,x11/12,pe/b,x13/9,s6,x2/6,pd/h,x14/12,s14,pk/o,x13/7,pj/c,x15/4,s1,x0/2,pb/p,x12/1,s3,x15/4,pd/n,x0/10,s10,x6/13,po/f,x2/9,pm/j,s2,x15/13,s7,x12/14,pn/i,x3/11,s8,x1/5,s5,x0/2,s6,x9/1,s12,x8/10,s2,x5/15,pb/a,x12/14,s7,x4/0,s13,x10/11,pe/j,x9/15,s13,x10/14,s15,x1/2,pb/k,x8/3,s10,x11/12,s13,x3/0,pi/p,x10/8,pe/j,x3/5,s8,x1/8,s3,ph/g,x11/6,s12,pa/n,x15/10,s6,pe/p,x11/9,s7,x5/13,s8,x4/0,s4,x6/14,s6,x2/10,s10,x0/5,pl/g,x3/13,s14,x12/7,s4,x15/1,pf/b,s15,x10/4,s7,x13/7,s11,x2/5,pa/j,x13/1,s9,x5/7,s2,x0/8,s9,x11/12,pf/i,s9,x10/8,pe/g,x5/3,s10,x8/12,pf/h,x2/10,s15,x6/4,pc/k,x7/14,pm/o,x5/11,s8,x10/1,pp/j,x9/5,s13,x2/14,s5,x4/1,s9,x12/10,s14,pf/n,x11/1,pl/c,x14/5,s11,x3/6,pg/f,s14,x5/4,s5,x2/1,s5,x11/14,pl/a,x0/6,s5,x9/4,pg/n,x1/6,s6,x13/2,s1,x3/7,pj/k,x6/13,s3,x1/3,s4,x7/8,s1,x12/15,s15,x7/1,pa/d,x3/8,pn/o,x15/1,pi/b,x10/6,s1,pg/a,x14/15,s5,x11/5,s2,x15/1,pd/f,x9/11,s9,x1/5,s8,x9/12,pa/h,x1/0,s11,x5/7,pe/j,x3/13,pl/f,x1/8,s5,x11/14,s14,x9/7,s8,x13/11,pe/k,x10/4,ph/m,x13/5,s3,x0/14,s11,x12/7,s13,x9/3,s2,pd/b,x15/8,s12,x4/5,s4,x2/14,pp/n,x3/8,pi/l,x0/7,s4,x15/6,s10,x11/9,s9,x6/5,s7,x1/7,ph/d,x10/12,s4,x3/14,s2,x15/1,s6,x10/4,pc/l,x6/0,s5,x9/12,s4,pa/p,x2/8,pf/o,x10/1,pp/g,x3/2,pl/a,s13,x6/13,s15,x2/1,s14,x10/5,s11,x0/2,pf/j,s12,x4/11,s8,x14/2,s6,x6/10,s13,x15/13,s1,x10/0,s15,x11/12,s12,x10/14,pi/o,s9,x4/8,ph/a,x1/2,pe/m,x5/14,pj/f,x4/12,pi/h,x15/6,s8,x12/14,s5,x1/2,pb/o,x7/8,s7,pk/e,x12/10,s9,x3/15,s12,x0/6,s5,x3/14,s1,pn/m,s15,x7/5,ph/d,x11/4,s6,x5/15,pp/c,x2/8,pd/i,x9/13,pf/a,x2/4,s5,x12/0,s2,x10/1,s9,x15/13,s5,x8/11,pb/c,x9/1,s9,x7/12,s2,x13/4,pd/n,x11/8,s12,x2/10,pe/g,s10,x4/8,s3,x14/12,s3,x9/6,s5,pa/b,x8/1,s3,x2/3,s12,x11/8,s3,x9/7,s12,x5/13,s5,x8/10,pp/c,x13/0,pk/h,x10/4,pe/n,x0/9,pa/i,x2/5,pd/b,x0/7,pi/p,x13/11,s6,x7/0,ph/n,x8/4,s8,x12/0,s15,x13/1,s9,x8/2,pj/m,x5/15,s15,x13/4,s8,x10/6,s9,pd/g,x1/3,s11,pn/i,x11/9,pj/f,x14/0,pi/n,x5/4,pb/h,x14/13,pm/j,x2/7,s8,x8/15,s3,x0/12,s3,x1/3,s8,x12/7,s1,x14/15,s5,x8/9,pn/a,x10/13,s9,pp/c,x15/2,s8,x8/14,ph/k,s8,x3/4,s1,x2/12,s3,pn/c,x11/0,s10,x2/9,pl/k,x4/7,pg/i,x1/11,s7,x6/3,s11,x13/9,pl/f,x4/3,pc/p,x5/0,s14,x11/4,s10,ph/j,x6/14,s14,x10/1,pf/o,x7/5,s9,x15/12,s11,x8/11,pp/m,x9/3,pg/a,x7/5,ph/e,x2/12,pm/l,x3/9,s13,x8/4,s7,x2/13,s13,x4/14,pe/g,s4,x12/6,po/l,x13/7,pj/c,x11/1,s1,x0/7,pn/l,x10/14,pd/g,x4/12,s2,x8/14,pk/c,x7/12,s1,x1/3,pp/j,x13/9,s3,x12/6,s10,x13/10,s4,x11/5,pn/b,x3/10,s1,x1/9,pc/g,x15/5,s7,x8/4,pe/m,x0/13,s11,x8/1,s8,x5/2,s3,x11/4,pa/l,x10/7,s4,x6/4,po/g,x13/3,pj/b,x2/0,s9,x8/1,pi/k,x3/7,s14,po/p,x8/2,pm/k,x0/14,pe/i,x11/10,pl/f,x0/4,s10,pi/d,x9/6,pc/j,x12/13,s2,x6/0,s12,x7/14,pg/e,x5/9,pk/f,x12/1,s1,x7/4,s9,x0/15,s14,x10/7,s8,x1/11,s10,x2/13,pm/a,s8,po/h,s14,x7/15,pl/i,x10/2,s10,x13/9,s2,pb/e,s1,x7/8,s5,x15/14,pd/a,x7/0,s9,x14/15,s12,x5/0,pi/c,x2/4,pd/l,x8/1,s13,x7/0,s15,x4/3,ph/n,x8/13,pm/o,x1/11,s12,pn/c,x9/0,s2,x8/15,pa/p,x10/2,pm/l,x1/9,pi/f,x3/5,s1,x6/10,s2,pk/m,x5/0,s10,x10/2,s4,pc/g,s7,pk/l,x14/4,s9,x8/5,s6,x13/10,s14,x5/14,s9,x4/11,s7,x0/6,s10,x12/2,s13,x7/6,s7,x12/3,pc/d,s2,pm/j,x6/0,pd/o,x13/7,pn/k,s9,x3/12,ph/e,x9/8,s3,x7/3,s4,x12/4,pg/o,x6/13,pb/d,x15/1,po/c,s14,x6/8,s13,x12/7,pb/f,x8/1,s5,x12/4,pc/a,x6/13,s3,x0/1,s9,x6/15,s7,pm/e,x1/9,s11,x15/4,pk/g,s9,x3/6,s12,x7/14,ph/p,x11/4,s15,pk/e,x7/10,pj/o,x13/9,s11,x7/5,pi/l,x14/15,s1,x8/10,s1,x11/4,s2,x8/12,pe/g,x10/2,pm/l,x4/0,s9,x6/3,pb/f,x10/5,s6,x14/8,s12,x7/12,s15,x0/15,pc/e,x9/3,s9,x7/4,pd/h,x2/11,pp/b,x1/7,s11,x13/11,pk/e,s6,x8/10,s10,x1/2,s3,x12/3,s7,pd/g,x2/0,pa/e,x8/3,s8,x14/9,s2,pk/d,x11/6,po/i,s6,pf/m,x5/0,pn/g,x7/3,pc/o,x11/4,s13,x14/3,s8,x2/15,s14,x5/4,s4,x12/0,s7,x15/11,s10,x12/9,pe/g,x15/5,s4,x7/6,s7,x11/0,pa/b,x12/4,s8,x15/11,s7,x13/5,s15,x2/3,s6,x0/7,s13,x2/14,s11,x1/12,s4,x4/15,s2,x14/3,s5,x12/7,pn/m,x4/0,s11,x11/9,s6,pi/k,x10/6,s11,x2/11,pg/j,x8/15,s2,x4/13,s8,x3/8,pp/i,x14/4,s4,x11/0,s4,x10/14,s1,x5/2,s14,x9/6,s2,x4/8,s13,x7/9,s11,x8/12,s14,pm/f,x7/2,pn/j,x4/8,s4,x10/6,pk/l,x8/11,s5,x2/15,s13,x4/14,po/n,s2,x9/10,s1,x6/2,pk/g,x15/12,s8,x3/14,pj/h,s12,x9/13,s13,x6/12,s4,x15/9,pa/b,x7/2,s10,x8/10,s4,x0/6,s14,x9/14,s1,x11/13,pg/l,x12/5,s4,x11/9,s8,x14/3,pa/n,x7/5,s7,x14/3,pg/c,x7/1,s8,x3/9,s14,x1/8,pm/l,x12/7,pf/e,x8/9,s6,po/m,x0/11,s10,x1/3,s4,x13/0,s13,x8/5,pi/n,x15/3,pm/j,s4,x4/0,pl/h,x5/2,s3,x13/9,s8,x7/14,s12,x11/15,s15,x3/6,pf/n,x5/7,pl/i,x0/14,s9,po/e,x11/9,s12,x12/3,pm/c,s6,x1/6,s4,x12/5,s1,pf/j,x2/6,pb/n,x15/0,s14,x10/7,s15,x15/4,pl/f,x2/10,s2,x3/11,s8,x9/1,pm/k,x4/6,pb/j,x9/7,s1,x11/0,pf/g,x9/14,s4,x13/3,pk/l,x9/12,s13,x1/8,ph/a,x0/4,s10,x12/13,s6,x10/9,s4,x15/6,s13,x2/8,s3,x11/7,po/g,x4/8,s4,x6/3,pn/m,x5/15,pb/g,x10/4,ph/n,x3/11,pf/e,x2/12,pn/p,x9/6,s8,x8/5,s11,x7/2,s1,x15/6,s9,pd/c,x5/2,s2,x7/3,pk/j,x14/6,s4,x11/3,s9,x5/13,pm/h,x0/6,pl/b,x5/2,pa/e,x3/4,pm/d,x6/15,pe/l,x0/3,pi/n,x11/2,pl/j,s7,x0/12,pk/c,x4/13,s10,x5/6,s12,x12/15,s3,x6/10,s13,x1/8,s13,x12/4,s15,x0/10,pb/o,x1/3,s15,x14/15,pe/j,x10/2,s1,x6/15,pp/f,x3/7,s6,x10/13,s3,x5/2,s12,x13/6,s9,x10/14,s13,x5/1,s8,x11/9,s13,x5/14,s7,x0/15,s11,x1/8,s11,x11/9,s13,x0/4,pb/g,x8/7,pp/l,s7,x4/15,s11,x12/1,pf/k,x6/9,ph/i,s4,x0/4,s14,x14/9,s13,x2/10,s13,x1/4,pe/p,x10/14,s2,x7/12,pg/b,x2/3,s6,x8/9,s14,ph/n,x1/12,s13,x15/9,pi/d,x12/6,s9,x7/10,pn/l,x2/11,s13,x10/15,s9,x3/7,pj/g,x1/8,pd/b,x2/4,s10,x5/6,s12,x8/7,s10,x15/13,pn/k,x14/2,pc/a,x8/6,pk/f,x11/4,pc/a,x0/1,pj/l,x10/3,s9,x14/12,s2,x9/2,pn/d,x10/11,s1,x9/8,s6,x13/0,s10,x1/3,s8,x9/8,s3,x11/14,pl/h,x5/1,pn/p,x14/6,s6,x11/4,s15,x3/2,s13,x10/6,s9,x4/1,s3,x15/11,pj/k,s12,x14/1,pm/i,x2/11,pb/o,x10/7,pd/p,x6/11,s8,x12/0,s2,x6/11,s6,x1/10,s7,x12/9,po/l,x14/2,ph/d,x15/9,pl/p,s5,x6/8,s5,x10/13,s5,x12/9,s15,x4/1,s11,x7/11,s9,x3/15,pm/i,x10/5,pd/l,x8/13,pp/n,x0/3,s3,x10/1,pf/e,x5/13,s3,x4/12,s12,x3/11,s4,x6/10,pb/o,x2/8,s2,pf/n,x0/10,s11,x8/11,s10,x14/15,ph/g,x8/0,s13,x11/1,s15,x14/3,pi/l,x11/15,pk/d,x8/12,pm/i,s5,x4/7,s14,x2/9,pc/a,x8/4,s10,x5/12,po/h,x4/9,s8,pk/e,x13/1,s5,x4/14,pi/m,s9,pb/k,x7/12,s6,x2/14,s14,x6/0,s5,x7/8,s15,x15/4,s2,x5/8,s5,x6/0,s7,x8/3,s14,x4/12,pd/m,x7/15,s13,x9/11,s3,x3/12,pp/l,x8/0,s11,x4/3,s5,x15/8,pn/e,x6/2,pp/h,x9/11,s7,x1/15,s8,x10/5,s9,x0/9,s4,x8/3,pd/f,x12/6,pm/o,s3,x10/13,pc/e,x9/14,s12,x3/6,s8,x13/2,s15,x12/10,s9,x9/1,ph/a,s2,x0/4,s4,x9/5,s9,x3/12,s15,x5/9,s13,x14/15,s2,x4/5,pe/m,s10,x11/6,ph/f,x12/14,pa/l,x1/11,s15,x14/7,s3,x10/15,s2,x6/5,s6,x9/2,s10,x13/1,pb/h,x4/10,pe/m,x15/2,pk/h,x4/1,s13,x12/0,pl/o,x13/11,pb/d,x6/1,ph/e,s8,x13/9,pp/k,s7,x10/14,s8,x12/11,pl/h,x9/10,s12,x11/6,pp/i,x8/10,s15,x0/1,pd/c,x10/5,ph/a,s13,x1/15,s2,x7/5,pg/p,x6/15,pb/l,x1/2,s4,x12/8,s7,x5/2,s8,x10/15,s2,x9/1,pj/p,x7/8,s15,x14/9,s10,x6/11,s14,po/f,x7/15,s13,x12/3,s12,x2/13,s2,x10/5,pl/a,x15/9,s5,x12/1,s2,pf/j,s4,x7/4,s3,x2/15,s14,x9/12,pi/c,x3/8,pl/b,s10,pd/a,x10/12,s8,x14/11,pp/b,x3/0,pc/o,x6/10,s5,x8/0,s7,x7/9,pj/l,x2/8,pi/e,x3/6,s8,x7/1,po/m,x8/4,s9,x10/7,pk/c,x1/9,s7,x2/0,s13,x11/4,pd/g,x2/9,ph/j,x3/0,s7,x10/9,s15,x8/2,pm/o,x0/4,s8,x8/7,s10,x4/13,s3,pk/j,x12/3,s13,x7/0,po/d,s7,x9/3,pp/n,s5,x0/1,s1,x3/5,s7,x15/11,s6,x8/1,pb/f,x6/2,pg/h,s9,x10/14,s7,x15/5,pd/f,x4/14,pc/g,x2/7,pd/n,x14/0,po/h,x7/5,s5,x15/10,pf/e,x5/4,s4,x10/0,s12,x15/3,s1,x14/8,s6,x0/13,s13,x5/3,s3,pl/c,x13/6,pn/a,x1/2,pi/p,x7/3,s7,x1/10,pe/n,x4/15,s9,x9/10,s8,ph/b,x1/8,pj/f,s11,x13/6,s8,x8/2,s13,pe/k,x7/0,pc/d,x13/6,s11,x9/1,pg/f,x14/0,s13,pp/i,x13/4,pj/a,x8/9,s5,x12/1,s7,x8/14,pf/h,x5/9,pi/g,x15/13,s1,x5/14,s5,ph/b,x3/10,pm/p,x13/9,s12,x15/0,pf/n,x13/2,pd/a,x8/15,pp/f,x6/9,s15,x14/1,pm/e,x7/5,s10,x10/4,pa/p,s10,x13/8,s8,x3/5,s7,x14/10,s6,x3/8,pe/o,x14/1,s2,x3/9,pi/m,s10,x11/2,s5,x6/7,s9,x8/15,s11,x14/10,pp/b,s2,x3/11,s8,x1/5,s13,x9/12,s9,x5/10,s13,x14/0,pk/l,x2/13,s2,x7/11,s7,x4/10,s11,x8/6,s15,x1/10,pc/d,x4/7,pi/o,s9,x9/2,s2,x10/1,pj/d,x7/11,po/l,x0/1,pb/m,x13/11,s4,x10/4,s2,x0/15,s10,x12/3,s1,x4/1,s13,x6/9,s13,x7/10,s13,x4/9,s1,x14/1,s15,x6/15,s1,x2/10,s10,x9/15,pa/k,x12/0,pl/b,x15/13,pc/m,x14/3,s3,x7/2,pp/e,x8/1,s12,x6/3,pf/d,x9/15,s7,x0/2,pm/p,s7,x3/6,s13,x5/8,s4,x7/1,s7,x10/3,s12,x13/5,s14,x1/9,s1,x14/11,pk/c,s12,pa/m,s8,x2/0,s14,x1/11,s2,x3/7,s5,x15/6,s4,x5/2,s11,x14/11,s3,x8/5,s9,x7/2,s4,x14/13,pe/d,s10,x5/3,s14,x6/10,s2,x15/2,s3,x12/11,pm/n,x3/15,pg/b,x6/1,s10,x13/0,s4,x1/3,pd/a,x7/11,pk/n,x3/2,s12,x15/6,pp/m,x9/7,s6,x10/3,s9,x4/6,s2,x1/0,s13,x15/2,s13,x6/5,s12,x12/9,ph/k,x7/11,pd/p,x9/5,pb/m,x2/12,pn/h,x7/3,pa/f,x10/12,s9,x4/9,pc/n,x15/11,pa/d,x10/0,s1,x1/12,pi/e,x15/5,po/g,x12/8,s9,x7/5,s2,x3/0,s7,x6/15,s13,x3/1,pj/p,x12/0,pn/a,x8/7,s6,x11/14,po/b,x13/6,s12,x9/10,pj/h,s2,pn/a,x11/15,s6,x5/1,s8,x7/11,s5,pm/j,x10/2,pf/n,x12/6,s10,x5/15,pi/b,x9/4,pl/n,x13/15,s1,ph/j,x2/12,s10,x5/9,s10,x12/10,s13,x11/8,s8,x7/3,s9,x12/2,pn/b,x1/6,s5,x10/2,s4,x5/1,s13,x4/8,s4,x13/1,s2,x12/0,s1,x6/1,s13,x10/12,pd/m,x5/15,s3,x12/1,s1,x2/11,s6,x0/13,s8,x9/7,s4,x11/1,po/b,x8/13,pj/d,x5/6,s7,x15/12,pa/n,x14/4,ph/j,x9/8,pb/i,x2/6,s3,x9/3,pa/n,x6/0,pi/j,x15/3,pe/h,x9/1,pa/f,x5/12,s3,x7/9,pc/i,x10/12,ph/b,x9/14,s11,pd/a,x4/7,ph/c,s10,x0/9,s14,x10/4,s6,x7/15,pl/f,x14/1,s3,x0/7,pm/j,x8/10,s8,pf/k,x2/9,s9,x7/3,pn/l,x14/13,s4,x6/2,s8,x8/12,s5,x10/4,ph/f,x2/13,s14,x5/4,s15,x13/14,s6,pk/d,x2/15,pn/b,x13/3,po/i,x0/10,pc/d,x6/15,pn/k,x9/8,pe/f,s5,x13/0,s4,pa/d,x7/11,s7,x4/1,s1,x9/11,s11,x13/12,pm/g,x6/2,s2,x3/5,pp/e,x13/10,s12,x5/9,pn/f,x3/10,s2,x4/15,s11,pe/k,x5/10,pn/o,s2,x6/8,s2,x2/1,s11,x14/3,s12,x6/10,s2,x12/8,pl/j,x1/13,pm/p,s13,pc/j,x5/10,s11,x15/1,pg/b,x6/13,s6,x5/0,s2,x3/14,pa/n,x10/2,pi/c,x7/13,pa/d,x4/0,pm/f,x3/13,po/i,x8/11,pf/c,x1/9,pd/e,x11/13,s3,x15/1,pk/i,x14/7,pp/a,x11/15,s13,x2/7,s1,x10/11,pi/h,x0/15,pk/g,x11/13,pe/f,x9/8,pm/p,x4/13,po/n,x9/10,pf/j,x8/14,s14,x0/2,s3,x3/11,s2,x12/7,s15,x5/8,s15,x10/2,s7,x8/15,pg/d,x13/14,pa/m,x0/1,s10,x8/15,pk/i,x14/6,s14,x4/2,pj/g,x11/12,pa/m,s13,pg/f,x5/4,po/l,x13/8,ph/a,x0/6,s2,x10/3,s12,x7/11,po/k,x15/12,s9,x14/5,s8,x7/3,s12,x12/13,s11,x7/15,ph/p,x2/0,s14,x4/9,s14,x1/5,s7,x14/3,pi/f,x4/12,pg/h,x2/5,s10,x15/12,pp/f,x4/13,s14,x10/9,s11,x2/6,s6,x1/14,pn/b,x13/9,pl/k,s14,x11/15,pf/g,x14/5,s11,x2/10,s6,x7/8,s9,x10/2,s12,x9/11,pb/d,x7/3,pc/n,x10/6,s11,x8/11,s3,x12/5,s1,x15/13,pg/p,x14/1,pl/d,x4/13,s2,x14/7,s11,x3/12,s2,x13/8,pa/f,x12/14,s10,x15/3,s6,x14/2,s5,x5/15,s7,x14/1,pl/c,x4/12,pd/o,x0/11,pn/i,x10/15,s15,x14/12,s14,x3/1,pl/k,s15,x13/5,s6,x14/11,s15,x3/0,pi/a,s2,x11/9,po/e,x13/2,pk/h,x11/6,s14,pj/m,x13/12,s1,x11/6,s3,x1/12,s10,x8/9,pa/e,x12/13,pf/c,s6,x10/6,pp/j,x5/14,s14,x0/1,s13,x13/3,s13,x12/8,s5,x0/5,s1,pf/g,x7/6,s5,x3/11,s5,x5/13,s5,x15/0,s13,x8/13,s14,x15/9,s13,x3/10,s4,x9/1,s15,x14/11,pm/a,x7/5,pb/k,x11/3,s6,x12/4,s5,x13/3,pn/c,x1/12,pj/o,x10/6,s8,x2/7,s4,x10/9,s2,x11/12,s14,x13/8,s6,x2/11,s15,x5/6,s4,x12/9,pn/d,x6/7,s11,x2/5,ph/g,x1/12,s11,pb/o,x7/11,pi/h,x3/4,s12,pm/n,x1/10,s11,x4/9,pg/i,x15/2,pf/p,x8/13,ph/e,x7/15,pf/j,x8/13,s3,x15/12,s15,x0/11,s2,x7/8,pc/i,x15/14,s10,x3/13,s7,x7/15,s11,x13/1,pa/j,x15/7,po/l,x9/5,s2,x7/6,pa/b,x0/12,pn/h,s1,x14/4,s13,x15/10,pk/p,x2/1,s8,x8/4,s5,x13/1,pm/b,x11/15,pc/k,x13/3,s5,x10/9,pl/i,x11/6,s9,x2/5,ph/c,x0/9,s8,x1/5,s4,x12/10,s4,x8/6,s6,x4/0,s9,x1/15,pa/b,x11/9,s12,x1/7,s6,x10/13,s3,x9/0,s7,x1/7,s2,x4/9,s2,x14/8,ph/o,x13/7,pd/g,s9,x11/0,s9,x3/2,pk/c,x13/7,s15,x11/8,pf/o,x7/15,s14,x10/0,pk/i,x2/15,pc/d,x4/0,s9,x9/5,s10,x7/13,s1,x5/15,s11,x14/4,s13,x6/9,pn/f,s3,x10/12,s15,x2/4,s14,x12/3,s15,x5/0,pc/k,x4/13,pj/o,x14/3,pe/d,x13/0,s2,x6/8,s12,x1/11,pm/b,s14,x14/10,pl/p,x1/13,s6,x0/8,pb/n,x14/7,s15,x6/2,pi/g,x3/7,ph/a,x2/14,s8,pf/d,x6/5,s3,x0/11,pn/b,x15/2,pf/p,x1/12,pe/g,x13/15,pb/o,x6/2,s7,x1/15,ph/j,s15,x4/11,s7,x5/10,s3,x7/12,pf/i,x11/0,s14,x13/6,s3,x3/9,s2,x12/0,s8,x7/2,s14,x15/6,s6,x12/9,s4,x1/6,s15,x3/15,s1,pk/j,x0/7,pi/d,x3/4,s11,x5/15,pb/p,x0/7,s2,x10/1,s4,x11/0,s13,x10/5,s13,pn/c,x4/14,pj/g,x7/9,s12,x13/11,pb/i,x8/15,s13,x7/12,pd/f,s14,x11/14,pn/k,x9/7,s7,x8/1,s10,x9/4,s4,x2/6,ph/c,x8/5,pi/d,x0/15,s3,x6/5,s6,x11/0,pg/p,x2/5,s1,x12/14,pj/k,x13/5,pm/a,x3/10,pl/f,x1/2,s7,x11/5,pn/k,x10/7,s13,x13/14,s3,x2/0,s5,pd/e,x7/14,s11,x11/4,pa/m,x13/14,s3,x6/1,s7,x14/5,s6,x11/6,pc/p,x3/14,s15,pm/g,x10/6,pb/k,x5/13,s1,x1/11,s6,pg/c,x4/12,s9,x9/0,s7,x7/15,s15,x14/1,pp/j,x9/10,pg/l,x0/2,po/j,x14/3,pn/k,x6/10,s14,x8/1,s3,x0/4,pi/a,x7/11,pj/l,x1/0,s3,x10/6,s5,x1/14,pa/k,x8/7,s1,x3/1,s9,x9/4,s13,x13/2,pn/h,x3/4,s4,x8/6,s14,x9/13,s15,x4/1,s1,x2/12,s3,x11/7,pm/c,x4/14,pb/l,s4,x5/2,s8,x3/4,pm/f,x12/9,pp/g,x8/14,s7,x12/13,pk/l,x6/4,pb/i,x1/13,s10,x3/2,s13,x1/11,pf/k,x12/9,s10,x11/3,s11,x4/9,pp/n,x15/0,pf/o,x1/2,s12,x6/11,s15,x4/9,pd/i,x6/3,s6,x12/7,pj/n,x9/8,s9,x10/2,s5,x12/8,s3,x1/4,s10,x2/7,pb/k,x0/5,s4,x15/10,pn/l,x3/9,s14,x0/2,pp/i,x11/8,s6,x4/13,pg/m,x3/15,s2,x8/9,s9,x12/3,s1,x10/4,pe/i,x9/15,s4,pf/l,x8/2,s10,pa/n,x4/11,pk/b,x1/9,s10,pf/a,x15/2,s15,x12/10,pg/k,x1/11,pl/e,x14/8,pi/a,x11/12,s9,x2/1,s14,x6/7,pc/m,x9/4,ph/n,x15/11,s10,x1/0,pj/e,x5/4,s3,x8/2,s6,x3/11,pm/c,x1/12,pn/l,s12,x10/8,s4,x7/11,pk/h,x15/5,pc/l,x7/10,s5,x9/4,s14,x6/12,po/d,x8/13,pa/c,x6/14,s13,x10/11,s6,x8/7,s4,pb/m,x2/5,pa/g,s12,x7/0,pj/k,x14/11,pg/d,x8/0,s15,x4/13,pc/i,x15/8,s7,pg/a,x1/4,s10,x2/0,s13,x10/13,s6,x1/7,s13,x15/11,pe/o,x0/12,s10,x10/3,s12,x6/9,pl/f,x3/14,pn/e,x12/0,s15,x4/7,s10,x5/13,s11,x6/12,s5,x14/8,s12,x15/13,s13,x1/4,s14,x13/0,s12,x2/8,s11,x15/13,s14,x6/4,s1,x1/7,s1,x11/2,s9,pc/b,x10/1,pg/k,x0/15,pa/h,x5/3,s7,x13/0,s1,x8/6,s11,x2/3,pm/c,x1/14,s6,x10/13,ph/p,x15/12,pd/g,x5/4,s14,x11/13,s8,x14/1,pk/h,x3/13,s7,x9/4,s2,pn/g,x2/13,pl/o,s1,x11/15,s15,x4/6,s1,x9/8,pc/e,x15/11,s12,x8/4,po/d,x1/14,pp/f,x15/5,pi/n,x11/6,pd/o,x14/3,s4,pm/j,s10,x1/5,s9,x14/11,s12,x1/12,s13,x5/4,s1,x11/14,s7,x5/6,s10,x3/8,pp/d,x6/13,s2,pf/o,x10/4,s14,x5/6,pm/l,x13/10,s12,x3/5,pg/j,x11/15,pm/o,x3/7,pn/e,x10/13,pf/c,x8/4,s12,x14/13,s13,x5/12,s6,x1/0,s5,x9/7,pm/i,x1/5,pd/c,s8,x11/2,s3,x0/10,s8,x13/7,s7,x9/11,s8,x12/8,s13,x7/9,s11,x6/10,s14,x9/5,s14,x7/1,s1,pe/b,x12/5,ph/g,x3/7,s9,x6/10,s8,x9/13,pm/l,x12/8,s12,x6/15,s5,x2/3,s4,x0/11,s7,x3/6,pn/k,x2/4,s3,x9/1,s11,x11/6,s3,x9/1,s14,x15/2,s3,x3/11,pe/m,x0/15,po/j,x5/12,pa/d,x7/9,s2,pl/p,x1/2,s6,x14/8,s3,pj/e,x5/9,s1,x8/2,pi/n,s8,x9/13,s4,x7/15,pd/o,x9/6,pi/p,s8,x13/12,pc/h,x0/9,s6,x8/5,pm/i,x4/12,s12,x9/2,s7,x6/14,ph/g,x5/9,pe/f,x15/7,pi/c,x11/6,s12,x13/10,s11,x12/15,pj/g,x14/8,s14,x2/13,s9,x5/0,s11,x4/3,s15,x1/10,pf/m,x12/11,po/e,x10/2,s8,x8/1,s3,x6/10,pc/g,x2/11,s1,x4/7,pj/o,s14,x6/15,s13,pm/f,x4/9,pc/k,x7/8,pd/h,x2/15,pj/l,x10/7,pi/e,x9/11,s4,x2/13,s15,x0/5,s6,x3/8,s12,x11/4,s10,x14/1,pf/n,s15,x10/12,s14,x11/1,pd/m,x12/15,s4,x6/13,pi/n,x2/8,s14,x7/1,s8,x6/15,pc/f,x4/9,s15,x0/2,s9,x14/12,s8,x6/5,s8,x3/2,pb/g,x0/10,s15,x1/11,s2,x6/12,s15,x2/14,pc/d,x0/8,pg/f,x1/3,s10,x10/2,pp/e,x4/7,s14,x6/8,s11,x0/4,pm/n,s11,x10/3,s1,x15/13,pi/h,x12/9,pc/j,x0/5,s5,pl/b,x14/7,s6,x11/8,s14,x4/2,s8,x10/0,pd/i,x7/9,s13,x3/0,pp/e,x5/6,s8,x7/12,ph/d,x2/14,pa/c,x15/0,s12,x9/12,s11,x2/14,pe/p,x10/7,po/n,x13/11,pg/k,x15/12,s9,x2/9,s15,x6/4,s4,x5/10,s13,x4/1,s1,x9/7,pf/c,x1/2,s11,x4/15,s11,x1/8,pe/h,x12/7,s15,x13/1,s7,pp/c,x6/5,pl/e,x10/3,s12,x13/15,s1,x0/1,pi/o,x14/2,s10,x13/1,s15,x7/15,s5,x11/1,s6,x13/10,pl/k,x0/1,pf/d,x7/12,s2,x13/6,s5,x10/1,s10,x6/13,pc/b,x3/0,pn/d,x12/8,pf/j,s11,x0/15,s9,x10/12,pg/n,x3/13,po/k,x14/10,s8,x7/1,pd/i,x10/3,s13,x11/6,s2,x12/0,s4,x8/14,pk/j,x15/10,pi/h,x9/0,s12,x10/12,pc/p,x5/3,pl/m,x0/12,s8,x10/5,pe/g,x7/0,s15,x5/11,pk/d,x6/0,s1,x1/9,pe/m,x5/13,s7,x12/15,pl/j,x10/2,s12,x0/13,s13,x5/3,s4,x0/13,pc/g,x1/6,s1,x13/5,pj/a,x3/15,s8,x10/9,pc/f,x1/7,s5,x11/6,s13,x1/5,s6,x9/2,po/m,x15/6,s3,x0/3,pn/e,x15/6,pp/b,x14/9,s13,x3/12,s3,x8/0,pi/e,s3,x1/13,s13,x5/0,s14,x3/14,s11,x7/4,s10,x2/3,s12,x15/13,s9,x7/5,ph/l,x3/0,pj/n,x1/6,s1,x12/3,pl/b,x0/1,pf/o,x14/15,s12,x13/5,pa/e,x6/1,s13,x12/11,pc/b,x0/1,pi/h,x2/10,pk/l,x5/12,s2,x8/7,s1,x15/5,pf/o,x9/1,pd/l,s4,x5/14,pm/c,x3/9,pa/h,x0/15,po/p,s1,x5/1,s7,x0/14,pi/e,s2,x10/6,s11,x9/12,pg/a,x6/10,s14,x14/11,pd/b,x8/12,s1,x9/13,pg/h,s11,x4/0,s10,x13/10,s3,x15/9,pn/b,x2/0,s2,x13/5,s2,x1/6,s4,x4/12,s6,x1/5,s2,pg/m,x4/13,s1,x14/0,s5,x11/8,s6,x10/12,pe/p,x9/8,s7,x10/3,s7,x6/8,s5,x10/14,pg/a,x3/15,pk/c,x2/7,pa/b,x1/13,s11,pi/c,x11/9,s7,x2/3,s11,x10/4,s15,po/g,x15/7,s5,pc/e,x8/3,s10,x10/14,s2,x1/8,s6,x7/6,s11,x2/0,pm/k,x8/9,s1,x13/10,s7,x3/14,pg/p,s10,x2/8,s6,x1/4,pj/l,x11/12,s8,x1/5,s12,x15/13,s2,x1/3,s4,x13/2,s15,x7/5,s15,pn/c,x14/8,s10,x6/9,s3,x8/7,s3,x0/2,pe/g,x8/13,pj/i,x9/11,s10,x13/12,s6,x6/10,s8,x3/4,po/p,x13/10,pk/l,x4/12,pb/e,x0/5,ph/n,x6/11,s10,x1/14,s3,x8/7,s11,x5/13,s7,x10/9,pd/b,s1,x7/15,pn/f,x8/13,s12,x2/0,po/k,x15/12,s7,x8/10,pl/h,x2/6,s7,pf/m,x5/10,s5,x13/7,s8,x12/8,pg/d,x4/14,pm/c,x0/9,pk/j,x6/5,s11,x14/9,s10,pe/g,x8/1,s13,x3/2,s1,x15/5,s2,x9/6,s5,x4/5,s1,x13/10,pp/j,x15/5,s14,x12/4,s10,x2/1,pf/i,x5/8,s7,x14/9,ph/o,s4,x8/5,s7,pm/n,x14/2,s13,x3/5,s7,x13/8,s14,x10/3,s8,pe/o,s4,x14/1,s9,x3/10,s7,x4/0,s13,x3/1,pn/i,x11/0,pk/f,s7,x15/6,s3,x13/8,s3,ph/c,s5,x11/14,s6,x7/15,s9,x11/12,s10,x0/7,pb/d,x6/5,s14,x4/13,pj/e,x3/11,pc/b,x6/10,pg/m,x7/8,s5,x2/1,s7,x5/10,po/d,s9,x3/14,pk/c,x4/11,pa/e,x5/15,s11,x14/1,pb/i,s2,x0/3,s13,x15/13,s1,x3/0,s9,x2/6,pm/e,x15/4,pi/o,s5,x14/9,pf/b,x2/4,pd/h,x3/8,pc/f,x14/0,pl/a,x8/2,s8,x15/9,s7,x2/1,pi/j,x5/8,s7,x1/12,s4,x4/10,s13,pc/g,s7,x6/7,s11,x10/8,s4,x2/15,pe/l,x0/12,s2,x11/7,s8,x1/13,pm/b,x14/15,s8,x0/4,s8,x1/10,pf/p,x15/6,pi/b,x3/7,s12,x9/12,s7,x4/15,s15,x8/6,s12,x10/11,pa/f,x2/14,s4,x6/4,s13,x14/13,pd/l,s9,x4/2,s1,x8/7,s2,x9/11,pi/b,x2/8,ph/a,x1/9,pg/f,x2/12,s12,x5/8,pd/l,s15,pa/f,x13/3,s7,x6/5,s6,x0/9,s7,x5/13,pi/p,x10/11,pk/o,s5,x8/15,s5,x0/10,pp/l,x11/9,pf/i,x8/14,po/d,x15/13,s1,x1/7,pb/i,x11/5,pl/f,s14,x12/15,s4,x11/0,s1,x15/14,s1,x4/0,s11,x8/9,s1,x6/1,s11,x5/8,pm/i,x9/7,ph/d,s13,x8/4,pp/n,x1/12,pj/b,x3/9,s1,x8/15,ph/p,x11/1,s11,x9/12,s4,x10/0,pg/k,s12,x14/2,pi/e,x3/1,s3,x13/7,s5,x2/6,s9,x4/13,s1,x0/14,pk/g,x13/8,s3,x1/9,s12,x15/5,pm/d,x11/2,pc/g,x13/5,pb/m,x1/14,pa/o,x11/0,s5,x15/10,s3,x8/4,pd/n,x10/5,pe/b,x8/13,s15,x7/5,pa/g,x4/1,s7,x11/6,pb/f,x9/2,pp/d,x10/8,pf/h,x12/3,pc/g,x0/13,s13,x9/1,s13,x10/0,pk/b,s5,x5/4,pd/p,x8/11,s15,x15/4,pg/b,x5/10,pc/f,x9/12,ph/k,x0/10,s10,x6/3,s3,x7/11,pb/l,x15/12,pj/n,x13/5,s14,x12/11,pd/l,x9/6,pf/b,x4/2,s8,x8/9,s13,x6/10,pa/g,x9/0,s4,x4/2,s13,x7/8,s8,x12/11,pb/f,x4/15,po/j,x12/7,s4,x9/4,pe/a,x6/13,s2,x7/4,s14,x5/15,s13,x6/12,s4,x11/5,s13,x8/1,pm/c,x5/10,pb/h,s3,x11/13,s10,x3/9,pm/p,x2/15,pe/h,s13,x8/5,s1,x9/7,s4,x3/4,pa/j,x6/0,pg/e,s14,x1/10,pf/n,x15/12,s15,x3/8,po/k,x0/2,s2,x3/1,s2,x12/6,pe/g,s7,x9/10,pj/i,s1,x6/8,s7,x14/13,s7,x5/3,pg/a,x11/0,s13,x3/14,pe/f,x15/2,s14,pm/k,x12/9,s1,pp/n,x6/15,s9,x12/2,s2,x14/0,s15,x10/5,s13,x15/13,pd/g,x4/6,s8,x3/14,pe/p,x9/1,s15,x15/11,s5,x14/12,s4,x5/7,pg/c,s10,x9/12,s8,x5/1,s10,x4/0,s6,x5/11,s9,x14/1,s1,x12/7,s2,x2/10,s14,x7/12,s8,x13/14,s6,x2/0,pm/k,x8/9,s9,x4/5,s4,x2/7,pc/h,x11/6,pm/b,x2/14,s14,x13/7,s14,x2/3,pe/d,s13,x4/15,s15,x13/10,pp/b,x11/6,pf/o,x13/0,pj/e,x3/10,s13,x6/2,s10,x13/10,pb/d,x11/6,s15,x4/2,pi/g,x11/7,s3,x15/4,pj/e,s11,x8/12,po/c,x7/5,s13,x13/10,s6,x6/8,s12,x5/11,s5,x7/9,s13,x6/3,s14,x11/10,pa/p,x9/1,pn/m,x6/4,pd/a,x7/14,po/j,x10/2,s9,x8/12,pm/e,s3,x5/10,s13,x12/7,s9,x13/1,s3,x9/6,s4,x14/2,s6,x0/1,s13,x10/9,s11,x14/5,pf/a,x15/9,ph/j,x8/0,s14,x10/15,s14,x5/1,pb/o,x8/0,s10,x14/10,s7,x11/9,s7,x10/4,pj/e,x2/0,pn/o,x8/12,s4,pa/d,s11,x6/15,s3,x10/0,po/h,x11/1,s9,x6/3,pk/i,x9/5,s11,x13/12,s9,pl/f,x0/6,s14,x9/5,s13,x1/7,s12,x14/13,pc/e,x9/6,s11,po/a,x4/1,pd/p,s7,x2/13,pk/o,x4/0,pb/c,x15/9,pg/j,x0/8,s2,x7/11,pc/n,x2/13,pb/i,x5/15,s1,x2/10,s3,x14/13,pd/a,x5/3,pe/n,x1/0,s2,pk/g,x13/6,pl/a,s4,x0/10,s12,x6/11,pi/n,x0/5,pb/d,x2/7,s5,x11/9,s8,x12/7,s11,pn/c,x11/1,s4,ph/g,x7/15,s11,pl/k,x9/0,po/p,x7/5,pm/j,s3,x11/0,s15,x1/9,s1,x11/10,pg/p,x8/6,pc/l,x14/2,pe/h,x9/0,s3,x3/12,s5,pf/l,x4/0,s14,x11/1,s9,x9/5,ph/d,x2/11,pm/e,x12/0,s15,x11/10,ph/f,s9,x2/4,s10,x11/13,s6,x1/15,po/d,x11/9,pc/p,x1/12,s6,x15/11,s6,pn/e,x1/4,s6,po/k,s10,x2/0,pl/m,x13/9,pp/n,x6/8,pk/c,x10/4,pa/d,x9/7,pe/f,x5/14,s8,x10/1,pm/g,x3/6,pk/b,x11/9,pl/g,x14/4,pi/h,s11,x3/2,s2,x1/13,pc/p,x9/14,s6,x8/6,s14,x5/13,s9,pi/k,x1/11,s7,x0/4,s11,x5/11,s4,x12/0,s7,x1/2,pl/o,x12/10,s10,pc/e,x1/11,s1,po/n,x2/4,s3,x7/6,pk/p,x5/4,pc/e,x7/9,pm/b,s7,x1/6,s8,pj/a,s6,x12/11,pk/h,x10/6,s4,x11/1,s13,x3/4,s5,x10/9,s15,x2/3,pi/p,x12/7,s2,x6/1,s13,x10/15,ph/d,x1/11,pn/p,x9/8,pf/o,x15/6,s11,x13/12,pe/j,x15/11,s4,x14/13,s3,pb/i,s7,x0/1,po/l,x4/5,s3,x2/3,pi/c,x15/7,s5,x2/9,s3,x14/15,s3,x3/11,s1,x13/2,s14,x8/9,pp/o,s12,x2/5,s13,x3/14,s13,x11/9,s14,x0/4,pl/f,x9/12,s1,x0/3,s11,x4/2,pp/i,x8/10,po/c,x6/0,s5,x11/7,s8,x5/8,s5,x3/4,s4,x1/12,s14,x11/14,s2,x9/3,s11,x5/10,pg/f,x14/7,s8,x3/0,pi/h,x9/4,s7,x3/5,pm/f,x2/9,s3,x0/14,s11,x12/7,s8,pb/l,x6/5,pp/j,x12/10,s5,x15/11,pl/d,x7/4,s10,x14/9,s5,x0/6,s9,x7/9,s8,x3/14,s15,x15/13,s12,x10/1,pp/e,x9/2,s13,x3/8,ph/a,x14/7,s1,x9/11,pb/c,x5/1,s1,x15/7,s9,x11/2,s3,x6/3,s15,pl/k,x1/9,s14,x5/15,pn/h,x12/2,pp/c,x13/9,pd/m,x5/0,pa/f,x13/11,s6,x10/3,pd/o,x1/15,s10,x10/3,s7,x13/4,pg/e,s15,x14/2,pi/l,x7/8,s4,x15/3,s14,x0/8,s15,x14/2,ph/g,x13/6,pi/n,x10/1,pe/b,x5/6,s7,x11/12,s8,x6/2,s1,x13/9,s10,x15/3,s7,x14/8,s4,pg/n,x1/9,s13,x12/3,s6,pa/h,x14/9,s1,x2/3,pc/m,x7/6,pa/k,x14/15,pj/g,x11/8,pe/i,x14/1,s4,x15/13,s15,x11/7,pl/k,x8/4,pn/f,x12/6,s7,x4/1,s8,x11/2,s4,x9/0,pd/b,x8/2,s3,x4/7,pi/a,x1/2,s1,x10/3,s7,x6/11,pk/l,x3/0,s3,x11/7,s7,x4/15,pn/d,x0/9,s11,po/b,x14/3,s3,pa/i,x11/2,s4,x9/3,pm/d,x1/14,pb/p,x13/0,po/m,x14/4,pg/b,x5/13,pf/h,x9/10,pn/p,x7/11,s10,x6/5,pk/h,x15/10,s12,x12/1,s6,x11/4,s11,x5/2,s6,x13/15,s14,x10/12,s4,x1/15,s7,x8/2,s15,x12/4,pc/p,x1/6,s13,x8/2,pi/d,x5/0,pj/e,s13,x2/3,s11,x1/14,pm/n,x2/9,s11,x13/15,s10,x7/5,s4,x6/2,pd/o,x12/11,pi/n,s9,x2/3,pl/d,x12/6,s14,x2/14,pa/n,x7/13,ph/l,x3/8,pd/b,x7/15,pf/g,x3/13,pb/j,x0/2,pi/d,x12/7,s11,x1/11,s13,x5/14,s4,x3/11,s13,x4/1,s12,x11/9,s7,x8/12,s3,x13/4,s8,x5/3,pp/m,x0/11,s4,ph/l,s7,x9/15,pc/p,x4/1,pa/k,s4,x15/6,pj/d,x4/11,s14,x14/12,po/g,x9/1,s2,x11/14,s7,x10/4,pn/a,x8/13,ph/p,x6/12,s13,x3/0,s15,pb/d,x11/15,s1,x13/3,s1,pa/e,s7,x12/9,po/c,x3/2,pg/k,x7/1,s2,x13/10,pc/b,x5/12,s8,x10/14,pd/h,x7/6,pl/p,x0/1,s12,x10/4,s8,x1/15,s2,x12/6,s12,x13/14,s6,x11/7,pn/g,x9/10,s10,x2/8,s11,x5/9,s13,pe/c,x13/11,s12,x4/15,s5,x2/13,s4,x10/12,s10,x1/6,po/h,x13/15,pk/i,s9,x3/5,s4,x6/8,s15,x2/9,s11,x14/15,pd/a,x4/5,pl/f,x15/0,pd/g,x13/5,s4,x10/2,pi/h,x7/4,s14,x0/10,pj/c,s11,x4/12,s2,x14/13,s15,x5/10,pl/h,x11/9,pe/n,x15/5,s12,x6/7,s13,x0/9,s15,x7/1,s10,pk/b,x0/9,pj/n,x15/5,po/b,x0/13,s14,x5/4,s10,x0/11,s12,x5/8,ph/j,s13,x0/15,pk/g,x2/9,ph/a,x15/6,s7,x3/7,s14,x1/8,pb/g,s10,x11/15,s9,x9/8,s5,x11/5,pk/p,x7/14,s5,x2/8,s13,x13/3,s15,x1/12,s3,x14/13,s8,x3/7,po/l,s12,x2/4,pp/n,s9,x13/6,s15,x10/3,s6,x8/7,pa/o,x15/0,pp/m,x2/4,pk/l,x6/0,s9,po/i,s11,x13/10,s1,x11/0,ph/e,s14,x8/10,pa/i,x13/4,s4,x3/7,s5,x5/9,pe/j,x1/8,pn/p,x13/9,pj/h,x12/15,s11,x0/11,s12,x13/9,s11,x4/11,pf/i,s9,x9/10,s7,x1/11,s12,x0/4,pp/o,s1,x5/10,s12,x9/12,s15,pg/j,s10,x0/4,s9,x3/13,pa/i,s12,x0/4,pd/n,x5/1,pj/m,x15/11,s15,x9/3,pd/k,s4,x11/15,s6,x4/9,s13,x7/14,pm/g,x3/8,s15,x4/13,s3,x10/14,s12,x12/15,pj/o,x4/14,pl/d,x10/12,s12,x15/5,pb/e,x10/11,s2,x15/13,s2,x0/3,s13,x8/12,s3,x9/6,s13,x0/15,s1,x13/5,pi/j,x0/14,s15,x1/13,s3,pc/m,x5/11,s15,x10/7,s4,x11/13,pk/p,x3/4,s2,x6/7,pf/b,x0/3,pl/j,x11/1,pg/b,s7,x15/10,s6,x1/12,s8,x9/3,pj/a,x13/11,s2,x9/3,s6,x5/7,pd/e,x6/8,s15,x3/0,s12,x4/2,pg/j,s7,pe/b,x12/0,pj/h,s5,x2/9,s12,x15/6,pm/b,x11/4,s10,x2/8,s8,x9/3,s7,x11/5,pk/c,x6/3,s12,x10/0,s14,x15/5,pi/b,s11,x3/4,s2,x13/14,s11,x6/12,s15,x2/5,pp/d,x4/7,s15,x14/8,s1,x3/12,s11,x0/14,s13,x12/5,pj/i,x2/15,pa/f,x9/8,s1,x14/10,s4,x1/2,pc/l,x14/9,s8,x7/10,s5,x1/3,pk/g,x9/14,s12,x11/7,s5,x10/8,s15,x15/9,ph/l,x2/1,s14,x11/4,s10,x6/5,s14,x7/14,s3,pf/b,x4/15,pd/k,x13/1,s6,x6/9,s4,x12/15,s6,x1/13,s4,x11/2,pf/h,x4/12,s4,x9/10,s2,pn/l,x1/8,s10,x9/15,s8,x2/6,pi/g,x4/13,s7,x15/0,pn/j,x7/13,s2,x0/11,s6,x9/4,po/i,x13/10,s5,x3/0,s10,x8/7,s8,x0/12,s13,x4/3,s1,x2/5,s3,x8/15,s8,x0/10,pe/k,s7,x8/15,s6,pd/p,x3/6,s5,x15/1,ph/o,x10/0,pc/l,x15/14,s8,x6/12,s6,x15/5,pi/e,x1/11,s6,x3/5,s5,x2/11,s3,pl/k,x15/1,s14,x3/12,s1,x5/0,pn/h,x8/7,pd/p,s12,x5/15,pm/j,x4/6,s11,x10/9,pk/a,s4,x13/0,s12,x6/5,s5,x14/8,s11,x15/7,s2,x14/4,s11,pd/h,x11/15,s3,x2/1,pc/o,x0/8,s15,x15/3,pl/m,x7/6,pi/j,x4/14,s2,pg/d,s13,x13/3,s11,x5/10,pc/b,x2/8,s13,x14/1,pj/d,x11/8,po/i,x3/13,s1,x1/11,s10,x7/0,pg/p,x3/13,pa/c,x4/6,s7,x0/9,ph/p,x14/15,s7,x0/5,s5,x13/7,s3,x5/0,pd/l,s4,x1/13,s10,pn/b,x6/15,s1,x3/11,s8,x8/9,pc/e,s5,x12/11,s4,x14/13,pj/d,x9/0,s5,x13/11,pm/c,x3/0,s9,x2/1,pb/k,x14/7,s4,x8/4,s2,pj/l,x9/13,s12,x0/12,po/e,x6/5,pb/n,x12/11,s2,x4/3,s7,x6/12,pm/g,x3/15,s4,x2/9,pj/h,x13/7,s14,x4/10,s2,x11/12,pe/n,x14/10,s2,pl/c,s1,x2/8,s9,x0/9,s7,x13/6,s13,x7/11,ph/k,x15/1,pn/a,x12/3,s13,x10/11,s10,x8/15,pd/o,x3/11,pf/g,x7/12,pn/b,x14/13,po/f,x10/8,s5,x11/15,s2,x6/10,s15,x14/0,s4,x5/15,pm/k,x0/11,pl/j,x10/4,pn/f,s3,pj/m,x14/2,s5,x10/13,s9,x15/14,s13,x2/8,s4,x1/15,pl/k,x9/6,s5,x14/7,s1,x13/1,pi/a,x10/11,s4,pb/g,x1/0,pm/j,x6/12,s12,x2/3,s12,x0/12,s11,x10/5,pd/f,x15/4,s7,x2/0,s4,x6/5,s8,x10/8,s5,x3/12,pj/h,x2/11,s14,x6/1,s6,x8/12,po/a,s6,x2/5,s14,x13/7,pi/j,x15/6,pa/o,x0/1,pb/n,x9/2,pd/j,x12/13,s5,x4/14,s12,ph/f,x1/12,pm/d,x11/10,pn/i,x12/9,s8,x13/15,po/b,x11/12,s11,pj/p,x9/4,s3,x14/1,pk/c,x7/6,s8,x11/0,s1,po/i,x1/15,s6,pc/l,x11/9,s7,x15/2,s14,pi/p,s10,x9/4,s10,x7/12,pn/c,x11/4,s14,x9/3,pm/j,x8/6,pd/l,x3/9,ph/a,x2/15,s3,x5/9,s15,x4/1,pn/f,x10/11,ph/i,x5/0,pa/l,x15/9,s1,x2/8,s3,x1/14,s13,x10/4,s11,x3/0,pb/k,s5,x12/11,po/a,x3/4,s9,x8/14,s5,x9/12,s6,x3/5,s14,pl/k,s4,x6/9,pf/m,x10/14,s2,x2/9,pb/d,x11/4,pf/e,x5/1,s12,x9/12,s3,x0/6,po/c,x1/3,s14,x13/14,s12,x12/15,pi/n,x10/8,s11,pk/f,x7/1,s14,x6/2,s12,x12/13,s6,x6/8,s4,x10/14,pm/d,x11/9,s9,pp/f,x14/3,pe/c,x2/10,s15,x0/7,s11,x5/1,pa/j,x3/8,s2,x6/4,s5,pl/b,x2/15,s5,x3/11,ph/a,x9/12,s8,pd/m,x5/1,s13,x2/13,pb/j,x14/12,pm/a,x3/9,pe/o,s15,ph/p,s8,x2/4,s14,x13/8,pd/b,s5,x10/3,pn/p,x9/15,pl/m,x6/8,pi/k,x3/9,pm/c,x0/13,ph/i,x1/7,pn/k,s12,x9/10,pa/b,x15/8,s5,x2/13,s10,x6/0,s10,x8/2,s15,x12/7,s7,x13/6,s10,x0/4,s5,x2/5,pf/m,x1/7,s1,x8/6,s10,x2/1,pj/b,x13/14,pa/c,x7/3,pm/j,x2/14,s7,x3/8,s12,x14/12,pl/f,x10/6,s14,x14/7,s14,x12/4,s13,x7/13,s14,x0/15,s4,pc/d,x13/11,pn/l,x1/6,s8,x3/7,pc/d,s13,x1/11,s14,x0/9,pl/e,x8/7,pa/m,x6/11,s13,x13/1,s8,pl/g,x4/7,s5,x0/3,s5,x9/1,s4,pc/b,x4/11,pn/j,x7/14,s3,x15/5,s15,x13/12,s9,x9/4,s3,x8/5,s1,x7/4,pi/l,x14/9,pp/c,x8/6,pl/g,x4/12,s7,x5/15,s7,x2/7,pc/m,x12/14,s12,x1/13,s12,x7/8,s10,x3/4,pb/a,x7/8,s7,x2/6,s15,x10/3,s6,x7/15,s8,x10/3,s11,x6/11,s14,x8/9,pk/g,x7/12,pc/a,x11/15,pn/e,x2/10,s12,x5/14,s5,x9/10,s2,x13/3,ph/m,x1/6,pl/d,x13/15,s7,x12/6,pm/o,x11/13,s10,x2/6,pn/c,x8/10,s10,pp/f,x2/0,pb/j,x8/11,pe/p,s12,x10/6,po/f,x11/0,pd/p,s13,x15/9,s15,x1/2,s8,x6/5,po/n,x7/10,s2,x14/5,s10,x1/6,pp/e,x0/11,ph/j,x1/4,s2,x15/7,pb/p,x2/9,s12,x14/10,s5,x6/9,s11,x3/11,s2,x1/5,pd/g,x14/7,s8,x11/0,s12,x12/2,s10,x11/4,pp/b,x12/0,s1,x9/13,pi/a,x15/3,ph/b,x1/4,pd/e,x0/11,pa/n,x15/10,s7,x4/3,pd/e,x15/11,pf/m,x10/7,s10,x0/1,s8,x15/7,s8,x11/6,s6,x3/7,ph/c,x14/1,s9,pm/d,x5/8,pg/b,x2/7,pf/d,s2,x14/10,s2,x15/3,pj/e,x0/5,s7,x3/1,pp/f,x11/6,pd/h,s4,x0/4,pk/o,x6/10,s9,x15/3,s11,x12/5,pl/c,s10,x9/10,pn/f,x8/1,s1,x6/12,s6,x15/2,pp/d,x14/4,s11,x12/6,po/a,x2/10,s4,x8/15,pc/n,x5/11,s6,pi/d,x3/6,s2,x5/12,s3,x3/14,s4,x11/2,s4,x15/6,pl/p,s6,x5/9,s14,x11/0,s15,x4/9,pa/i,x10/15,pb/p,s3,x2/9,pd/f,x10/3,s14,x11/14,s13,x9/10,s5,x7/12,s9,x15/8,s15,x0/3,ph/m,s3,x4/2,pa/c,s13,x12/13,pj/m,x1/2,s8,x7/12,s2,x2/4,po/h,x12/5,pf/c,s10,x6/8,s8,x5/14,s4,x11/4,s11,x10/12,s5,x2/9,s11,x4/14,pj/i,x2/9,s2,x13/12,s11,x5/2,s8,x11/12,s4,x10/7,s14,x5/6,s5,x3/1,s12,x6/10,pg/b,x12/11,pj/f,x3/15,pm/i,x5/9,ph/b,s4,x15/2,po/e,x6/0,s2,x1/8,s14,x13/12,pc/j,x1/6,s3,pn/d,x13/14,s9,x4/11,s4,x7/1,s10,pe/o,x13/10,s11,x8/2,s3,x0/3,s1,x13/1,s11,x2/11,s1,x3/12,s1,x8/2,s8,pk/m,x0/10,pn/i,x8/7,pl/e,x11/14,s11,x3/8,s9,x15/12,pf/b,x4/0,pe/l,x12/8,pm/c,x5/2,pg/o,x14/3,s8,pl/f,s6,x10/0,s12,x2/5,s7,x10/8,ph/o,x3/15,pb/d,x6/12,s3,x2/10,pk/j,s1,pd/b,x6/1,pf/a,x12/10,s3,x0/6,s11,x11/9,s15,x8/12,pc/n,x15/13,s11,x12/11,s6,pp/l,x1/10,s12,pj/c,x6/0,s5,x13/12,s6,x10/14,s10,x5/1,po/n,x0/14,s9,x15/8,pi/e,x13/7,s3,x6/5,po/a,x2/7,s5,x12/14,pb/p,x13/0,pg/i,x9/6,s6,x12/13,s5,pa/j,x10/14,s8,x11/5,s15,x13/9,pf/l,x8/2,pj/c,s6,x5/0,s8,x12/1,pi/o,x14/3,s14,x1/5,s12,x15/4,s12,x7/6,s6,x12/15,s11,x10/13,s9,x3/6,s4,x15/9,s4,pc/b,x4/6,s6,x11/10,s7,x7/0,s9,x10/11,s9,x9/7,s12,x11/14,s13,x9/2,s12,x13/15,pk/p,x7/5,pc/d,x0/2,s9,x1/8,s12,x15/6,s3,x2/7,s3,x3/10,s5,x13/9,s14,x8/3,s12,x9/13,s5,x6/15,pb/n,x0/2,s10,x12/15,pm/e,x13/3,s7,x7/12,pl/k,x11/4,pm/f,x7/9,s2,x14/15,pp/e,x12/5,ph/f,x13/7,pl/k,x6/5,pc/f,s4,x9/15,s5,x14/10,s2,x4/8,pa/j,x7/0,s6,x6/2,s10,x11/14,s5,x0/10,s15,x2/6,pl/p,x0/4,s1,x8/15,s13,x14/3,pj/m,x9/11,pa/e,x14/6,s10,x9/8,pl/f,x14/10,s9,x2/9,s5,x15/10,pb/e,x13/5,s11,x7/6,s8,x5/14,s3,x12/9,s8,x5/0,ph/k,x1/3,s1,x10/13,s12,x3/15,s5,x11/9,pi/p,x7/8,s9,pn/l,x12/11,pe/p,x3/6,po/l,x9/8,s13,x11/14,pi/n,x0/15,pm/k,x10/8,s9,x12/2,s13,x10/4,s5,x3/6,pp/a,x10/11,s9,x0/3,s9,x9/13,s10,x6/14,pk/g,s15,x2/0,s8,x6/5,pp/j,x0/8,pd/o,x12/13,s7,x15/14,s6,x12/11,pc/i,x3/15,s6,x1/6,pe/l,x13/15,pc/f,x6/10,s6,x12/0,s1,x14/5,pk/g,s5,x8/0,s1,x12/4,s11,pj/p,x9/1,s11,x0/12,s14,pb/k,x6/10,s14,x1/2,po/l,x7/3,pn/h,x12/10,s8,x0/11,s11,x5/8,s7,pp/f,x11/7,s7,x6/14,s1,x9/1,s12,x12/0,pe/j,x9/2,s8,x5/14,pl/o,x15/4,pk/b,x0/3,s11,x8/1,pe/o,x3/5,pp/f,x13/10,s12,x1/15,s3,x7/6,po/k,x8/11,pp/b,x5/13,s9,x9/2,s12,x0/6,s5,x10/3,s10,x5/13,pj/k,x1/12,s8,x8/9,pb/d,s7,x13/10,s1,x9/7,s3,pa/g,x1/12,s10,x2/0,pk/h,x12/4,s11,pb/e,x5/6,s5,x9/13,pj/h,x1/4,s1,x6/9,pi/n,x14/15,s10,x8/3,s7,x0/10,s6,x11/12,s2,pf/h,x7/13,s9,x15/8,s11,x10/4,pb/p,x8/0,s6,x9/11,po/k,x4/10,ph/j,s4,x6/5,pc/n,x13/2,s1,x0/12,s12,x4/8,pa/l,x7/11,pd/h,x13/10,s5,x1/4,s3,x3/0,pg/e,x10/15,s13,x12/14,pd/i,x11/7,pe/h,x0/15,s12,x10/6,s9,x8/3,s12,pc/d,x14/1,pj/p,x8/0,s6,x5/2,s11,x13/4,pi/o,x1/8,s3,x3/15,pd/f,s12,pj/e,x1/5,pp/b,x8/9,s15,x0/5,pg/c,s2,x15/6,pn/k,s7,x11/5,s3,x0/8,pm/p,x15/10,s7,x8/4,s4,x9/15,s3,x0/11,s12,x9/8,s2,x0/15,pc/k,x12/2,s15,x15/8,s1,x10/4,s15,x6/12,pd/n,x4/7,pl/k,x11/5,s3,pc/m,s10,x6/15,s2,x5/10,s1,x7/1,s5,x4/5,pg/e,x10/8,s13,x3/4,s11,x15/7,pm/b,x10/13,pi/a,x5/9,pd/n,s3,x15/11,s7,x3/14,pc/p,x11/15,s14,x4/2,pj/o,x5/14,pb/g,x12/11,s7,x6/0,s10,pm/d,s7,x15/3,s9,x7/2,s6,x14/9,pp/k,x10/5,s4,x3/7,s5,x11/12,s4,x0/5,pg/f,x9/2,s2,x11/6,pb/i,x15/0,pm/h,x11/3,s1,x14/4,pg/d,x7/13,s15,x15/1,s13,x9/14,pa/j,x12/7,pe/o,x13/2,s12,x14/0,pd/a,x5/1,s7,x12/2,s7,pi/l,x10/4,pn/g,x14/3,s7,x2/9,pi/e,x1/11,pf/l,x15/12,s7,x8/2,pi/k,x10/14,s13,x0/2,ph/c,x9/15,pd/e,x4/8,s5,ph/m,x15/7,s8,x11/13,s4,x8/9,s13,x1/12,pj/d,x6/3,pl/k,x5/4,s2,x8/13,s3,x6/15,s4,x4/13,s15,x10/6,pf/a,x0/3,s6,po/e,x7/4,s7,x8/5,pb/d,x15/4,ph/o,x8/1,s9,x9/0,s11,x4/5,pl/f,x7/3,pm/d,x12/2,s12,x4/0,s6,x5/14,s5,x11/12,pe/k,x7/6,s4,x2/10,pj/d,x1/7,s4,x9/14,s1,pl/k,s8,pa/g,x3/2,s8,x5/6,s2,pf/k,x10/13,pn/m,x1/15,s6,x13/0,s5,x11/5,s15,x1/9,s1,x13/3,s15,x8/11,pd/a,x10/15,s8,x4/5,s1,x1/9,s5,pg/f,x12/11,s12,x14/7,ph/k,x15/4,pm/p,s2,x13/0,pl/o,x2/10,s3,x11/14,pi/j,s9,x4/7,pn/p,x12/6,s13,x7/4,s1,x9/8,s13,pk/e,x13/2,pf/l,s11,x9/0,pm/h,x1/3,pl/a,x11/4,s1,x0/9,pf/d,s5,x10/2,s5,pm/j,x11/14,s10,x10/3,pd/h,x9/13,s12,x5/14,s10,x6/7,pm/k,s3,x2/9,s8,x11/6,s15,x14/5,pa/l,x7/13,s9,x2/11,pj/p,x3/13,s10,pc/m,s2,ph/j,x10/4,pl/m,x11/1,s15,x14/13,s8,x7/12,s13,x0/13,s5,x5/9,s14,x0/8,s6,x11/13,pk/a,x0/4,s10,x11/7,pm/d,x2/5,pl/n,x11/7,pk/c,x14/8,s11,x2/0,s11,x13/6,s8,x11/12,s14,x10/1,pn/l,x12/5,ph/m,x6/10,pi/a,x13/8,pl/c,x2/3,pg/e,x10/8,s7,x3/5,s2,x0/8,po/k,x14/3,pl/f,x4/10,pe/i,x6/8,pp/l,x11/9,pc/f,s8,x4/7,s1,pn/l,x8/15,pa/p,x11/12,s3,po/i,s1,x14/7,pj/f,x5/3,s12,pi/d,s15,x4/7,s3,x14/15,s8,x6/3,s11,x13/10,s14,x9/3,s1,x5/7,s7,x10/3,pb/l,x9/13,pc/n,x14/0,pd/h,x10/2,s8,x7/0,s10,x14/1,s10,x6/9,s15,x1/14,s14,x12/5,s13,x13/3,s10,x10/14,s8,x9/12,pa/o,x0/11,pg/c,x1/8,pj/m,s12,pd/c,x5/11,s8,x3/0,po/l,x15/5,pp/d diff --git a/2017/d16/ex2/ex2.py b/2017/d16/ex2/ex2.py new file mode 100755 index 0000000..d65972d --- /dev/null +++ b/2017/d16/ex2/ex2.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python + +import sys +from typing import NamedTuple + + +class Spin(NamedTuple): + n: int + + +class Exchange(NamedTuple): + a: int + b: int + + +class Partner(NamedTuple): + a: str + b: str + + +Move = Spin | Exchange | Partner + +Programs = tuple[str, ...] + + +def solve(input: str) -> str: + def parse_move(input: str) -> Move: + if input[0] == "s": + return Spin(int(input[1:])) + if input[0] == "x": + return Exchange(*map(int, input[1:].split("/"))) + if input[0] == "p": + return Partner(*input[1:].split("/")) + assert False # Sanity check + + def parse(input: str) -> list[Move]: + return [parse_move(move) for move in input.strip().split(",")] + + def apply_move(programs: Programs, move: Move) -> Programs: + match move: + case Spin(n): + return programs[-n:] + programs[:-n] + case Exchange(a, b): + tmp = list(programs) + tmp[a], tmp[b] = tmp[b], tmp[a] + return tuple(tmp) + case Partner(a, b): + ia, ib = programs.index(a), programs.index(b) + tmp = list(programs) + tmp[ia], tmp[ib] = tmp[ib], tmp[ia] + return tuple(tmp) + + def do_dance(programs: Programs, moves: list[Move]) -> Programs: + t = 0 + cache = {(programs, 0): 0} + TOTAL_MOVES = 1000000000 * len(moves) + while t < TOTAL_MOVES: + programs = apply_move(programs, moves[t % len(moves)]) + t += 1 + key = (programs, t % len(moves)) + if (previous_t := cache.get(key)) is not None: + cycle_length = t - previous_t + num_cycles = (TOTAL_MOVES - t) // cycle_length + t += num_cycles * cycle_length + else: + cache[key] = t + + return programs + + moves = parse(input) + programs = tuple(chr(ord("a") + i) for i in range(16)) + programs = do_dance(programs, moves) + return "".join(programs) + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d16/ex2/input b/2017/d16/ex2/input new file mode 100644 index 0000000..205f5dc --- /dev/null +++ b/2017/d16/ex2/input @@ -0,0 +1 @@ +x6/12,s14,x14/1,s5,x12/7,pn/i,x10/11,ph/p,x7/4,s7,x3/11,s4,pf/d,x13/12,s14,x1/8,pc/p,x13/0,s5,x1/6,s11,x4/8,s8,x6/12,s10,x3/4,pf/h,x14/11,pe/k,x10/13,s13,x11/5,pl/j,x15/13,pp/a,x14/2,pn/g,x5/0,pe/m,x13/8,s6,x5/3,ph/k,x1/4,s5,x5/15,s3,x11/14,s12,x9/3,po/f,x11/0,pj/k,x12/5,s14,x9/3,s1,x8/6,s10,x9/2,s11,x11/13,pp/d,x4/0,s2,x7/9,s1,x6/15,pk/h,x3/1,s10,x5/11,s14,x14/13,s2,pe/b,x1/12,pn/g,x4/3,pj/a,x10/2,s3,x8/9,pk/b,x3/2,s9,x15/11,pe/g,x3/9,pn/i,x4/10,pb/g,s15,x0/6,pa/e,x7/14,s3,x3/10,pp/f,s13,x4/9,pl/n,x5/8,s7,x9/15,s14,x6/14,pg/j,x13/15,po/m,x2/5,s8,x14/3,s15,x5/2,pe/l,s13,x12/11,pj/i,x2/6,pm/p,x5/13,s3,x9/6,pn/h,x3/12,s14,x10/8,po/g,x1/13,s15,x5/0,pj/c,x7/2,s9,x5/14,pl/o,x11/2,pi/h,x3/4,po/p,s2,pf/c,x6/8,pi/e,s9,x0/15,s3,x10/1,s12,x6/3,s7,x8/4,pp/g,x9/6,s6,x11/0,pi/h,x2/12,s10,x4/11,s12,x12/7,s8,x11/8,s8,x5/15,s13,x0/14,pc/b,x1/9,pd/a,x13/15,s13,pn/l,x1/3,s12,x4/11,pd/h,x6/9,po/e,x1/14,pg/k,x8/6,s1,x10/0,s9,x2/8,pd/l,x15/4,s8,x9/1,s11,x15/3,s7,x12/2,s8,x3/1,s12,x9/5,s11,x3/7,s4,x8/13,pf/i,x11/9,s4,x5/0,s6,x8/12,pk/n,x7/14,s10,x2/5,pl/c,x1/13,pa/d,x11/0,s9,x6/3,pn/c,x2/5,s14,x15/10,s4,x9/2,pi/a,x15/10,pc/o,x0/9,pe/j,x8/3,po/l,x9/0,s10,x5/2,s12,x6/11,s6,x12/8,s6,x4/15,pp/j,x3/10,s13,x15/11,pg/f,x3/14,s10,x7/9,s7,x2/5,s2,x0/7,pl/m,x3/8,s14,x14/0,s1,x4/10,s12,x15/8,s15,x2/6,pc/a,s12,x15/5,ph/b,x6/12,s1,x11/8,s15,x10/13,po/a,s13,x5/14,pi/e,x4/12,s13,x7/9,s15,x15/8,s4,x3/7,pb/c,x13/5,s11,x12/1,s13,x14/6,s15,x1/2,s9,x10/11,pp/f,x14/5,pb/d,x10/8,s4,pl/k,x5/11,pn/d,x8/15,s1,x2/4,s4,x12/8,s11,x2/10,pb/m,x8/15,ph/i,x7/6,s3,x2/12,s3,pg/n,x8/9,pe/j,x4/11,s13,x13/5,s13,x9/10,pi/n,x5/3,s11,x12/0,s4,x4/6,s12,x14/2,s15,x0/4,s2,x5/15,s6,po/l,x8/11,s4,x14/6,pg/f,x3/4,pb/j,x15/8,pe/i,x12/6,pb/h,s12,x1/8,pg/j,x11/15,pf/i,x6/2,s6,x15/3,pk/g,x14/4,s8,x8/10,s9,pj/n,x1/6,s15,x7/0,pb/h,x2/11,pm/d,s3,x6/8,s9,x2/14,s12,x7/12,pb/g,x11/5,s10,x4/2,s12,x9/13,pn/d,s3,x2/12,po/h,x5/8,s2,x13/9,s15,x4/7,s9,x14/0,s13,pj/g,x3/2,s13,x12/14,s5,x0/5,s14,pl/p,x1/6,s2,x3/12,pi/b,s11,x6/5,pj/a,x14/7,s14,x3/12,s6,x10/7,po/k,x8/1,s13,x3/5,pe/f,x13/12,s12,x8/3,pj/n,x12/13,pm/f,s3,x8/14,po/e,x4/5,pk/l,s12,x2/3,s13,x10/15,s4,x4/12,pg/b,x9/14,pa/e,x13/4,s5,pb/p,x6/11,s1,x2/7,s11,x6/4,s3,x5/1,pi/d,x4/15,pc/e,s5,x8/1,s5,x7/0,s11,x4/15,pl/m,x8/14,pe/g,s13,pm/c,x4/0,pp/l,x9/15,pn/e,x4/8,s8,x7/15,s4,x4/8,s14,x9/0,s7,x14/2,s10,x1/11,s2,x5/0,pp/c,x3/1,s14,x4/2,po/b,s10,x15/9,s4,x0/6,s4,x12/14,s6,pe/n,x7/9,pj/a,x4/11,pn/c,x8/0,pb/f,x10/2,s15,x4/5,s3,x7/14,pg/h,x6/8,pd/i,x10/3,pc/a,x5/14,ph/n,x11/8,s6,x6/7,s6,x2/5,s12,x6/14,pi/p,x8/10,s11,x2/7,s13,x10/8,pd/g,x11/2,s7,x4/15,s2,x3/12,s4,x7/13,s6,x3/15,s8,pa/i,x14/13,pj/e,x7/10,s4,x1/6,s3,ph/i,s13,x13/11,s2,x7/12,s4,x5/6,s14,x12/13,s8,pk/e,x14/7,s13,x5/10,s9,x4/12,s3,x10/11,ph/n,x0/12,pb/o,x9/14,s13,x6/4,ph/m,x0/1,pc/d,x3/6,po/h,x1/14,pe/k,x9/12,pf/n,s3,pp/e,s15,x5/10,pf/b,x0/1,s2,x11/15,pj/a,x0/6,s15,x9/4,s11,x3/11,pn/l,x4/14,pi/d,x13/7,pp/a,x2/9,pg/j,x15/1,pl/b,x14/5,pg/k,x10/6,pm/i,x4/11,ph/f,x12/0,s3,pn/o,s13,x4/15,pa/b,x13/10,pi/j,x4/15,s5,x12/13,s11,x2/5,s9,x8/9,s7,x5/14,s5,x0/15,s10,pb/h,x2/13,pn/a,x5/15,pf/g,s15,x4/12,pd/k,s9,x8/13,s3,x12/3,pa/b,s1,x14/2,s8,pm/d,x6/15,s5,x12/11,s7,x0/15,s1,x5/13,pg/b,x0/11,s13,x14/2,s8,x5/15,pc/l,x10/0,pf/i,x12/9,s8,pg/h,s8,x7/14,s5,x13/0,pj/d,x1/8,pb/c,x2/6,s10,pa/h,x1/14,pk/b,x2/8,s2,x0/10,po/i,s11,pp/b,x12/7,s4,x14/15,s5,x2/7,pf/k,x1/6,pl/g,x0/7,pp/e,x8/12,s1,x5/3,s9,x0/8,pg/d,x10/3,pk/b,x15/2,pf/h,x12/14,pl/n,x4/3,s7,x12/10,pg/f,x6/0,ph/o,x7/9,pm/p,x1/14,s14,x4/11,s9,x6/5,s14,x7/12,s8,x14/6,s12,x8/13,s5,x5/9,s9,x2/11,s5,x9/14,s8,x15/6,s11,x1/0,s11,x11/14,pc/o,x10/7,s2,x5/15,pi/l,x12/14,s5,x7/6,pa/f,x4/2,pk/e,x6/13,s5,x5/4,s13,x10/6,pc/l,x12/3,pf/h,x15/8,s13,x13/5,pd/m,x15/12,s7,pb/i,x7/13,s11,x10/4,po/g,x3/13,s14,x11/15,s8,x13/10,pc/p,x9/12,pn/e,x15/8,s14,x3/7,pc/k,x10/8,s4,x9/1,s4,x7/3,s11,x15/8,s2,x2/3,s4,x12/4,s2,x9/14,pp/i,x11/7,s15,pe/b,x2/5,s13,x1/0,pn/p,x6/12,s8,x15/10,pg/d,s10,x4/9,pb/e,s8,x3/1,s7,x4/6,s10,x15/12,pi/o,x10/9,s6,x7/15,s5,x5/4,pl/b,x14/0,s6,x7/6,s7,x12/8,pa/f,s13,x4/13,s14,x8/9,s3,x14/12,s6,x15/6,s13,x11/10,pl/o,x5/0,s1,x1/11,s13,pg/k,x13/5,s1,x6/1,pm/o,x4/2,s13,x1/15,s15,x10/8,ph/b,x6/2,pj/m,s15,x7/13,s5,x9/3,pn/f,x6/7,pl/e,x12/8,pa/p,x15/10,s4,x2/8,s9,x7/0,s1,x6/5,s3,x8/9,pc/g,x13/14,s7,x0/5,pd/n,x15/3,pj/c,x2/7,pi/p,x14/13,ph/m,x11/0,s15,x15/10,pk/p,x7/0,pf/b,x11/13,s11,x2/14,s10,x12/15,s5,x13/5,pg/j,x15/0,s1,pb/p,x11/3,pf/o,x6/2,s6,x5/1,s12,x2/15,pj/n,x13/1,s13,x9/11,s4,x5/12,s12,x6/2,ph/f,x4/3,pj/g,x2/12,pp/m,x9/13,s4,x11/3,s14,x14/6,s13,x5/9,s12,x3/8,pk/j,x4/1,pb/d,x7/5,s1,pa/c,x15/9,s6,x14/7,s2,x12/3,po/m,x15/1,pp/e,x2/3,pa/i,x6/4,s5,x13/15,s6,x6/5,pj/p,x4/12,s6,pg/o,x7/10,s8,x15/12,s10,x1/9,s11,x4/12,s10,x3/7,s4,x5/13,s14,pb/p,x7/3,s6,pf/a,x4/1,s5,x11/5,s4,x14/1,pm/n,x11/15,s3,x12/13,s12,x14/6,s2,x2/3,pj/c,x7/1,s3,x2/11,s15,x13/5,pk/m,x4/1,pc/e,x14/11,pk/l,x7/15,s6,x6/9,s6,x15/2,pj/n,x9/12,pp/g,x2/3,pm/c,x4/9,s6,x13/10,s3,x5/14,pf/a,s7,x4/2,ph/c,x7/6,s7,pg/b,x3/14,pi/j,x0/1,s3,x13/12,s5,x8/0,s2,x6/1,s12,x14/7,s11,po/c,s13,x5/9,pf/a,x12/2,s2,x3/11,s3,x2/1,pm/i,x12/4,s5,x13/10,s2,x4/1,pf/b,x9/8,s12,pm/a,x0/3,pj/f,x4/6,pb/d,x15/10,pe/g,x2/7,s4,x10/9,s4,x1/7,s1,x8/12,s5,x10/0,s9,x1/11,s9,x2/14,s12,x3/6,s3,x13/8,s6,pi/c,x6/2,pa/h,x5/8,s4,x4/1,s6,x6/8,pg/l,x10/4,ph/o,x12/8,s7,x13/10,pa/d,x0/3,pm/l,x1/15,s1,x9/10,s3,pp/g,x13/7,s3,x3/11,pk/h,x14/6,s14,x12/9,s12,x15/8,pl/p,x5/13,s6,pg/d,x6/14,pb/a,x4/13,s15,x12/3,s3,x1/0,s7,x5/4,s8,x3/7,s9,x2/6,po/c,x0/7,s11,x3/1,s2,x12/7,s6,x6/5,s12,x15/13,s14,x14/11,s8,x8/13,pp/g,x15/6,pk/d,x8/1,s9,x7/12,pe/c,x13/2,s9,x1/12,s8,x2/11,s1,x0/13,pl/a,x3/5,s9,x14/2,s12,x5/12,pn/k,x0/14,s3,x7/6,s9,pl/f,x10/2,pe/m,x4/14,s15,x0/3,s15,x15/10,s14,x6/7,pd/h,x13/2,s1,x0/11,s6,x14/6,pp/a,x4/11,s9,x2/14,s3,x9/8,s7,x7/5,pi/f,x10/9,s6,x15/11,pm/a,x13/14,s1,x3/6,s6,x1/9,s11,pp/i,x11/12,pd/n,x5/0,pk/l,x2/1,ph/p,s9,x13/8,s12,x1/9,s10,x11/10,s15,x8/3,s12,pj/f,x1/7,s11,x4/3,pp/g,s2,ph/n,x7/9,s9,x1/3,pg/k,x13/15,s7,x5/10,po/e,x9/12,s1,x8/11,ph/l,x13/4,s7,x15/10,s13,x9/8,pp/k,x4/2,s6,x9/10,s9,pa/g,s9,x1/7,s9,x9/10,s4,x3/4,s10,po/f,x5/2,s10,x14/15,pc/h,x5/0,s14,x3/7,pi/a,s11,x15/9,s6,x12/2,po/l,s11,x10/4,ph/p,x1/0,pe/c,x3/15,s9,x9/1,s1,pg/j,x2/12,s6,x5/6,ph/l,x7/4,pp/b,s7,x3/9,s13,x1/8,s15,x2/13,pe/n,s9,x9/12,s15,x14/6,s1,x11/2,s11,x1/12,s1,x13/11,s15,x2/8,pf/j,x12/0,po/n,s4,x9/1,s5,x10/8,pj/p,x9/12,pn/d,x0/15,pk/h,s3,x8/4,pi/o,x14/10,s12,x13/3,s12,x10/1,s4,x11/13,s11,x9/1,s6,x13/8,s2,x1/0,s13,x6/9,pd/l,x12/14,pp/h,x11/9,pc/f,s9,ph/k,x14/1,pj/g,x8/15,pf/e,x13/1,pb/o,x5/14,pa/c,x9/13,s9,x15/7,pp/m,x10/1,s7,x0/13,pi/j,s1,x14/2,s6,pc/b,x15/13,pp/i,x14/7,s14,x5/12,s2,x8/6,s12,x0/3,s10,x13/7,s12,x10/4,s5,x2/7,pm/e,x3/15,s6,x11/9,s14,x15/10,pi/o,s4,x7/12,pf/l,x9/11,s7,x4/2,pk/m,x0/8,pb/p,x6/9,pc/o,x11/13,pe/f,x5/3,s4,x9/12,s8,x15/10,s12,x1/9,s7,x0/10,s3,x4/15,s7,x3/13,s7,x7/5,s5,x4/14,s13,x15/9,s1,x12/10,s15,x14/9,pl/a,x10/6,pd/n,x0/5,pp/i,x3/11,s15,x10/2,pk/d,x15/1,s4,x3/14,s7,x8/13,s3,pm/o,x3/1,s3,x0/2,s3,x15/8,ph/e,x12/9,pl/k,x0/11,pf/e,x8/10,s10,x2/6,s4,x7/4,s8,x2/13,pj/p,x15/4,s11,x11/10,s4,pe/f,x5/8,s11,x3/15,s5,x0/9,s15,x6/15,pl/h,x0/2,s10,x13/8,pd/m,x11/3,pb/n,x2/12,s15,x15/14,s2,x1/9,ph/d,x8/14,pj/a,x3/5,s2,x14/10,s2,x0/11,pl/f,s11,x4/8,s4,x7/15,s3,x13/0,pb/c,x12/2,pp/o,s11,x14/5,pk/h,x12/11,pm/l,x6/3,s9,x7/0,s8,x5/9,pf/n,x15/4,s7,x9/12,s11,x8/11,pb/i,x6/15,s1,x9/14,s1,x7/10,ph/l,x11/0,pp/e,x8/14,pd/l,x5/9,s6,x4/10,pb/c,x15/11,s5,x7/10,s2,x2/8,s4,x6/9,pd/h,x2/5,pc/o,x6/4,pf/i,x15/8,pl/e,s5,x12/9,pf/p,x14/0,pb/m,x7/15,s3,x1/8,s6,x0/6,s12,x13/15,pj/l,s15,x12/2,pf/h,x10/8,s10,x14/7,pm/a,x1/15,s8,x10/6,pf/e,s10,x15/7,s12,x9/0,s2,x10/14,s1,x0/2,s14,x13/6,s13,x9/15,s11,x3/11,s11,x15/6,pi/d,s13,x7/9,s1,x4/15,s12,x8/5,s8,x10/7,s15,x12/13,s5,x11/10,s8,x13/7,s4,x10/2,s5,x3/1,pl/b,x10/6,pg/d,x8/11,s5,x7/1,s2,x13/0,s6,x11/8,s8,x13/3,s10,x14/7,s14,x12/5,s14,x10/6,s1,x4/13,pn/b,x14/6,s13,x5/3,s15,x7/2,pm/i,x13/11,pe/h,x15/3,s3,x14/2,pk/n,x13/0,s3,x2/1,pe/b,x3/10,s1,x12/1,pd/l,x0/8,pe/m,x9/14,ph/i,x12/8,pm/e,s5,x4/10,s13,x2/7,s2,x4/12,s13,x7/3,pj/g,x2/13,s2,x0/1,pa/n,s8,ph/l,x14/7,s13,x0/13,s8,x6/9,pe/a,x10/1,s13,x13/11,s5,x10/7,s1,x4/1,pd/g,x9/11,s5,x6/2,s5,x4/1,s10,x0/14,s14,x13/6,pl/c,x7/0,s1,x12/11,s3,x10/3,s8,x7/12,s3,pe/k,x2/4,pa/p,s4,x12/7,pe/g,x15/1,s9,x8/2,s8,x15/14,pj/d,x13/8,pp/b,x14/3,s2,x1/9,s3,x13/5,s8,x15/11,pn/e,x9/0,s15,x1/13,pa/p,x9/6,s15,x15/14,s15,x7/5,s4,x15/3,pf/g,x7/6,s5,x3/12,pd/l,x15/8,s7,x7/3,s6,x9/14,s8,x0/7,s6,po/c,x12/9,s11,x13/7,s8,x14/6,s6,x10/11,s1,x2/1,ph/m,x0/4,s14,x2/12,s2,x9/1,pl/f,s15,x4/3,s13,x12/15,pg/d,x10/2,s5,x0/6,pi/k,x5/1,pg/d,x10/6,pj/a,x8/2,pn/o,x13/12,s5,x8/0,s8,x10/4,s6,x9/6,s4,x13/3,s1,x4/5,pp/h,x3/10,s12,x7/15,s12,x2/8,s2,x10/15,s12,x11/12,pl/f,x9/4,s2,x12/5,pk/d,x1/6,pg/j,x9/7,pd/c,x5/14,s11,x2/0,s15,x15/4,pn/l,x8/11,s1,x14/12,s12,x6/4,pc/h,x3/8,s6,x4/7,pl/j,x6/1,pn/g,s2,x3/0,s5,x15/6,pf/e,x11/1,po/k,x4/15,s12,x10/7,pl/c,s8,x5/3,pj/n,x6/12,pd/h,x15/8,s12,pn/l,s3,x11/1,s2,x6/15,pa/m,x11/0,pn/i,x14/10,pd/m,x4/1,po/p,x9/8,ph/b,x14/6,s11,x13/9,s9,x12/4,pp/g,x14/2,s4,pn/b,x6/15,pc/m,x1/0,s7,x9/15,s12,x7/13,s10,x9/5,pe/h,x2/7,s4,pl/m,s7,x10/12,s3,x4/9,pn/o,x12/7,pf/h,x5/13,pp/o,x2/12,pm/j,s10,x7/13,s5,x12/15,pf/b,s6,x1/0,pm/e,x4/12,pb/d,x5/2,pg/e,x9/11,pd/o,x10/5,s8,x11/3,s7,x9/1,s2,pn/j,x4/0,s5,x7/15,s5,x8/1,pb/i,x2/0,pn/j,x7/5,s15,x2/6,pi/g,x14/12,pj/d,x2/1,s4,x10/4,pi/n,x9/14,s14,x8/11,pg/m,x15/2,pp/b,x11/14,s12,x9/8,s7,x7/2,pk/j,x3/15,pc/i,x1/9,s7,x7/8,s2,x12/6,s10,x2/15,pe/g,x6/0,s2,x5/13,s2,pp/f,x11/3,s1,x4/14,s7,x9/6,s10,x7/5,s13,x11/13,s7,x7/6,pd/b,x1/8,s8,x13/15,pm/e,x4/7,pd/c,s11,x3/12,pj/a,x5/8,s7,x1/11,s12,x0/10,pb/e,x4/8,s9,x13/0,pp/m,x6/8,pd/i,x10/0,pg/h,x5/2,s1,x3/4,s8,pc/b,s5,x12/8,pe/a,x11/6,pm/h,x3/12,pf/b,x14/13,pm/o,x10/4,s7,x13/12,s3,x4/5,s14,x7/8,s13,pg/l,x1/14,po/f,x13/8,pg/l,x1/7,pc/f,x2/14,s15,x9/10,pd/p,x1/11,s13,x15/12,s12,x8/6,s7,x10/5,pc/m,x13/12,pg/a,x8/9,s15,x13/1,s12,x7/8,pi/l,x12/14,s6,x8/3,pp/h,s10,x12/2,pk/m,x5/13,s8,x8/15,s14,ph/o,x5/1,pj/m,x6/0,s13,pf/c,x15/12,pk/d,x10/2,s3,pg/o,x5/8,pm/f,x9/0,s9,x12/5,pg/d,x9/11,pl/h,x0/6,pk/i,x8/15,s12,x7/3,s3,x12/4,s10,x5/3,s1,x0/4,s2,x1/15,s2,x8/9,s7,x3/11,pe/a,x15/5,s7,pk/n,x2/14,pe/o,x8/13,s4,x2/11,pg/b,x0/9,pm/h,x4/8,s3,pe/p,x2/1,pm/f,x0/6,s10,pj/a,x5/1,pg/d,x2/6,po/a,x5/0,pc/h,x3/15,pb/g,s9,x4/8,pf/i,x15/10,s3,x11/6,s7,x14/0,s5,x6/11,pj/b,x13/9,s3,x15/5,s9,x3/12,s13,x14/13,s9,pf/k,x1/7,s14,x8/13,s10,x15/4,pe/b,s15,x1/14,s1,pc/i,x8/6,pp/f,x10/13,pn/j,x12/14,s9,x8/0,s14,x13/7,s3,x15/1,s15,x11/12,s8,x1/2,s1,x0/7,s5,x12/6,pi/d,x13/9,pc/g,s6,pi/k,x11/6,pd/h,x8/12,s14,x1/10,pj/b,x5/13,s9,x8/2,pk/n,x7/11,pl/e,x2/12,s10,x7/15,s4,x11/0,s1,x2/7,pb/n,x4/0,s15,x7/14,s6,x8/1,s14,po/k,x5/15,s7,pe/a,x11/8,pl/o,x4/3,pj/e,s13,x11/1,s10,x4/13,pa/d,x8/3,s12,x14/15,s7,x1/5,pc/b,s15,x9/4,s9,x8/11,s1,x10/5,pd/p,s2,ph/o,x2/4,s5,x13/11,s14,x4/3,pb/n,x7/12,s14,x15/11,s13,x7/0,s3,x2/13,pk/o,x8/7,pm/a,x4/3,s10,x6/15,s15,x11/4,s4,x5/2,pk/l,x10/8,pa/f,x12/3,pd/i,x5/7,s11,x8/15,s13,x13/14,pe/p,x9/3,s1,x6/7,pd/j,x14/4,pn/e,x12/11,ph/c,x0/15,s13,pk/o,x11/10,pa/e,x12/13,s10,x10/2,pg/l,x15/1,s13,x10/13,pd/c,x0/11,s3,x5/13,pb/f,x2/15,s1,x11/6,s12,x2/14,s8,x13/6,pc/d,s15,x11/0,s1,x10/2,pf/b,x1/6,s10,x15/12,pe/j,x6/4,s1,pf/l,x13/2,pj/b,x0/14,s13,x10/5,s8,x15/0,s12,x7/13,pg/c,x14/15,pl/n,x5/7,s3,x12/9,s3,x3/15,pb/m,x12/6,s4,x15/11,s3,pl/j,s2,x2/7,pb/d,s14,x9/4,pp/m,x5/6,pj/h,s8,x2/4,s14,x1/8,s7,x10/3,pe/d,x15/14,s2,x4/1,s14,x14/11,pc/g,x7/4,s4,x14/15,pa/h,x12/9,pe/j,x8/4,pf/l,x13/7,s14,x9/6,s8,x10/13,s9,x15/7,s1,x6/9,pb/n,x0/11,s3,x6/14,s6,x5/7,s7,x1/10,pi/f,s12,x5/3,s6,x2/1,pa/l,x4/10,s3,x12/2,s2,x0/10,pp/f,x3/9,pm/h,x11/14,pk/n,x15/8,pg/h,s1,x6/11,s10,x2/10,s15,x4/7,pp/e,x5/10,pb/m,x7/2,s11,x13/3,pj/a,x5/8,pm/e,x7/1,s2,x8/3,pa/f,s9,x6/2,s3,x5/12,pc/l,x6/0,s1,x10/12,pi/m,x3/4,s3,pc/h,x14/10,pe/a,x7/5,s6,x13/2,s5,x14/15,pj/g,x9/13,s2,x4/11,s14,x15/0,s8,x1/8,s6,x10/6,pa/c,x4/3,s13,pm/b,x12/13,s3,x14/9,s9,x15/2,s10,x9/13,s10,x10/14,s8,x13/2,s10,x0/5,pe/g,x9/3,ph/p,x15/2,pl/k,x7/6,pb/i,x0/15,po/e,x4/6,pj/f,s4,x15/2,pk/e,x9/11,s7,x13/12,pg/p,x11/3,pc/m,x5/14,pf/l,x13/11,pg/a,x0/10,pm/o,x5/15,s12,x1/6,s5,x12/4,pg/d,x15/1,pc/e,x11/4,s14,x3/2,s9,x13/10,s6,pd/i,x9/2,s8,x8/12,ph/p,x7/3,s8,pn/o,x6/14,pd/e,x15/0,s2,x7/1,s8,x14/4,s3,x7/15,s4,x9/8,pm/k,x7/5,s5,x13/8,pd/o,x4/10,pf/i,x9/14,s6,x11/13,s5,x2/5,pk/o,s1,pi/a,x7/11,s5,x6/9,s12,x7/4,s1,x10/13,s1,x0/11,s11,x13/14,s2,x2/15,pm/l,x6/12,pk/p,x14/1,po/e,x7/15,pb/a,x3/11,pj/d,x6/1,s9,x8/10,s4,x2/7,pk/n,x5/4,s3,x12/7,s6,x13/4,s6,x3/2,s8,x11/13,s4,x7/4,pe/h,x1/6,s1,x4/15,s11,x1/13,pb/p,x7/15,s15,x5/9,ph/e,x6/10,s14,x1/5,s15,x6/11,pm/i,x7/14,s3,x12/3,s12,x9/13,s7,x15/2,s8,x7/12,s8,x6/0,s4,pj/g,x10/3,s5,x5/14,s2,x0/8,pk/b,s10,x4/13,s13,x6/0,pg/c,x7/9,s11,pd/f,x11/0,pk/j,x1/12,s11,x6/7,s10,x9/0,pb/d,x4/14,s5,x10/5,pn/f,x2/3,s10,pc/j,s2,x14/15,pb/g,x12/7,s7,x11/6,s8,x14/15,s3,x13/7,s9,x15/0,pl/k,x3/10,s14,x8/11,s1,x3/1,s14,x10/9,pp/o,x2/4,pk/a,x11/14,s14,x12/3,s8,x2/8,s3,x11/7,s4,x15/12,s14,x3/7,s13,x15/9,ph/i,x2/11,s8,pd/c,x0/6,s11,po/l,x11/15,ph/k,x14/13,pm/n,x6/10,s8,x7/5,pf/p,x2/12,pe/i,x11/8,pl/a,x12/13,s8,x14/8,s9,x3/1,s7,x15/10,s12,x2/13,pe/b,x1/5,s14,x9/4,pm/p,s4,x11/12,pb/f,s5,pk/c,x6/5,pi/b,s14,x0/3,s13,x2/15,s5,x9/6,s4,x2/11,s12,x9/6,s10,x13/11,s15,x12/2,s6,x9/11,s10,x8/7,s14,x0/14,pg/f,x15/1,s2,pb/h,x4/12,pl/k,x5/6,s4,pj/i,x7/13,s5,x14/0,s11,x1/15,pa/f,s5,x6/14,s14,x15/2,s8,x5/0,pd/h,x1/13,pm/f,x3/5,s11,x11/6,pp/n,x15/0,s2,pi/f,x9/2,s2,x12/0,s13,x2/13,pn/k,s11,pp/a,x10/14,s10,x3/0,s7,x10/13,s11,x15/2,pj/m,x13/0,s14,x4/6,s5,x9/13,s12,po/n,s2,x8/3,pf/e,x15/2,s10,pc/o,x8/0,pj/h,x6/15,s14,x10/1,pd/p,s3,x13/12,ph/b,s9,pf/n,x7/2,s7,pg/d,x13/6,pc/k,x14/10,s12,x8/0,s2,x12/1,s9,x4/8,s15,x7/10,pj/p,x5/0,s4,x14/11,s12,x5/0,s12,x10/6,pe/a,x15/0,pd/h,x7/1,pf/n,x5/2,s12,x9/12,po/l,s5,x7/5,s5,x4/2,pm/i,x5/6,s6,x8/9,pk/d,x11/5,s7,x4/1,s4,x11/13,s1,x15/7,s3,x9/11,s14,x13/3,pi/a,s3,x1/4,s6,x11/3,pj/e,x1/7,pi/h,x5/4,po/e,x6/12,s12,x3/9,s6,x10/8,s13,x3/15,pc/b,s13,x11/8,s14,x6/12,s14,x7/9,s11,x1/8,s4,x10/3,pe/k,x6/1,pj/l,x5/15,pi/e,s5,x8/0,s1,x1/3,s14,x13/0,s9,x5/2,s5,x3/11,pg/o,x5/10,pe/a,x11/14,pj/l,x15/8,s1,x12/13,s3,pc/g,x5/11,pb/p,x1/12,pf/o,x7/11,s4,pl/h,x10/0,s6,x3/12,pi/e,x7/15,pp/b,x12/6,s8,x5/11,s5,x6/7,pe/l,s7,x8/2,pd/c,x15/5,pm/e,x13/0,s1,x14/8,s6,x6/3,s15,x5/12,pk/f,x3/4,s11,x14/8,pg/a,x6/1,s7,x12/11,s12,x1/10,s5,x12/8,s8,x14/4,s10,pf/c,x1/10,s7,x0/12,pj/n,s11,x13/15,s9,x3/9,po/a,x7/8,pk/d,x10/0,s13,pl/n,x3/14,po/d,x11/2,s7,pc/i,x13/1,s13,x6/12,pa/b,x8/1,pd/k,s11,x12/0,s1,po/n,x14/15,s11,x8/4,s2,pm/c,x15/7,pg/l,x3/1,pp/j,x11/5,pn/l,x6/4,s6,x12/9,s10,x14/10,pa/e,x4/13,s8,x12/2,pj/l,x14/6,s10,pe/d,x12/2,s11,x8/15,pj/h,x0/13,pn/m,s4,x7/2,s10,x12/11,ph/g,x14/15,pj/m,x10/2,s9,x7/14,pp/g,x10/13,s7,x12/3,s15,x15/5,s1,x3/12,s12,x9/13,pf/o,x14/7,s13,x6/1,s2,x10/0,s10,x4/15,pl/g,x1/6,pm/j,x8/15,pa/f,x14/5,po/l,x10/12,s4,x1/14,s12,x3/6,pa/h,x11/14,s9,x8/4,s4,pc/m,x15/10,s6,ph/b,x13/9,s5,x14/0,s6,x3/6,s2,pk/n,x15/8,s7,x4/13,s1,x14/0,pp/i,x6/12,s4,x10/11,s5,pk/e,x7/14,s11,x6/15,s9,pa/b,x9/7,s13,x4/5,s1,x8/11,pe/d,x10/4,s15,x9/6,pl/p,x4/7,s3,x9/14,s7,x8/10,s12,x11/14,s1,x12/7,pi/f,x13/9,pm/h,x7/1,s10,x5/15,pf/l,x10/4,s7,pc/b,x5/0,pf/o,x13/14,pk/d,x10/5,pc/m,x2/12,pn/o,s6,x4/1,pg/h,x0/3,s11,x2/8,s10,x12/1,pm/j,x15/2,s9,x1/14,pk/g,x7/5,pm/a,x14/13,s9,x8/6,s13,x13/14,s11,x3/7,po/d,x14/5,s4,x11/4,pi/j,x8/10,ph/a,s14,x3/1,s9,x5/4,pb/k,x10/15,s13,x5/12,s9,x8/10,po/f,x1/9,pn/g,x8/15,s11,x7/9,s13,x4/2,s12,x14/11,ph/o,x13/10,pe/p,x15/3,pf/i,x7/1,ph/g,x13/9,pp/f,x7/15,pe/o,x8/10,s15,x13/7,pl/c,x9/14,s9,x12/0,pa/b,s7,x1/6,s7,x5/8,s8,pn/o,x4/3,pp/m,x7/1,pk/d,x11/0,s11,x15/4,pi/e,x13/5,s3,x14/4,pg/l,x1/7,s10,x9/8,s13,x3/11,po/h,x9/15,pi/l,x2/14,s12,x12/4,ph/e,x7/10,s15,x1/15,s8,x10/13,pg/p,x7/0,pb/i,x8/14,s4,x0/11,pn/o,x6/15,pm/c,x13/9,s11,x0/6,s5,x3/4,s12,x15/0,s13,x8/1,s14,pa/d,x13/14,s4,x8/10,pg/h,x1/7,s5,x5/3,s6,x2/15,s11,pj/k,s2,x4/7,pm/p,x14/15,s4,x5/4,pf/c,x3/13,s13,x4/12,s2,x11/9,s14,x15/1,pd/k,x8/6,pp/m,x4/2,s14,x8/1,s15,x15/10,s5,x7/6,s12,x11/15,pj/e,x5/7,pb/a,x0/2,s7,x14/13,pc/k,x11/9,s13,x3/2,pa/i,x14/11,s2,x0/1,s9,x14/3,pd/j,x15/12,s9,x11/10,s4,x14/13,s4,x3/12,pg/i,x14/10,s10,x1/9,s1,x12/15,ph/k,x0/8,pj/p,x7/1,s13,x9/6,s14,x12/8,pk/f,x6/1,s12,x8/2,pj/o,x9/13,s6,x1/8,s12,x9/14,ph/i,x15/8,s5,x0/3,pm/k,x6/14,s7,x4/2,pg/d,x14/5,s13,x6/1,s9,x3/5,s12,pn/j,x6/14,s13,x12/0,s13,x1/3,s11,x0/6,po/l,s8,x9/2,pj/e,x3/1,s8,pa/f,x0/8,s8,pc/h,x7/9,s4,x0/14,pd/l,x9/6,s12,x13/12,pi/p,x2/6,s11,x11/9,s14,x2/4,s15,x12/14,s14,x3/7,pb/d,x12/0,s6,x9/10,s11,x4/8,pp/i,x11/7,pj/g,x13/8,s1,x6/11,s12,x15/9,s2,pp/f,s3,x14/5,s6,x7/8,s8,x5/9,s5,x10/11,pg/c,x14/13,s5,x6/0,s12,x9/12,s8,x5/3,ph/i,x7/2,s14,x9/0,s9,x7/10,pg/l,x11/3,pd/o,x4/13,s7,pn/k,x2/7,s10,x3/9,ph/a,x14/8,pe/n,x12/2,s7,x13/14,po/k,x9/11,pj/d,x8/1,s10,x3/15,pc/k,x6/4,s9,x5/0,s11,x3/9,s11,x14/13,s11,x2/0,pj/i,x1/14,pa/c,x11/13,s11,x5/0,s8,x2/8,pf/e,x15/14,pc/j,x1/7,pm/i,x11/5,s9,x13/1,s6,x15/9,pk/g,s7,x5/0,pf/p,x14/9,s1,x1/11,pe/h,x4/9,pd/m,x14/2,s4,x1/7,s4,x15/4,s2,ph/l,x14/3,s5,pi/d,x9/12,s8,x4/2,pb/f,x0/1,s15,pd/a,x2/9,s5,x14/7,s2,x5/1,s6,x7/9,po/i,x6/10,s11,x15/4,s5,x14/9,s4,x1/7,pf/b,x3/2,pd/j,x15/5,s3,x13/7,s8,x1/9,pe/p,x2/6,s14,x9/15,pc/h,x2/14,s13,x3/1,pd/f,s13,x0/5,pl/i,x13/14,s1,x8/4,s3,pf/j,s1,x12/11,pn/e,x3/10,s12,x0/13,s14,x1/8,s13,x2/5,s12,x9/14,s14,x11/8,s14,x6/5,pb/o,x14/12,s10,x15/8,s3,x1/2,pj/m,x3/10,s4,x0/6,pd/a,x3/7,pp/m,x9/15,pa/j,x8/14,po/n,x2/13,pg/f,x0/9,s1,pa/n,x7/1,s6,x3/13,s15,x10/2,s6,x4/0,pk/d,x9/13,s14,x5/11,s4,x8/2,s13,x12/11,s7,x0/8,s15,x13/1,s5,x10/15,s8,pa/p,x4/13,s11,x7/10,po/c,x13/3,pe/n,x10/7,s9,x6/13,s2,x9/0,pj/o,x11/12,pe/b,x13/9,s6,x2/6,pd/h,x14/12,s14,pk/o,x13/7,pj/c,x15/4,s1,x0/2,pb/p,x12/1,s3,x15/4,pd/n,x0/10,s10,x6/13,po/f,x2/9,pm/j,s2,x15/13,s7,x12/14,pn/i,x3/11,s8,x1/5,s5,x0/2,s6,x9/1,s12,x8/10,s2,x5/15,pb/a,x12/14,s7,x4/0,s13,x10/11,pe/j,x9/15,s13,x10/14,s15,x1/2,pb/k,x8/3,s10,x11/12,s13,x3/0,pi/p,x10/8,pe/j,x3/5,s8,x1/8,s3,ph/g,x11/6,s12,pa/n,x15/10,s6,pe/p,x11/9,s7,x5/13,s8,x4/0,s4,x6/14,s6,x2/10,s10,x0/5,pl/g,x3/13,s14,x12/7,s4,x15/1,pf/b,s15,x10/4,s7,x13/7,s11,x2/5,pa/j,x13/1,s9,x5/7,s2,x0/8,s9,x11/12,pf/i,s9,x10/8,pe/g,x5/3,s10,x8/12,pf/h,x2/10,s15,x6/4,pc/k,x7/14,pm/o,x5/11,s8,x10/1,pp/j,x9/5,s13,x2/14,s5,x4/1,s9,x12/10,s14,pf/n,x11/1,pl/c,x14/5,s11,x3/6,pg/f,s14,x5/4,s5,x2/1,s5,x11/14,pl/a,x0/6,s5,x9/4,pg/n,x1/6,s6,x13/2,s1,x3/7,pj/k,x6/13,s3,x1/3,s4,x7/8,s1,x12/15,s15,x7/1,pa/d,x3/8,pn/o,x15/1,pi/b,x10/6,s1,pg/a,x14/15,s5,x11/5,s2,x15/1,pd/f,x9/11,s9,x1/5,s8,x9/12,pa/h,x1/0,s11,x5/7,pe/j,x3/13,pl/f,x1/8,s5,x11/14,s14,x9/7,s8,x13/11,pe/k,x10/4,ph/m,x13/5,s3,x0/14,s11,x12/7,s13,x9/3,s2,pd/b,x15/8,s12,x4/5,s4,x2/14,pp/n,x3/8,pi/l,x0/7,s4,x15/6,s10,x11/9,s9,x6/5,s7,x1/7,ph/d,x10/12,s4,x3/14,s2,x15/1,s6,x10/4,pc/l,x6/0,s5,x9/12,s4,pa/p,x2/8,pf/o,x10/1,pp/g,x3/2,pl/a,s13,x6/13,s15,x2/1,s14,x10/5,s11,x0/2,pf/j,s12,x4/11,s8,x14/2,s6,x6/10,s13,x15/13,s1,x10/0,s15,x11/12,s12,x10/14,pi/o,s9,x4/8,ph/a,x1/2,pe/m,x5/14,pj/f,x4/12,pi/h,x15/6,s8,x12/14,s5,x1/2,pb/o,x7/8,s7,pk/e,x12/10,s9,x3/15,s12,x0/6,s5,x3/14,s1,pn/m,s15,x7/5,ph/d,x11/4,s6,x5/15,pp/c,x2/8,pd/i,x9/13,pf/a,x2/4,s5,x12/0,s2,x10/1,s9,x15/13,s5,x8/11,pb/c,x9/1,s9,x7/12,s2,x13/4,pd/n,x11/8,s12,x2/10,pe/g,s10,x4/8,s3,x14/12,s3,x9/6,s5,pa/b,x8/1,s3,x2/3,s12,x11/8,s3,x9/7,s12,x5/13,s5,x8/10,pp/c,x13/0,pk/h,x10/4,pe/n,x0/9,pa/i,x2/5,pd/b,x0/7,pi/p,x13/11,s6,x7/0,ph/n,x8/4,s8,x12/0,s15,x13/1,s9,x8/2,pj/m,x5/15,s15,x13/4,s8,x10/6,s9,pd/g,x1/3,s11,pn/i,x11/9,pj/f,x14/0,pi/n,x5/4,pb/h,x14/13,pm/j,x2/7,s8,x8/15,s3,x0/12,s3,x1/3,s8,x12/7,s1,x14/15,s5,x8/9,pn/a,x10/13,s9,pp/c,x15/2,s8,x8/14,ph/k,s8,x3/4,s1,x2/12,s3,pn/c,x11/0,s10,x2/9,pl/k,x4/7,pg/i,x1/11,s7,x6/3,s11,x13/9,pl/f,x4/3,pc/p,x5/0,s14,x11/4,s10,ph/j,x6/14,s14,x10/1,pf/o,x7/5,s9,x15/12,s11,x8/11,pp/m,x9/3,pg/a,x7/5,ph/e,x2/12,pm/l,x3/9,s13,x8/4,s7,x2/13,s13,x4/14,pe/g,s4,x12/6,po/l,x13/7,pj/c,x11/1,s1,x0/7,pn/l,x10/14,pd/g,x4/12,s2,x8/14,pk/c,x7/12,s1,x1/3,pp/j,x13/9,s3,x12/6,s10,x13/10,s4,x11/5,pn/b,x3/10,s1,x1/9,pc/g,x15/5,s7,x8/4,pe/m,x0/13,s11,x8/1,s8,x5/2,s3,x11/4,pa/l,x10/7,s4,x6/4,po/g,x13/3,pj/b,x2/0,s9,x8/1,pi/k,x3/7,s14,po/p,x8/2,pm/k,x0/14,pe/i,x11/10,pl/f,x0/4,s10,pi/d,x9/6,pc/j,x12/13,s2,x6/0,s12,x7/14,pg/e,x5/9,pk/f,x12/1,s1,x7/4,s9,x0/15,s14,x10/7,s8,x1/11,s10,x2/13,pm/a,s8,po/h,s14,x7/15,pl/i,x10/2,s10,x13/9,s2,pb/e,s1,x7/8,s5,x15/14,pd/a,x7/0,s9,x14/15,s12,x5/0,pi/c,x2/4,pd/l,x8/1,s13,x7/0,s15,x4/3,ph/n,x8/13,pm/o,x1/11,s12,pn/c,x9/0,s2,x8/15,pa/p,x10/2,pm/l,x1/9,pi/f,x3/5,s1,x6/10,s2,pk/m,x5/0,s10,x10/2,s4,pc/g,s7,pk/l,x14/4,s9,x8/5,s6,x13/10,s14,x5/14,s9,x4/11,s7,x0/6,s10,x12/2,s13,x7/6,s7,x12/3,pc/d,s2,pm/j,x6/0,pd/o,x13/7,pn/k,s9,x3/12,ph/e,x9/8,s3,x7/3,s4,x12/4,pg/o,x6/13,pb/d,x15/1,po/c,s14,x6/8,s13,x12/7,pb/f,x8/1,s5,x12/4,pc/a,x6/13,s3,x0/1,s9,x6/15,s7,pm/e,x1/9,s11,x15/4,pk/g,s9,x3/6,s12,x7/14,ph/p,x11/4,s15,pk/e,x7/10,pj/o,x13/9,s11,x7/5,pi/l,x14/15,s1,x8/10,s1,x11/4,s2,x8/12,pe/g,x10/2,pm/l,x4/0,s9,x6/3,pb/f,x10/5,s6,x14/8,s12,x7/12,s15,x0/15,pc/e,x9/3,s9,x7/4,pd/h,x2/11,pp/b,x1/7,s11,x13/11,pk/e,s6,x8/10,s10,x1/2,s3,x12/3,s7,pd/g,x2/0,pa/e,x8/3,s8,x14/9,s2,pk/d,x11/6,po/i,s6,pf/m,x5/0,pn/g,x7/3,pc/o,x11/4,s13,x14/3,s8,x2/15,s14,x5/4,s4,x12/0,s7,x15/11,s10,x12/9,pe/g,x15/5,s4,x7/6,s7,x11/0,pa/b,x12/4,s8,x15/11,s7,x13/5,s15,x2/3,s6,x0/7,s13,x2/14,s11,x1/12,s4,x4/15,s2,x14/3,s5,x12/7,pn/m,x4/0,s11,x11/9,s6,pi/k,x10/6,s11,x2/11,pg/j,x8/15,s2,x4/13,s8,x3/8,pp/i,x14/4,s4,x11/0,s4,x10/14,s1,x5/2,s14,x9/6,s2,x4/8,s13,x7/9,s11,x8/12,s14,pm/f,x7/2,pn/j,x4/8,s4,x10/6,pk/l,x8/11,s5,x2/15,s13,x4/14,po/n,s2,x9/10,s1,x6/2,pk/g,x15/12,s8,x3/14,pj/h,s12,x9/13,s13,x6/12,s4,x15/9,pa/b,x7/2,s10,x8/10,s4,x0/6,s14,x9/14,s1,x11/13,pg/l,x12/5,s4,x11/9,s8,x14/3,pa/n,x7/5,s7,x14/3,pg/c,x7/1,s8,x3/9,s14,x1/8,pm/l,x12/7,pf/e,x8/9,s6,po/m,x0/11,s10,x1/3,s4,x13/0,s13,x8/5,pi/n,x15/3,pm/j,s4,x4/0,pl/h,x5/2,s3,x13/9,s8,x7/14,s12,x11/15,s15,x3/6,pf/n,x5/7,pl/i,x0/14,s9,po/e,x11/9,s12,x12/3,pm/c,s6,x1/6,s4,x12/5,s1,pf/j,x2/6,pb/n,x15/0,s14,x10/7,s15,x15/4,pl/f,x2/10,s2,x3/11,s8,x9/1,pm/k,x4/6,pb/j,x9/7,s1,x11/0,pf/g,x9/14,s4,x13/3,pk/l,x9/12,s13,x1/8,ph/a,x0/4,s10,x12/13,s6,x10/9,s4,x15/6,s13,x2/8,s3,x11/7,po/g,x4/8,s4,x6/3,pn/m,x5/15,pb/g,x10/4,ph/n,x3/11,pf/e,x2/12,pn/p,x9/6,s8,x8/5,s11,x7/2,s1,x15/6,s9,pd/c,x5/2,s2,x7/3,pk/j,x14/6,s4,x11/3,s9,x5/13,pm/h,x0/6,pl/b,x5/2,pa/e,x3/4,pm/d,x6/15,pe/l,x0/3,pi/n,x11/2,pl/j,s7,x0/12,pk/c,x4/13,s10,x5/6,s12,x12/15,s3,x6/10,s13,x1/8,s13,x12/4,s15,x0/10,pb/o,x1/3,s15,x14/15,pe/j,x10/2,s1,x6/15,pp/f,x3/7,s6,x10/13,s3,x5/2,s12,x13/6,s9,x10/14,s13,x5/1,s8,x11/9,s13,x5/14,s7,x0/15,s11,x1/8,s11,x11/9,s13,x0/4,pb/g,x8/7,pp/l,s7,x4/15,s11,x12/1,pf/k,x6/9,ph/i,s4,x0/4,s14,x14/9,s13,x2/10,s13,x1/4,pe/p,x10/14,s2,x7/12,pg/b,x2/3,s6,x8/9,s14,ph/n,x1/12,s13,x15/9,pi/d,x12/6,s9,x7/10,pn/l,x2/11,s13,x10/15,s9,x3/7,pj/g,x1/8,pd/b,x2/4,s10,x5/6,s12,x8/7,s10,x15/13,pn/k,x14/2,pc/a,x8/6,pk/f,x11/4,pc/a,x0/1,pj/l,x10/3,s9,x14/12,s2,x9/2,pn/d,x10/11,s1,x9/8,s6,x13/0,s10,x1/3,s8,x9/8,s3,x11/14,pl/h,x5/1,pn/p,x14/6,s6,x11/4,s15,x3/2,s13,x10/6,s9,x4/1,s3,x15/11,pj/k,s12,x14/1,pm/i,x2/11,pb/o,x10/7,pd/p,x6/11,s8,x12/0,s2,x6/11,s6,x1/10,s7,x12/9,po/l,x14/2,ph/d,x15/9,pl/p,s5,x6/8,s5,x10/13,s5,x12/9,s15,x4/1,s11,x7/11,s9,x3/15,pm/i,x10/5,pd/l,x8/13,pp/n,x0/3,s3,x10/1,pf/e,x5/13,s3,x4/12,s12,x3/11,s4,x6/10,pb/o,x2/8,s2,pf/n,x0/10,s11,x8/11,s10,x14/15,ph/g,x8/0,s13,x11/1,s15,x14/3,pi/l,x11/15,pk/d,x8/12,pm/i,s5,x4/7,s14,x2/9,pc/a,x8/4,s10,x5/12,po/h,x4/9,s8,pk/e,x13/1,s5,x4/14,pi/m,s9,pb/k,x7/12,s6,x2/14,s14,x6/0,s5,x7/8,s15,x15/4,s2,x5/8,s5,x6/0,s7,x8/3,s14,x4/12,pd/m,x7/15,s13,x9/11,s3,x3/12,pp/l,x8/0,s11,x4/3,s5,x15/8,pn/e,x6/2,pp/h,x9/11,s7,x1/15,s8,x10/5,s9,x0/9,s4,x8/3,pd/f,x12/6,pm/o,s3,x10/13,pc/e,x9/14,s12,x3/6,s8,x13/2,s15,x12/10,s9,x9/1,ph/a,s2,x0/4,s4,x9/5,s9,x3/12,s15,x5/9,s13,x14/15,s2,x4/5,pe/m,s10,x11/6,ph/f,x12/14,pa/l,x1/11,s15,x14/7,s3,x10/15,s2,x6/5,s6,x9/2,s10,x13/1,pb/h,x4/10,pe/m,x15/2,pk/h,x4/1,s13,x12/0,pl/o,x13/11,pb/d,x6/1,ph/e,s8,x13/9,pp/k,s7,x10/14,s8,x12/11,pl/h,x9/10,s12,x11/6,pp/i,x8/10,s15,x0/1,pd/c,x10/5,ph/a,s13,x1/15,s2,x7/5,pg/p,x6/15,pb/l,x1/2,s4,x12/8,s7,x5/2,s8,x10/15,s2,x9/1,pj/p,x7/8,s15,x14/9,s10,x6/11,s14,po/f,x7/15,s13,x12/3,s12,x2/13,s2,x10/5,pl/a,x15/9,s5,x12/1,s2,pf/j,s4,x7/4,s3,x2/15,s14,x9/12,pi/c,x3/8,pl/b,s10,pd/a,x10/12,s8,x14/11,pp/b,x3/0,pc/o,x6/10,s5,x8/0,s7,x7/9,pj/l,x2/8,pi/e,x3/6,s8,x7/1,po/m,x8/4,s9,x10/7,pk/c,x1/9,s7,x2/0,s13,x11/4,pd/g,x2/9,ph/j,x3/0,s7,x10/9,s15,x8/2,pm/o,x0/4,s8,x8/7,s10,x4/13,s3,pk/j,x12/3,s13,x7/0,po/d,s7,x9/3,pp/n,s5,x0/1,s1,x3/5,s7,x15/11,s6,x8/1,pb/f,x6/2,pg/h,s9,x10/14,s7,x15/5,pd/f,x4/14,pc/g,x2/7,pd/n,x14/0,po/h,x7/5,s5,x15/10,pf/e,x5/4,s4,x10/0,s12,x15/3,s1,x14/8,s6,x0/13,s13,x5/3,s3,pl/c,x13/6,pn/a,x1/2,pi/p,x7/3,s7,x1/10,pe/n,x4/15,s9,x9/10,s8,ph/b,x1/8,pj/f,s11,x13/6,s8,x8/2,s13,pe/k,x7/0,pc/d,x13/6,s11,x9/1,pg/f,x14/0,s13,pp/i,x13/4,pj/a,x8/9,s5,x12/1,s7,x8/14,pf/h,x5/9,pi/g,x15/13,s1,x5/14,s5,ph/b,x3/10,pm/p,x13/9,s12,x15/0,pf/n,x13/2,pd/a,x8/15,pp/f,x6/9,s15,x14/1,pm/e,x7/5,s10,x10/4,pa/p,s10,x13/8,s8,x3/5,s7,x14/10,s6,x3/8,pe/o,x14/1,s2,x3/9,pi/m,s10,x11/2,s5,x6/7,s9,x8/15,s11,x14/10,pp/b,s2,x3/11,s8,x1/5,s13,x9/12,s9,x5/10,s13,x14/0,pk/l,x2/13,s2,x7/11,s7,x4/10,s11,x8/6,s15,x1/10,pc/d,x4/7,pi/o,s9,x9/2,s2,x10/1,pj/d,x7/11,po/l,x0/1,pb/m,x13/11,s4,x10/4,s2,x0/15,s10,x12/3,s1,x4/1,s13,x6/9,s13,x7/10,s13,x4/9,s1,x14/1,s15,x6/15,s1,x2/10,s10,x9/15,pa/k,x12/0,pl/b,x15/13,pc/m,x14/3,s3,x7/2,pp/e,x8/1,s12,x6/3,pf/d,x9/15,s7,x0/2,pm/p,s7,x3/6,s13,x5/8,s4,x7/1,s7,x10/3,s12,x13/5,s14,x1/9,s1,x14/11,pk/c,s12,pa/m,s8,x2/0,s14,x1/11,s2,x3/7,s5,x15/6,s4,x5/2,s11,x14/11,s3,x8/5,s9,x7/2,s4,x14/13,pe/d,s10,x5/3,s14,x6/10,s2,x15/2,s3,x12/11,pm/n,x3/15,pg/b,x6/1,s10,x13/0,s4,x1/3,pd/a,x7/11,pk/n,x3/2,s12,x15/6,pp/m,x9/7,s6,x10/3,s9,x4/6,s2,x1/0,s13,x15/2,s13,x6/5,s12,x12/9,ph/k,x7/11,pd/p,x9/5,pb/m,x2/12,pn/h,x7/3,pa/f,x10/12,s9,x4/9,pc/n,x15/11,pa/d,x10/0,s1,x1/12,pi/e,x15/5,po/g,x12/8,s9,x7/5,s2,x3/0,s7,x6/15,s13,x3/1,pj/p,x12/0,pn/a,x8/7,s6,x11/14,po/b,x13/6,s12,x9/10,pj/h,s2,pn/a,x11/15,s6,x5/1,s8,x7/11,s5,pm/j,x10/2,pf/n,x12/6,s10,x5/15,pi/b,x9/4,pl/n,x13/15,s1,ph/j,x2/12,s10,x5/9,s10,x12/10,s13,x11/8,s8,x7/3,s9,x12/2,pn/b,x1/6,s5,x10/2,s4,x5/1,s13,x4/8,s4,x13/1,s2,x12/0,s1,x6/1,s13,x10/12,pd/m,x5/15,s3,x12/1,s1,x2/11,s6,x0/13,s8,x9/7,s4,x11/1,po/b,x8/13,pj/d,x5/6,s7,x15/12,pa/n,x14/4,ph/j,x9/8,pb/i,x2/6,s3,x9/3,pa/n,x6/0,pi/j,x15/3,pe/h,x9/1,pa/f,x5/12,s3,x7/9,pc/i,x10/12,ph/b,x9/14,s11,pd/a,x4/7,ph/c,s10,x0/9,s14,x10/4,s6,x7/15,pl/f,x14/1,s3,x0/7,pm/j,x8/10,s8,pf/k,x2/9,s9,x7/3,pn/l,x14/13,s4,x6/2,s8,x8/12,s5,x10/4,ph/f,x2/13,s14,x5/4,s15,x13/14,s6,pk/d,x2/15,pn/b,x13/3,po/i,x0/10,pc/d,x6/15,pn/k,x9/8,pe/f,s5,x13/0,s4,pa/d,x7/11,s7,x4/1,s1,x9/11,s11,x13/12,pm/g,x6/2,s2,x3/5,pp/e,x13/10,s12,x5/9,pn/f,x3/10,s2,x4/15,s11,pe/k,x5/10,pn/o,s2,x6/8,s2,x2/1,s11,x14/3,s12,x6/10,s2,x12/8,pl/j,x1/13,pm/p,s13,pc/j,x5/10,s11,x15/1,pg/b,x6/13,s6,x5/0,s2,x3/14,pa/n,x10/2,pi/c,x7/13,pa/d,x4/0,pm/f,x3/13,po/i,x8/11,pf/c,x1/9,pd/e,x11/13,s3,x15/1,pk/i,x14/7,pp/a,x11/15,s13,x2/7,s1,x10/11,pi/h,x0/15,pk/g,x11/13,pe/f,x9/8,pm/p,x4/13,po/n,x9/10,pf/j,x8/14,s14,x0/2,s3,x3/11,s2,x12/7,s15,x5/8,s15,x10/2,s7,x8/15,pg/d,x13/14,pa/m,x0/1,s10,x8/15,pk/i,x14/6,s14,x4/2,pj/g,x11/12,pa/m,s13,pg/f,x5/4,po/l,x13/8,ph/a,x0/6,s2,x10/3,s12,x7/11,po/k,x15/12,s9,x14/5,s8,x7/3,s12,x12/13,s11,x7/15,ph/p,x2/0,s14,x4/9,s14,x1/5,s7,x14/3,pi/f,x4/12,pg/h,x2/5,s10,x15/12,pp/f,x4/13,s14,x10/9,s11,x2/6,s6,x1/14,pn/b,x13/9,pl/k,s14,x11/15,pf/g,x14/5,s11,x2/10,s6,x7/8,s9,x10/2,s12,x9/11,pb/d,x7/3,pc/n,x10/6,s11,x8/11,s3,x12/5,s1,x15/13,pg/p,x14/1,pl/d,x4/13,s2,x14/7,s11,x3/12,s2,x13/8,pa/f,x12/14,s10,x15/3,s6,x14/2,s5,x5/15,s7,x14/1,pl/c,x4/12,pd/o,x0/11,pn/i,x10/15,s15,x14/12,s14,x3/1,pl/k,s15,x13/5,s6,x14/11,s15,x3/0,pi/a,s2,x11/9,po/e,x13/2,pk/h,x11/6,s14,pj/m,x13/12,s1,x11/6,s3,x1/12,s10,x8/9,pa/e,x12/13,pf/c,s6,x10/6,pp/j,x5/14,s14,x0/1,s13,x13/3,s13,x12/8,s5,x0/5,s1,pf/g,x7/6,s5,x3/11,s5,x5/13,s5,x15/0,s13,x8/13,s14,x15/9,s13,x3/10,s4,x9/1,s15,x14/11,pm/a,x7/5,pb/k,x11/3,s6,x12/4,s5,x13/3,pn/c,x1/12,pj/o,x10/6,s8,x2/7,s4,x10/9,s2,x11/12,s14,x13/8,s6,x2/11,s15,x5/6,s4,x12/9,pn/d,x6/7,s11,x2/5,ph/g,x1/12,s11,pb/o,x7/11,pi/h,x3/4,s12,pm/n,x1/10,s11,x4/9,pg/i,x15/2,pf/p,x8/13,ph/e,x7/15,pf/j,x8/13,s3,x15/12,s15,x0/11,s2,x7/8,pc/i,x15/14,s10,x3/13,s7,x7/15,s11,x13/1,pa/j,x15/7,po/l,x9/5,s2,x7/6,pa/b,x0/12,pn/h,s1,x14/4,s13,x15/10,pk/p,x2/1,s8,x8/4,s5,x13/1,pm/b,x11/15,pc/k,x13/3,s5,x10/9,pl/i,x11/6,s9,x2/5,ph/c,x0/9,s8,x1/5,s4,x12/10,s4,x8/6,s6,x4/0,s9,x1/15,pa/b,x11/9,s12,x1/7,s6,x10/13,s3,x9/0,s7,x1/7,s2,x4/9,s2,x14/8,ph/o,x13/7,pd/g,s9,x11/0,s9,x3/2,pk/c,x13/7,s15,x11/8,pf/o,x7/15,s14,x10/0,pk/i,x2/15,pc/d,x4/0,s9,x9/5,s10,x7/13,s1,x5/15,s11,x14/4,s13,x6/9,pn/f,s3,x10/12,s15,x2/4,s14,x12/3,s15,x5/0,pc/k,x4/13,pj/o,x14/3,pe/d,x13/0,s2,x6/8,s12,x1/11,pm/b,s14,x14/10,pl/p,x1/13,s6,x0/8,pb/n,x14/7,s15,x6/2,pi/g,x3/7,ph/a,x2/14,s8,pf/d,x6/5,s3,x0/11,pn/b,x15/2,pf/p,x1/12,pe/g,x13/15,pb/o,x6/2,s7,x1/15,ph/j,s15,x4/11,s7,x5/10,s3,x7/12,pf/i,x11/0,s14,x13/6,s3,x3/9,s2,x12/0,s8,x7/2,s14,x15/6,s6,x12/9,s4,x1/6,s15,x3/15,s1,pk/j,x0/7,pi/d,x3/4,s11,x5/15,pb/p,x0/7,s2,x10/1,s4,x11/0,s13,x10/5,s13,pn/c,x4/14,pj/g,x7/9,s12,x13/11,pb/i,x8/15,s13,x7/12,pd/f,s14,x11/14,pn/k,x9/7,s7,x8/1,s10,x9/4,s4,x2/6,ph/c,x8/5,pi/d,x0/15,s3,x6/5,s6,x11/0,pg/p,x2/5,s1,x12/14,pj/k,x13/5,pm/a,x3/10,pl/f,x1/2,s7,x11/5,pn/k,x10/7,s13,x13/14,s3,x2/0,s5,pd/e,x7/14,s11,x11/4,pa/m,x13/14,s3,x6/1,s7,x14/5,s6,x11/6,pc/p,x3/14,s15,pm/g,x10/6,pb/k,x5/13,s1,x1/11,s6,pg/c,x4/12,s9,x9/0,s7,x7/15,s15,x14/1,pp/j,x9/10,pg/l,x0/2,po/j,x14/3,pn/k,x6/10,s14,x8/1,s3,x0/4,pi/a,x7/11,pj/l,x1/0,s3,x10/6,s5,x1/14,pa/k,x8/7,s1,x3/1,s9,x9/4,s13,x13/2,pn/h,x3/4,s4,x8/6,s14,x9/13,s15,x4/1,s1,x2/12,s3,x11/7,pm/c,x4/14,pb/l,s4,x5/2,s8,x3/4,pm/f,x12/9,pp/g,x8/14,s7,x12/13,pk/l,x6/4,pb/i,x1/13,s10,x3/2,s13,x1/11,pf/k,x12/9,s10,x11/3,s11,x4/9,pp/n,x15/0,pf/o,x1/2,s12,x6/11,s15,x4/9,pd/i,x6/3,s6,x12/7,pj/n,x9/8,s9,x10/2,s5,x12/8,s3,x1/4,s10,x2/7,pb/k,x0/5,s4,x15/10,pn/l,x3/9,s14,x0/2,pp/i,x11/8,s6,x4/13,pg/m,x3/15,s2,x8/9,s9,x12/3,s1,x10/4,pe/i,x9/15,s4,pf/l,x8/2,s10,pa/n,x4/11,pk/b,x1/9,s10,pf/a,x15/2,s15,x12/10,pg/k,x1/11,pl/e,x14/8,pi/a,x11/12,s9,x2/1,s14,x6/7,pc/m,x9/4,ph/n,x15/11,s10,x1/0,pj/e,x5/4,s3,x8/2,s6,x3/11,pm/c,x1/12,pn/l,s12,x10/8,s4,x7/11,pk/h,x15/5,pc/l,x7/10,s5,x9/4,s14,x6/12,po/d,x8/13,pa/c,x6/14,s13,x10/11,s6,x8/7,s4,pb/m,x2/5,pa/g,s12,x7/0,pj/k,x14/11,pg/d,x8/0,s15,x4/13,pc/i,x15/8,s7,pg/a,x1/4,s10,x2/0,s13,x10/13,s6,x1/7,s13,x15/11,pe/o,x0/12,s10,x10/3,s12,x6/9,pl/f,x3/14,pn/e,x12/0,s15,x4/7,s10,x5/13,s11,x6/12,s5,x14/8,s12,x15/13,s13,x1/4,s14,x13/0,s12,x2/8,s11,x15/13,s14,x6/4,s1,x1/7,s1,x11/2,s9,pc/b,x10/1,pg/k,x0/15,pa/h,x5/3,s7,x13/0,s1,x8/6,s11,x2/3,pm/c,x1/14,s6,x10/13,ph/p,x15/12,pd/g,x5/4,s14,x11/13,s8,x14/1,pk/h,x3/13,s7,x9/4,s2,pn/g,x2/13,pl/o,s1,x11/15,s15,x4/6,s1,x9/8,pc/e,x15/11,s12,x8/4,po/d,x1/14,pp/f,x15/5,pi/n,x11/6,pd/o,x14/3,s4,pm/j,s10,x1/5,s9,x14/11,s12,x1/12,s13,x5/4,s1,x11/14,s7,x5/6,s10,x3/8,pp/d,x6/13,s2,pf/o,x10/4,s14,x5/6,pm/l,x13/10,s12,x3/5,pg/j,x11/15,pm/o,x3/7,pn/e,x10/13,pf/c,x8/4,s12,x14/13,s13,x5/12,s6,x1/0,s5,x9/7,pm/i,x1/5,pd/c,s8,x11/2,s3,x0/10,s8,x13/7,s7,x9/11,s8,x12/8,s13,x7/9,s11,x6/10,s14,x9/5,s14,x7/1,s1,pe/b,x12/5,ph/g,x3/7,s9,x6/10,s8,x9/13,pm/l,x12/8,s12,x6/15,s5,x2/3,s4,x0/11,s7,x3/6,pn/k,x2/4,s3,x9/1,s11,x11/6,s3,x9/1,s14,x15/2,s3,x3/11,pe/m,x0/15,po/j,x5/12,pa/d,x7/9,s2,pl/p,x1/2,s6,x14/8,s3,pj/e,x5/9,s1,x8/2,pi/n,s8,x9/13,s4,x7/15,pd/o,x9/6,pi/p,s8,x13/12,pc/h,x0/9,s6,x8/5,pm/i,x4/12,s12,x9/2,s7,x6/14,ph/g,x5/9,pe/f,x15/7,pi/c,x11/6,s12,x13/10,s11,x12/15,pj/g,x14/8,s14,x2/13,s9,x5/0,s11,x4/3,s15,x1/10,pf/m,x12/11,po/e,x10/2,s8,x8/1,s3,x6/10,pc/g,x2/11,s1,x4/7,pj/o,s14,x6/15,s13,pm/f,x4/9,pc/k,x7/8,pd/h,x2/15,pj/l,x10/7,pi/e,x9/11,s4,x2/13,s15,x0/5,s6,x3/8,s12,x11/4,s10,x14/1,pf/n,s15,x10/12,s14,x11/1,pd/m,x12/15,s4,x6/13,pi/n,x2/8,s14,x7/1,s8,x6/15,pc/f,x4/9,s15,x0/2,s9,x14/12,s8,x6/5,s8,x3/2,pb/g,x0/10,s15,x1/11,s2,x6/12,s15,x2/14,pc/d,x0/8,pg/f,x1/3,s10,x10/2,pp/e,x4/7,s14,x6/8,s11,x0/4,pm/n,s11,x10/3,s1,x15/13,pi/h,x12/9,pc/j,x0/5,s5,pl/b,x14/7,s6,x11/8,s14,x4/2,s8,x10/0,pd/i,x7/9,s13,x3/0,pp/e,x5/6,s8,x7/12,ph/d,x2/14,pa/c,x15/0,s12,x9/12,s11,x2/14,pe/p,x10/7,po/n,x13/11,pg/k,x15/12,s9,x2/9,s15,x6/4,s4,x5/10,s13,x4/1,s1,x9/7,pf/c,x1/2,s11,x4/15,s11,x1/8,pe/h,x12/7,s15,x13/1,s7,pp/c,x6/5,pl/e,x10/3,s12,x13/15,s1,x0/1,pi/o,x14/2,s10,x13/1,s15,x7/15,s5,x11/1,s6,x13/10,pl/k,x0/1,pf/d,x7/12,s2,x13/6,s5,x10/1,s10,x6/13,pc/b,x3/0,pn/d,x12/8,pf/j,s11,x0/15,s9,x10/12,pg/n,x3/13,po/k,x14/10,s8,x7/1,pd/i,x10/3,s13,x11/6,s2,x12/0,s4,x8/14,pk/j,x15/10,pi/h,x9/0,s12,x10/12,pc/p,x5/3,pl/m,x0/12,s8,x10/5,pe/g,x7/0,s15,x5/11,pk/d,x6/0,s1,x1/9,pe/m,x5/13,s7,x12/15,pl/j,x10/2,s12,x0/13,s13,x5/3,s4,x0/13,pc/g,x1/6,s1,x13/5,pj/a,x3/15,s8,x10/9,pc/f,x1/7,s5,x11/6,s13,x1/5,s6,x9/2,po/m,x15/6,s3,x0/3,pn/e,x15/6,pp/b,x14/9,s13,x3/12,s3,x8/0,pi/e,s3,x1/13,s13,x5/0,s14,x3/14,s11,x7/4,s10,x2/3,s12,x15/13,s9,x7/5,ph/l,x3/0,pj/n,x1/6,s1,x12/3,pl/b,x0/1,pf/o,x14/15,s12,x13/5,pa/e,x6/1,s13,x12/11,pc/b,x0/1,pi/h,x2/10,pk/l,x5/12,s2,x8/7,s1,x15/5,pf/o,x9/1,pd/l,s4,x5/14,pm/c,x3/9,pa/h,x0/15,po/p,s1,x5/1,s7,x0/14,pi/e,s2,x10/6,s11,x9/12,pg/a,x6/10,s14,x14/11,pd/b,x8/12,s1,x9/13,pg/h,s11,x4/0,s10,x13/10,s3,x15/9,pn/b,x2/0,s2,x13/5,s2,x1/6,s4,x4/12,s6,x1/5,s2,pg/m,x4/13,s1,x14/0,s5,x11/8,s6,x10/12,pe/p,x9/8,s7,x10/3,s7,x6/8,s5,x10/14,pg/a,x3/15,pk/c,x2/7,pa/b,x1/13,s11,pi/c,x11/9,s7,x2/3,s11,x10/4,s15,po/g,x15/7,s5,pc/e,x8/3,s10,x10/14,s2,x1/8,s6,x7/6,s11,x2/0,pm/k,x8/9,s1,x13/10,s7,x3/14,pg/p,s10,x2/8,s6,x1/4,pj/l,x11/12,s8,x1/5,s12,x15/13,s2,x1/3,s4,x13/2,s15,x7/5,s15,pn/c,x14/8,s10,x6/9,s3,x8/7,s3,x0/2,pe/g,x8/13,pj/i,x9/11,s10,x13/12,s6,x6/10,s8,x3/4,po/p,x13/10,pk/l,x4/12,pb/e,x0/5,ph/n,x6/11,s10,x1/14,s3,x8/7,s11,x5/13,s7,x10/9,pd/b,s1,x7/15,pn/f,x8/13,s12,x2/0,po/k,x15/12,s7,x8/10,pl/h,x2/6,s7,pf/m,x5/10,s5,x13/7,s8,x12/8,pg/d,x4/14,pm/c,x0/9,pk/j,x6/5,s11,x14/9,s10,pe/g,x8/1,s13,x3/2,s1,x15/5,s2,x9/6,s5,x4/5,s1,x13/10,pp/j,x15/5,s14,x12/4,s10,x2/1,pf/i,x5/8,s7,x14/9,ph/o,s4,x8/5,s7,pm/n,x14/2,s13,x3/5,s7,x13/8,s14,x10/3,s8,pe/o,s4,x14/1,s9,x3/10,s7,x4/0,s13,x3/1,pn/i,x11/0,pk/f,s7,x15/6,s3,x13/8,s3,ph/c,s5,x11/14,s6,x7/15,s9,x11/12,s10,x0/7,pb/d,x6/5,s14,x4/13,pj/e,x3/11,pc/b,x6/10,pg/m,x7/8,s5,x2/1,s7,x5/10,po/d,s9,x3/14,pk/c,x4/11,pa/e,x5/15,s11,x14/1,pb/i,s2,x0/3,s13,x15/13,s1,x3/0,s9,x2/6,pm/e,x15/4,pi/o,s5,x14/9,pf/b,x2/4,pd/h,x3/8,pc/f,x14/0,pl/a,x8/2,s8,x15/9,s7,x2/1,pi/j,x5/8,s7,x1/12,s4,x4/10,s13,pc/g,s7,x6/7,s11,x10/8,s4,x2/15,pe/l,x0/12,s2,x11/7,s8,x1/13,pm/b,x14/15,s8,x0/4,s8,x1/10,pf/p,x15/6,pi/b,x3/7,s12,x9/12,s7,x4/15,s15,x8/6,s12,x10/11,pa/f,x2/14,s4,x6/4,s13,x14/13,pd/l,s9,x4/2,s1,x8/7,s2,x9/11,pi/b,x2/8,ph/a,x1/9,pg/f,x2/12,s12,x5/8,pd/l,s15,pa/f,x13/3,s7,x6/5,s6,x0/9,s7,x5/13,pi/p,x10/11,pk/o,s5,x8/15,s5,x0/10,pp/l,x11/9,pf/i,x8/14,po/d,x15/13,s1,x1/7,pb/i,x11/5,pl/f,s14,x12/15,s4,x11/0,s1,x15/14,s1,x4/0,s11,x8/9,s1,x6/1,s11,x5/8,pm/i,x9/7,ph/d,s13,x8/4,pp/n,x1/12,pj/b,x3/9,s1,x8/15,ph/p,x11/1,s11,x9/12,s4,x10/0,pg/k,s12,x14/2,pi/e,x3/1,s3,x13/7,s5,x2/6,s9,x4/13,s1,x0/14,pk/g,x13/8,s3,x1/9,s12,x15/5,pm/d,x11/2,pc/g,x13/5,pb/m,x1/14,pa/o,x11/0,s5,x15/10,s3,x8/4,pd/n,x10/5,pe/b,x8/13,s15,x7/5,pa/g,x4/1,s7,x11/6,pb/f,x9/2,pp/d,x10/8,pf/h,x12/3,pc/g,x0/13,s13,x9/1,s13,x10/0,pk/b,s5,x5/4,pd/p,x8/11,s15,x15/4,pg/b,x5/10,pc/f,x9/12,ph/k,x0/10,s10,x6/3,s3,x7/11,pb/l,x15/12,pj/n,x13/5,s14,x12/11,pd/l,x9/6,pf/b,x4/2,s8,x8/9,s13,x6/10,pa/g,x9/0,s4,x4/2,s13,x7/8,s8,x12/11,pb/f,x4/15,po/j,x12/7,s4,x9/4,pe/a,x6/13,s2,x7/4,s14,x5/15,s13,x6/12,s4,x11/5,s13,x8/1,pm/c,x5/10,pb/h,s3,x11/13,s10,x3/9,pm/p,x2/15,pe/h,s13,x8/5,s1,x9/7,s4,x3/4,pa/j,x6/0,pg/e,s14,x1/10,pf/n,x15/12,s15,x3/8,po/k,x0/2,s2,x3/1,s2,x12/6,pe/g,s7,x9/10,pj/i,s1,x6/8,s7,x14/13,s7,x5/3,pg/a,x11/0,s13,x3/14,pe/f,x15/2,s14,pm/k,x12/9,s1,pp/n,x6/15,s9,x12/2,s2,x14/0,s15,x10/5,s13,x15/13,pd/g,x4/6,s8,x3/14,pe/p,x9/1,s15,x15/11,s5,x14/12,s4,x5/7,pg/c,s10,x9/12,s8,x5/1,s10,x4/0,s6,x5/11,s9,x14/1,s1,x12/7,s2,x2/10,s14,x7/12,s8,x13/14,s6,x2/0,pm/k,x8/9,s9,x4/5,s4,x2/7,pc/h,x11/6,pm/b,x2/14,s14,x13/7,s14,x2/3,pe/d,s13,x4/15,s15,x13/10,pp/b,x11/6,pf/o,x13/0,pj/e,x3/10,s13,x6/2,s10,x13/10,pb/d,x11/6,s15,x4/2,pi/g,x11/7,s3,x15/4,pj/e,s11,x8/12,po/c,x7/5,s13,x13/10,s6,x6/8,s12,x5/11,s5,x7/9,s13,x6/3,s14,x11/10,pa/p,x9/1,pn/m,x6/4,pd/a,x7/14,po/j,x10/2,s9,x8/12,pm/e,s3,x5/10,s13,x12/7,s9,x13/1,s3,x9/6,s4,x14/2,s6,x0/1,s13,x10/9,s11,x14/5,pf/a,x15/9,ph/j,x8/0,s14,x10/15,s14,x5/1,pb/o,x8/0,s10,x14/10,s7,x11/9,s7,x10/4,pj/e,x2/0,pn/o,x8/12,s4,pa/d,s11,x6/15,s3,x10/0,po/h,x11/1,s9,x6/3,pk/i,x9/5,s11,x13/12,s9,pl/f,x0/6,s14,x9/5,s13,x1/7,s12,x14/13,pc/e,x9/6,s11,po/a,x4/1,pd/p,s7,x2/13,pk/o,x4/0,pb/c,x15/9,pg/j,x0/8,s2,x7/11,pc/n,x2/13,pb/i,x5/15,s1,x2/10,s3,x14/13,pd/a,x5/3,pe/n,x1/0,s2,pk/g,x13/6,pl/a,s4,x0/10,s12,x6/11,pi/n,x0/5,pb/d,x2/7,s5,x11/9,s8,x12/7,s11,pn/c,x11/1,s4,ph/g,x7/15,s11,pl/k,x9/0,po/p,x7/5,pm/j,s3,x11/0,s15,x1/9,s1,x11/10,pg/p,x8/6,pc/l,x14/2,pe/h,x9/0,s3,x3/12,s5,pf/l,x4/0,s14,x11/1,s9,x9/5,ph/d,x2/11,pm/e,x12/0,s15,x11/10,ph/f,s9,x2/4,s10,x11/13,s6,x1/15,po/d,x11/9,pc/p,x1/12,s6,x15/11,s6,pn/e,x1/4,s6,po/k,s10,x2/0,pl/m,x13/9,pp/n,x6/8,pk/c,x10/4,pa/d,x9/7,pe/f,x5/14,s8,x10/1,pm/g,x3/6,pk/b,x11/9,pl/g,x14/4,pi/h,s11,x3/2,s2,x1/13,pc/p,x9/14,s6,x8/6,s14,x5/13,s9,pi/k,x1/11,s7,x0/4,s11,x5/11,s4,x12/0,s7,x1/2,pl/o,x12/10,s10,pc/e,x1/11,s1,po/n,x2/4,s3,x7/6,pk/p,x5/4,pc/e,x7/9,pm/b,s7,x1/6,s8,pj/a,s6,x12/11,pk/h,x10/6,s4,x11/1,s13,x3/4,s5,x10/9,s15,x2/3,pi/p,x12/7,s2,x6/1,s13,x10/15,ph/d,x1/11,pn/p,x9/8,pf/o,x15/6,s11,x13/12,pe/j,x15/11,s4,x14/13,s3,pb/i,s7,x0/1,po/l,x4/5,s3,x2/3,pi/c,x15/7,s5,x2/9,s3,x14/15,s3,x3/11,s1,x13/2,s14,x8/9,pp/o,s12,x2/5,s13,x3/14,s13,x11/9,s14,x0/4,pl/f,x9/12,s1,x0/3,s11,x4/2,pp/i,x8/10,po/c,x6/0,s5,x11/7,s8,x5/8,s5,x3/4,s4,x1/12,s14,x11/14,s2,x9/3,s11,x5/10,pg/f,x14/7,s8,x3/0,pi/h,x9/4,s7,x3/5,pm/f,x2/9,s3,x0/14,s11,x12/7,s8,pb/l,x6/5,pp/j,x12/10,s5,x15/11,pl/d,x7/4,s10,x14/9,s5,x0/6,s9,x7/9,s8,x3/14,s15,x15/13,s12,x10/1,pp/e,x9/2,s13,x3/8,ph/a,x14/7,s1,x9/11,pb/c,x5/1,s1,x15/7,s9,x11/2,s3,x6/3,s15,pl/k,x1/9,s14,x5/15,pn/h,x12/2,pp/c,x13/9,pd/m,x5/0,pa/f,x13/11,s6,x10/3,pd/o,x1/15,s10,x10/3,s7,x13/4,pg/e,s15,x14/2,pi/l,x7/8,s4,x15/3,s14,x0/8,s15,x14/2,ph/g,x13/6,pi/n,x10/1,pe/b,x5/6,s7,x11/12,s8,x6/2,s1,x13/9,s10,x15/3,s7,x14/8,s4,pg/n,x1/9,s13,x12/3,s6,pa/h,x14/9,s1,x2/3,pc/m,x7/6,pa/k,x14/15,pj/g,x11/8,pe/i,x14/1,s4,x15/13,s15,x11/7,pl/k,x8/4,pn/f,x12/6,s7,x4/1,s8,x11/2,s4,x9/0,pd/b,x8/2,s3,x4/7,pi/a,x1/2,s1,x10/3,s7,x6/11,pk/l,x3/0,s3,x11/7,s7,x4/15,pn/d,x0/9,s11,po/b,x14/3,s3,pa/i,x11/2,s4,x9/3,pm/d,x1/14,pb/p,x13/0,po/m,x14/4,pg/b,x5/13,pf/h,x9/10,pn/p,x7/11,s10,x6/5,pk/h,x15/10,s12,x12/1,s6,x11/4,s11,x5/2,s6,x13/15,s14,x10/12,s4,x1/15,s7,x8/2,s15,x12/4,pc/p,x1/6,s13,x8/2,pi/d,x5/0,pj/e,s13,x2/3,s11,x1/14,pm/n,x2/9,s11,x13/15,s10,x7/5,s4,x6/2,pd/o,x12/11,pi/n,s9,x2/3,pl/d,x12/6,s14,x2/14,pa/n,x7/13,ph/l,x3/8,pd/b,x7/15,pf/g,x3/13,pb/j,x0/2,pi/d,x12/7,s11,x1/11,s13,x5/14,s4,x3/11,s13,x4/1,s12,x11/9,s7,x8/12,s3,x13/4,s8,x5/3,pp/m,x0/11,s4,ph/l,s7,x9/15,pc/p,x4/1,pa/k,s4,x15/6,pj/d,x4/11,s14,x14/12,po/g,x9/1,s2,x11/14,s7,x10/4,pn/a,x8/13,ph/p,x6/12,s13,x3/0,s15,pb/d,x11/15,s1,x13/3,s1,pa/e,s7,x12/9,po/c,x3/2,pg/k,x7/1,s2,x13/10,pc/b,x5/12,s8,x10/14,pd/h,x7/6,pl/p,x0/1,s12,x10/4,s8,x1/15,s2,x12/6,s12,x13/14,s6,x11/7,pn/g,x9/10,s10,x2/8,s11,x5/9,s13,pe/c,x13/11,s12,x4/15,s5,x2/13,s4,x10/12,s10,x1/6,po/h,x13/15,pk/i,s9,x3/5,s4,x6/8,s15,x2/9,s11,x14/15,pd/a,x4/5,pl/f,x15/0,pd/g,x13/5,s4,x10/2,pi/h,x7/4,s14,x0/10,pj/c,s11,x4/12,s2,x14/13,s15,x5/10,pl/h,x11/9,pe/n,x15/5,s12,x6/7,s13,x0/9,s15,x7/1,s10,pk/b,x0/9,pj/n,x15/5,po/b,x0/13,s14,x5/4,s10,x0/11,s12,x5/8,ph/j,s13,x0/15,pk/g,x2/9,ph/a,x15/6,s7,x3/7,s14,x1/8,pb/g,s10,x11/15,s9,x9/8,s5,x11/5,pk/p,x7/14,s5,x2/8,s13,x13/3,s15,x1/12,s3,x14/13,s8,x3/7,po/l,s12,x2/4,pp/n,s9,x13/6,s15,x10/3,s6,x8/7,pa/o,x15/0,pp/m,x2/4,pk/l,x6/0,s9,po/i,s11,x13/10,s1,x11/0,ph/e,s14,x8/10,pa/i,x13/4,s4,x3/7,s5,x5/9,pe/j,x1/8,pn/p,x13/9,pj/h,x12/15,s11,x0/11,s12,x13/9,s11,x4/11,pf/i,s9,x9/10,s7,x1/11,s12,x0/4,pp/o,s1,x5/10,s12,x9/12,s15,pg/j,s10,x0/4,s9,x3/13,pa/i,s12,x0/4,pd/n,x5/1,pj/m,x15/11,s15,x9/3,pd/k,s4,x11/15,s6,x4/9,s13,x7/14,pm/g,x3/8,s15,x4/13,s3,x10/14,s12,x12/15,pj/o,x4/14,pl/d,x10/12,s12,x15/5,pb/e,x10/11,s2,x15/13,s2,x0/3,s13,x8/12,s3,x9/6,s13,x0/15,s1,x13/5,pi/j,x0/14,s15,x1/13,s3,pc/m,x5/11,s15,x10/7,s4,x11/13,pk/p,x3/4,s2,x6/7,pf/b,x0/3,pl/j,x11/1,pg/b,s7,x15/10,s6,x1/12,s8,x9/3,pj/a,x13/11,s2,x9/3,s6,x5/7,pd/e,x6/8,s15,x3/0,s12,x4/2,pg/j,s7,pe/b,x12/0,pj/h,s5,x2/9,s12,x15/6,pm/b,x11/4,s10,x2/8,s8,x9/3,s7,x11/5,pk/c,x6/3,s12,x10/0,s14,x15/5,pi/b,s11,x3/4,s2,x13/14,s11,x6/12,s15,x2/5,pp/d,x4/7,s15,x14/8,s1,x3/12,s11,x0/14,s13,x12/5,pj/i,x2/15,pa/f,x9/8,s1,x14/10,s4,x1/2,pc/l,x14/9,s8,x7/10,s5,x1/3,pk/g,x9/14,s12,x11/7,s5,x10/8,s15,x15/9,ph/l,x2/1,s14,x11/4,s10,x6/5,s14,x7/14,s3,pf/b,x4/15,pd/k,x13/1,s6,x6/9,s4,x12/15,s6,x1/13,s4,x11/2,pf/h,x4/12,s4,x9/10,s2,pn/l,x1/8,s10,x9/15,s8,x2/6,pi/g,x4/13,s7,x15/0,pn/j,x7/13,s2,x0/11,s6,x9/4,po/i,x13/10,s5,x3/0,s10,x8/7,s8,x0/12,s13,x4/3,s1,x2/5,s3,x8/15,s8,x0/10,pe/k,s7,x8/15,s6,pd/p,x3/6,s5,x15/1,ph/o,x10/0,pc/l,x15/14,s8,x6/12,s6,x15/5,pi/e,x1/11,s6,x3/5,s5,x2/11,s3,pl/k,x15/1,s14,x3/12,s1,x5/0,pn/h,x8/7,pd/p,s12,x5/15,pm/j,x4/6,s11,x10/9,pk/a,s4,x13/0,s12,x6/5,s5,x14/8,s11,x15/7,s2,x14/4,s11,pd/h,x11/15,s3,x2/1,pc/o,x0/8,s15,x15/3,pl/m,x7/6,pi/j,x4/14,s2,pg/d,s13,x13/3,s11,x5/10,pc/b,x2/8,s13,x14/1,pj/d,x11/8,po/i,x3/13,s1,x1/11,s10,x7/0,pg/p,x3/13,pa/c,x4/6,s7,x0/9,ph/p,x14/15,s7,x0/5,s5,x13/7,s3,x5/0,pd/l,s4,x1/13,s10,pn/b,x6/15,s1,x3/11,s8,x8/9,pc/e,s5,x12/11,s4,x14/13,pj/d,x9/0,s5,x13/11,pm/c,x3/0,s9,x2/1,pb/k,x14/7,s4,x8/4,s2,pj/l,x9/13,s12,x0/12,po/e,x6/5,pb/n,x12/11,s2,x4/3,s7,x6/12,pm/g,x3/15,s4,x2/9,pj/h,x13/7,s14,x4/10,s2,x11/12,pe/n,x14/10,s2,pl/c,s1,x2/8,s9,x0/9,s7,x13/6,s13,x7/11,ph/k,x15/1,pn/a,x12/3,s13,x10/11,s10,x8/15,pd/o,x3/11,pf/g,x7/12,pn/b,x14/13,po/f,x10/8,s5,x11/15,s2,x6/10,s15,x14/0,s4,x5/15,pm/k,x0/11,pl/j,x10/4,pn/f,s3,pj/m,x14/2,s5,x10/13,s9,x15/14,s13,x2/8,s4,x1/15,pl/k,x9/6,s5,x14/7,s1,x13/1,pi/a,x10/11,s4,pb/g,x1/0,pm/j,x6/12,s12,x2/3,s12,x0/12,s11,x10/5,pd/f,x15/4,s7,x2/0,s4,x6/5,s8,x10/8,s5,x3/12,pj/h,x2/11,s14,x6/1,s6,x8/12,po/a,s6,x2/5,s14,x13/7,pi/j,x15/6,pa/o,x0/1,pb/n,x9/2,pd/j,x12/13,s5,x4/14,s12,ph/f,x1/12,pm/d,x11/10,pn/i,x12/9,s8,x13/15,po/b,x11/12,s11,pj/p,x9/4,s3,x14/1,pk/c,x7/6,s8,x11/0,s1,po/i,x1/15,s6,pc/l,x11/9,s7,x15/2,s14,pi/p,s10,x9/4,s10,x7/12,pn/c,x11/4,s14,x9/3,pm/j,x8/6,pd/l,x3/9,ph/a,x2/15,s3,x5/9,s15,x4/1,pn/f,x10/11,ph/i,x5/0,pa/l,x15/9,s1,x2/8,s3,x1/14,s13,x10/4,s11,x3/0,pb/k,s5,x12/11,po/a,x3/4,s9,x8/14,s5,x9/12,s6,x3/5,s14,pl/k,s4,x6/9,pf/m,x10/14,s2,x2/9,pb/d,x11/4,pf/e,x5/1,s12,x9/12,s3,x0/6,po/c,x1/3,s14,x13/14,s12,x12/15,pi/n,x10/8,s11,pk/f,x7/1,s14,x6/2,s12,x12/13,s6,x6/8,s4,x10/14,pm/d,x11/9,s9,pp/f,x14/3,pe/c,x2/10,s15,x0/7,s11,x5/1,pa/j,x3/8,s2,x6/4,s5,pl/b,x2/15,s5,x3/11,ph/a,x9/12,s8,pd/m,x5/1,s13,x2/13,pb/j,x14/12,pm/a,x3/9,pe/o,s15,ph/p,s8,x2/4,s14,x13/8,pd/b,s5,x10/3,pn/p,x9/15,pl/m,x6/8,pi/k,x3/9,pm/c,x0/13,ph/i,x1/7,pn/k,s12,x9/10,pa/b,x15/8,s5,x2/13,s10,x6/0,s10,x8/2,s15,x12/7,s7,x13/6,s10,x0/4,s5,x2/5,pf/m,x1/7,s1,x8/6,s10,x2/1,pj/b,x13/14,pa/c,x7/3,pm/j,x2/14,s7,x3/8,s12,x14/12,pl/f,x10/6,s14,x14/7,s14,x12/4,s13,x7/13,s14,x0/15,s4,pc/d,x13/11,pn/l,x1/6,s8,x3/7,pc/d,s13,x1/11,s14,x0/9,pl/e,x8/7,pa/m,x6/11,s13,x13/1,s8,pl/g,x4/7,s5,x0/3,s5,x9/1,s4,pc/b,x4/11,pn/j,x7/14,s3,x15/5,s15,x13/12,s9,x9/4,s3,x8/5,s1,x7/4,pi/l,x14/9,pp/c,x8/6,pl/g,x4/12,s7,x5/15,s7,x2/7,pc/m,x12/14,s12,x1/13,s12,x7/8,s10,x3/4,pb/a,x7/8,s7,x2/6,s15,x10/3,s6,x7/15,s8,x10/3,s11,x6/11,s14,x8/9,pk/g,x7/12,pc/a,x11/15,pn/e,x2/10,s12,x5/14,s5,x9/10,s2,x13/3,ph/m,x1/6,pl/d,x13/15,s7,x12/6,pm/o,x11/13,s10,x2/6,pn/c,x8/10,s10,pp/f,x2/0,pb/j,x8/11,pe/p,s12,x10/6,po/f,x11/0,pd/p,s13,x15/9,s15,x1/2,s8,x6/5,po/n,x7/10,s2,x14/5,s10,x1/6,pp/e,x0/11,ph/j,x1/4,s2,x15/7,pb/p,x2/9,s12,x14/10,s5,x6/9,s11,x3/11,s2,x1/5,pd/g,x14/7,s8,x11/0,s12,x12/2,s10,x11/4,pp/b,x12/0,s1,x9/13,pi/a,x15/3,ph/b,x1/4,pd/e,x0/11,pa/n,x15/10,s7,x4/3,pd/e,x15/11,pf/m,x10/7,s10,x0/1,s8,x15/7,s8,x11/6,s6,x3/7,ph/c,x14/1,s9,pm/d,x5/8,pg/b,x2/7,pf/d,s2,x14/10,s2,x15/3,pj/e,x0/5,s7,x3/1,pp/f,x11/6,pd/h,s4,x0/4,pk/o,x6/10,s9,x15/3,s11,x12/5,pl/c,s10,x9/10,pn/f,x8/1,s1,x6/12,s6,x15/2,pp/d,x14/4,s11,x12/6,po/a,x2/10,s4,x8/15,pc/n,x5/11,s6,pi/d,x3/6,s2,x5/12,s3,x3/14,s4,x11/2,s4,x15/6,pl/p,s6,x5/9,s14,x11/0,s15,x4/9,pa/i,x10/15,pb/p,s3,x2/9,pd/f,x10/3,s14,x11/14,s13,x9/10,s5,x7/12,s9,x15/8,s15,x0/3,ph/m,s3,x4/2,pa/c,s13,x12/13,pj/m,x1/2,s8,x7/12,s2,x2/4,po/h,x12/5,pf/c,s10,x6/8,s8,x5/14,s4,x11/4,s11,x10/12,s5,x2/9,s11,x4/14,pj/i,x2/9,s2,x13/12,s11,x5/2,s8,x11/12,s4,x10/7,s14,x5/6,s5,x3/1,s12,x6/10,pg/b,x12/11,pj/f,x3/15,pm/i,x5/9,ph/b,s4,x15/2,po/e,x6/0,s2,x1/8,s14,x13/12,pc/j,x1/6,s3,pn/d,x13/14,s9,x4/11,s4,x7/1,s10,pe/o,x13/10,s11,x8/2,s3,x0/3,s1,x13/1,s11,x2/11,s1,x3/12,s1,x8/2,s8,pk/m,x0/10,pn/i,x8/7,pl/e,x11/14,s11,x3/8,s9,x15/12,pf/b,x4/0,pe/l,x12/8,pm/c,x5/2,pg/o,x14/3,s8,pl/f,s6,x10/0,s12,x2/5,s7,x10/8,ph/o,x3/15,pb/d,x6/12,s3,x2/10,pk/j,s1,pd/b,x6/1,pf/a,x12/10,s3,x0/6,s11,x11/9,s15,x8/12,pc/n,x15/13,s11,x12/11,s6,pp/l,x1/10,s12,pj/c,x6/0,s5,x13/12,s6,x10/14,s10,x5/1,po/n,x0/14,s9,x15/8,pi/e,x13/7,s3,x6/5,po/a,x2/7,s5,x12/14,pb/p,x13/0,pg/i,x9/6,s6,x12/13,s5,pa/j,x10/14,s8,x11/5,s15,x13/9,pf/l,x8/2,pj/c,s6,x5/0,s8,x12/1,pi/o,x14/3,s14,x1/5,s12,x15/4,s12,x7/6,s6,x12/15,s11,x10/13,s9,x3/6,s4,x15/9,s4,pc/b,x4/6,s6,x11/10,s7,x7/0,s9,x10/11,s9,x9/7,s12,x11/14,s13,x9/2,s12,x13/15,pk/p,x7/5,pc/d,x0/2,s9,x1/8,s12,x15/6,s3,x2/7,s3,x3/10,s5,x13/9,s14,x8/3,s12,x9/13,s5,x6/15,pb/n,x0/2,s10,x12/15,pm/e,x13/3,s7,x7/12,pl/k,x11/4,pm/f,x7/9,s2,x14/15,pp/e,x12/5,ph/f,x13/7,pl/k,x6/5,pc/f,s4,x9/15,s5,x14/10,s2,x4/8,pa/j,x7/0,s6,x6/2,s10,x11/14,s5,x0/10,s15,x2/6,pl/p,x0/4,s1,x8/15,s13,x14/3,pj/m,x9/11,pa/e,x14/6,s10,x9/8,pl/f,x14/10,s9,x2/9,s5,x15/10,pb/e,x13/5,s11,x7/6,s8,x5/14,s3,x12/9,s8,x5/0,ph/k,x1/3,s1,x10/13,s12,x3/15,s5,x11/9,pi/p,x7/8,s9,pn/l,x12/11,pe/p,x3/6,po/l,x9/8,s13,x11/14,pi/n,x0/15,pm/k,x10/8,s9,x12/2,s13,x10/4,s5,x3/6,pp/a,x10/11,s9,x0/3,s9,x9/13,s10,x6/14,pk/g,s15,x2/0,s8,x6/5,pp/j,x0/8,pd/o,x12/13,s7,x15/14,s6,x12/11,pc/i,x3/15,s6,x1/6,pe/l,x13/15,pc/f,x6/10,s6,x12/0,s1,x14/5,pk/g,s5,x8/0,s1,x12/4,s11,pj/p,x9/1,s11,x0/12,s14,pb/k,x6/10,s14,x1/2,po/l,x7/3,pn/h,x12/10,s8,x0/11,s11,x5/8,s7,pp/f,x11/7,s7,x6/14,s1,x9/1,s12,x12/0,pe/j,x9/2,s8,x5/14,pl/o,x15/4,pk/b,x0/3,s11,x8/1,pe/o,x3/5,pp/f,x13/10,s12,x1/15,s3,x7/6,po/k,x8/11,pp/b,x5/13,s9,x9/2,s12,x0/6,s5,x10/3,s10,x5/13,pj/k,x1/12,s8,x8/9,pb/d,s7,x13/10,s1,x9/7,s3,pa/g,x1/12,s10,x2/0,pk/h,x12/4,s11,pb/e,x5/6,s5,x9/13,pj/h,x1/4,s1,x6/9,pi/n,x14/15,s10,x8/3,s7,x0/10,s6,x11/12,s2,pf/h,x7/13,s9,x15/8,s11,x10/4,pb/p,x8/0,s6,x9/11,po/k,x4/10,ph/j,s4,x6/5,pc/n,x13/2,s1,x0/12,s12,x4/8,pa/l,x7/11,pd/h,x13/10,s5,x1/4,s3,x3/0,pg/e,x10/15,s13,x12/14,pd/i,x11/7,pe/h,x0/15,s12,x10/6,s9,x8/3,s12,pc/d,x14/1,pj/p,x8/0,s6,x5/2,s11,x13/4,pi/o,x1/8,s3,x3/15,pd/f,s12,pj/e,x1/5,pp/b,x8/9,s15,x0/5,pg/c,s2,x15/6,pn/k,s7,x11/5,s3,x0/8,pm/p,x15/10,s7,x8/4,s4,x9/15,s3,x0/11,s12,x9/8,s2,x0/15,pc/k,x12/2,s15,x15/8,s1,x10/4,s15,x6/12,pd/n,x4/7,pl/k,x11/5,s3,pc/m,s10,x6/15,s2,x5/10,s1,x7/1,s5,x4/5,pg/e,x10/8,s13,x3/4,s11,x15/7,pm/b,x10/13,pi/a,x5/9,pd/n,s3,x15/11,s7,x3/14,pc/p,x11/15,s14,x4/2,pj/o,x5/14,pb/g,x12/11,s7,x6/0,s10,pm/d,s7,x15/3,s9,x7/2,s6,x14/9,pp/k,x10/5,s4,x3/7,s5,x11/12,s4,x0/5,pg/f,x9/2,s2,x11/6,pb/i,x15/0,pm/h,x11/3,s1,x14/4,pg/d,x7/13,s15,x15/1,s13,x9/14,pa/j,x12/7,pe/o,x13/2,s12,x14/0,pd/a,x5/1,s7,x12/2,s7,pi/l,x10/4,pn/g,x14/3,s7,x2/9,pi/e,x1/11,pf/l,x15/12,s7,x8/2,pi/k,x10/14,s13,x0/2,ph/c,x9/15,pd/e,x4/8,s5,ph/m,x15/7,s8,x11/13,s4,x8/9,s13,x1/12,pj/d,x6/3,pl/k,x5/4,s2,x8/13,s3,x6/15,s4,x4/13,s15,x10/6,pf/a,x0/3,s6,po/e,x7/4,s7,x8/5,pb/d,x15/4,ph/o,x8/1,s9,x9/0,s11,x4/5,pl/f,x7/3,pm/d,x12/2,s12,x4/0,s6,x5/14,s5,x11/12,pe/k,x7/6,s4,x2/10,pj/d,x1/7,s4,x9/14,s1,pl/k,s8,pa/g,x3/2,s8,x5/6,s2,pf/k,x10/13,pn/m,x1/15,s6,x13/0,s5,x11/5,s15,x1/9,s1,x13/3,s15,x8/11,pd/a,x10/15,s8,x4/5,s1,x1/9,s5,pg/f,x12/11,s12,x14/7,ph/k,x15/4,pm/p,s2,x13/0,pl/o,x2/10,s3,x11/14,pi/j,s9,x4/7,pn/p,x12/6,s13,x7/4,s1,x9/8,s13,pk/e,x13/2,pf/l,s11,x9/0,pm/h,x1/3,pl/a,x11/4,s1,x0/9,pf/d,s5,x10/2,s5,pm/j,x11/14,s10,x10/3,pd/h,x9/13,s12,x5/14,s10,x6/7,pm/k,s3,x2/9,s8,x11/6,s15,x14/5,pa/l,x7/13,s9,x2/11,pj/p,x3/13,s10,pc/m,s2,ph/j,x10/4,pl/m,x11/1,s15,x14/13,s8,x7/12,s13,x0/13,s5,x5/9,s14,x0/8,s6,x11/13,pk/a,x0/4,s10,x11/7,pm/d,x2/5,pl/n,x11/7,pk/c,x14/8,s11,x2/0,s11,x13/6,s8,x11/12,s14,x10/1,pn/l,x12/5,ph/m,x6/10,pi/a,x13/8,pl/c,x2/3,pg/e,x10/8,s7,x3/5,s2,x0/8,po/k,x14/3,pl/f,x4/10,pe/i,x6/8,pp/l,x11/9,pc/f,s8,x4/7,s1,pn/l,x8/15,pa/p,x11/12,s3,po/i,s1,x14/7,pj/f,x5/3,s12,pi/d,s15,x4/7,s3,x14/15,s8,x6/3,s11,x13/10,s14,x9/3,s1,x5/7,s7,x10/3,pb/l,x9/13,pc/n,x14/0,pd/h,x10/2,s8,x7/0,s10,x14/1,s10,x6/9,s15,x1/14,s14,x12/5,s13,x13/3,s10,x10/14,s8,x9/12,pa/o,x0/11,pg/c,x1/8,pj/m,s12,pd/c,x5/11,s8,x3/0,po/l,x15/5,pp/d diff --git a/2017/d17/ex1/ex1.py b/2017/d17/ex1/ex1.py new file mode 100755 index 0000000..ad650a7 --- /dev/null +++ b/2017/d17/ex1/ex1.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python + +import collections +import sys + + +def solve(input: str) -> int: + def parse(input: str) -> int: + return int(input.strip()) + + lock = collections.deque([0]) + step = parse(input) + for i in range(1, 2017 + 1): + lock.rotate(-step) + lock.append(i) + return lock[0] + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d17/ex1/input b/2017/d17/ex1/input new file mode 100644 index 0000000..66a899a --- /dev/null +++ b/2017/d17/ex1/input @@ -0,0 +1 @@ +377 diff --git a/2017/d17/ex2/ex2.py b/2017/d17/ex2/ex2.py new file mode 100755 index 0000000..5fab2dc --- /dev/null +++ b/2017/d17/ex2/ex2.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python + +import collections +import sys + + +def solve(input: str) -> int: + def parse(input: str) -> int: + return int(input.strip()) + + lock = collections.deque([0]) + step = parse(input) + for i in range(1, 50000000 + 1): + lock.rotate(-step) + lock.append(i) + return lock[lock.index(0) + 1] + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d17/ex2/input b/2017/d17/ex2/input new file mode 100644 index 0000000..66a899a --- /dev/null +++ b/2017/d17/ex2/input @@ -0,0 +1 @@ +377 diff --git a/2017/d18/ex1/ex1.py b/2017/d18/ex1/ex1.py new file mode 100755 index 0000000..daa8cdf --- /dev/null +++ b/2017/d18/ex1/ex1.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python + +import collections +import enum +import sys +from typing import NamedTuple + + +class Op(enum.StrEnum): + SND = "snd" + SET = "set" + ADD = "add" + MUL = "mul" + MOD = "mod" + RCV = "rcv" + JGZ = "jgz" + + +class Instruction(NamedTuple): + op: Op + x: str + y: str | None = None + + @classmethod + def from_str(cls, input: str) -> "Instruction": + op, *rest = input.split() + return cls(Op(op), *rest) + + +def solve(input: str) -> int: + def parse(input: str) -> list[Instruction]: + return [Instruction.from_str(line) for line in input.splitlines()] + + def resolve(y: str | None, registers: dict[str, int]) -> int: + assert y is not None # Sanity check + try: + return int(y) + except ValueError: + return registers[y] + + instructions = parse(input) + registers: dict[str, int] = collections.defaultdict(int) + + ip = 0 + freq: int | None = None + while True: + assert 0 <= ip < len(instructions) # Sanity check + instr = instructions[ip] + ip += 1 + match instr.op: + case Op.SND: + freq = resolve(instr.x, registers) + case Op.SET: + registers[instr.x] = resolve(instr.y, registers) + case Op.ADD: + registers[instr.x] += resolve(instr.y, registers) + case Op.MUL: + registers[instr.x] *= resolve(instr.y, registers) + case Op.MOD: + registers[instr.x] %= resolve(instr.y, registers) + case Op.RCV: + if resolve(instr.x, registers) != 0: + assert freq is not None + return freq + case Op.JGZ: + if resolve(instr.x, registers) > 0: + ip += resolve(instr.y, registers) - 1 # Account auto-increment + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d18/ex1/input b/2017/d18/ex1/input new file mode 100644 index 0000000..ea1762c --- /dev/null +++ b/2017/d18/ex1/input @@ -0,0 +1,41 @@ +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 diff --git a/2017/d18/ex2/ex2.py b/2017/d18/ex2/ex2.py new file mode 100755 index 0000000..c9ca81b --- /dev/null +++ b/2017/d18/ex2/ex2.py @@ -0,0 +1,121 @@ +#!/usr/bin/env python + +import collections +import dataclasses +import enum +import sys +from typing import NamedTuple + + +class Op(enum.StrEnum): + SND = "snd" + SET = "set" + ADD = "add" + MUL = "mul" + MOD = "mod" + RCV = "rcv" + JGZ = "jgz" + + +class Instruction(NamedTuple): + op: Op + x: str + y: str | None = None + + @classmethod + def from_str(cls, input: str) -> "Instruction": + op, *rest = input.split() + return cls(Op(op), *rest) + + +@dataclasses.dataclass +class Program: + instructions: list[Instruction] + id: dataclasses.InitVar[int] + registers: dict[str, int] = dataclasses.field(init=False) + ip: int = dataclasses.field(init=False, default=0) + + receive_queue: collections.deque[int] = dataclasses.field( + init=False, default_factory=collections.deque + ) + send_queue: collections.deque[int] = dataclasses.field( + init=False, default_factory=collections.deque + ) + values_sent: int = dataclasses.field(init=False, default=0) + + def __post_init__(self, id: int) -> None: + self.registers = collections.defaultdict(int) + self.registers["p"] = id + + def _resolve(self, y: str | None) -> int: + assert y is not None # Sanity check + try: + return int(y) + except ValueError: + return self.registers[y] + + def execute(self) -> None: + while True: + assert 0 <= self.ip < len(self.instructions) # Sanity check + instr = self.instructions[self.ip] + match instr.op: + case Op.SND: + self.send_queue.append(self._resolve(instr.x)) + self.values_sent += 1 + case Op.SET: + self.registers[instr.x] = self._resolve(instr.y) + case Op.ADD: + self.registers[instr.x] += self._resolve(instr.y) + case Op.MUL: + self.registers[instr.x] *= self._resolve(instr.y) + case Op.MOD: + self.registers[instr.x] %= self._resolve(instr.y) + case Op.RCV: + if not self.receive_queue: + return # Block and wait for a value to be sent + self.registers[instr.x] = self.receive_queue.popleft() + case Op.JGZ: + if self._resolve(instr.x) > 0: + self.ip += self._resolve(instr.y) - 1 # Account auto-increment + self.ip += 1 + + @property + def is_terminated(self) -> bool: + # Has the program jumped outside the instructions + return self.ip < 0 or self.ip >= len(self.instructions) + + @property + def is_blocked(self) -> bool: + if self.is_terminated: + return True + # Is it blocked on a `RCV` + return self.instructions[self.ip].op == Op.RCV and not self.receive_queue + + +def solve(input: str) -> int: + def parse(input: str) -> list[Instruction]: + return [Instruction.from_str(line) for line in input.splitlines()] + + instructions = parse(input) + p0, p1 = Program(instructions, id=0), Program(instructions, id=1) + + while True: + if p0.is_blocked and p1.is_blocked: + return p1.values_sent + + p0.execute() + p1.execute() + + p0.receive_queue.extend(p1.send_queue) + p1.send_queue.clear() + p1.receive_queue.extend(p0.send_queue) + p0.send_queue.clear() + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d18/ex2/input b/2017/d18/ex2/input new file mode 100644 index 0000000..ea1762c --- /dev/null +++ b/2017/d18/ex2/input @@ -0,0 +1,41 @@ +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 diff --git a/2017/d19/ex1/ex1.py b/2017/d19/ex1/ex1.py new file mode 100755 index 0000000..6cc724c --- /dev/null +++ b/2017/d19/ex1/ex1.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python + +import enum +import sys +from collections.abc import Iterator +from typing import NamedTuple + + +class Point(NamedTuple): + x: int + y: int + + +class Direction(enum.Enum): + UP = Point(-1, 0) + DOWN = Point(1, 0) + LEFT = Point(0, -1) + RIGHT = Point(0, 1) + + def apply(self, p: Point) -> Point: + dx, dy = self.value + return Point(p.x + dx, p.y + dy) + + def turns(self) -> Iterator["Direction"]: + match self: + case Direction.UP | Direction.DOWN: + turns = (Direction.LEFT, Direction.RIGHT) + case Direction.LEFT | Direction.RIGHT: + turns = (Direction.UP, Direction.DOWN) + yield from turns + + +def solve(input: str) -> str: + def parse(input: str) -> dict[Point, str]: + return { + Point(x, y): c + for x, line in enumerate(input.splitlines()) + for y, c in enumerate(line) + if c != " " + } + + def packet_spell(map: dict[Point, str]) -> str: + letters: list[str] = [] + # Travel starts downward, from outside the map before the first line + pos = min(map.keys(), key=lambda p: p.x) + dir = Direction.DOWN + + while True: + if (letter := map[pos]) not in ("+", "|", "-"): + letters.append(letter) + new_dir = dir + new_pos = dir.apply(pos) + if new_pos not in map: + for new_dir in dir.turns(): + if (new_pos := new_dir.apply(pos)) in map: + break + else: + # Must be the end of the line, stop looping + return "".join(letters) + dir = new_dir + pos = new_pos + + map = parse(input) + return packet_spell(map) + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d19/ex1/input b/2017/d19/ex1/input new file mode 100644 index 0000000..2a3c8fc --- /dev/null +++ b/2017/d19/ex1/input @@ -0,0 +1,201 @@ + | + +---+ +-------------------------------+ +---+ +---------+ +---------------------------|-------------------------------------------------------------------------+ +-----+ + | | | | | | | | | | | | | + | +-----|---------+ +---------------------|---|-----|-------------|---------------------------|-------------------------------------------------------------------------+ | +-------+ + | | | | | | | | | | | | | + | +---+ +---------+ | | | | +-------------------------------------------------------------------------------------------------------+ A-+ +-----------------------+ + | | | | | | | | | | | | | | | | | | + | | | | | | +---------------------|-----|---------|-----------+ | +-----------------------------------------------+ | + | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | +---------|-----------|-------------------|---------------------|-----------------------------------------|-----------|-------------+ + | R | | | | | | | | | | | | | | | | | | | | + | | | | +-------|---------------------------|-------------|-----------|-------------------|---------------------|-------------+ +-----------|-----|-----|-----+ +-------+ + | | | | | | | | | | | | | | | | | | | | | | | | + | +---------|-------+ | | | | | +-|---------+ +-|---|-----+ | +-----------------|---------------------|-------+ | | +-|-----|-|---|-----------------+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + +-------------------|-----|-|-|-------|-------|---------|-----+ | | | | | | +-----------------|---------------------------------------------|---------|---------|---|-----------+ | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | +-----+ +---|---|-----|---|-----------------|-----------------|-----------|-|-------------------------------------+ | | | +---------|-|---+ +-|---------------------+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | +-+ | | | | | | | | | | | | | +---------------------|-----------------------------|-----|-------------------|-|---+ | | + | | | | | | | | | | | | | | | | | | | | | | | | + | +---------------------+ | | | | | | | | | +-|-----------------------------------------|-------|-------------------------|-|-------|-------+ +-+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | +---------+ | | | | | | | | | | | | | | | | | | | | | | +---------------+ | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + +---+ | | | +-+ | | | | +-----+ | +-|---------------+ | | +-|-------|-------------------|-+ | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | W | | + +-------|-|-|-|-+ | | | | | +-------------|-------------------|-|-|-------|-|-------------------------------------|-----------|-----------------+ +-|-----------|-----------------+ | + | | | | | | | | | | | | | | | | | | | | | | | H | | | | | | | | | | | | + | | +-|-------+ | | | | | | | | | | | | | | +---------|---------------------|-------|-----|---------------------------------|-|---------------+ | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | +-----|-|---+ | | | +---+ | | +-|-----------------------|-----|-------+ | | | | | | | | | | +-|-|-------------+ | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | +-------------------|-------|-----|---------+ | | +---------------+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | +-+ | | | | | | | | +-------------|-----------------|-+ | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | +-----------------------------------------|-----|-------|---------|---------|-----------+ | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | +-|-|-|-+ | | | | +-|-|-------|-------------------------------|-|---|-----|-|---------|---------|-----------|-------|-+ | | | | | | +-+ | | | | +-+ | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | +-|---------|-+ | +---------|-|---|-+ | | +-------+ +-------|-|---------|---------------------|-----------|-----------------------------------|---+ | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-------------------------------------------|-----|-|-------|---+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | +---------|---|-----|-------------------------------------|-----------|---------------------|-|---|-|---------|-----|---------------|-----+ | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | +-----|-|---|-|-|---|-|-----+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | +-|-|-|---|---|-|-|-------+ | | | | | +-----+ | | | | | | +---------------------+ | | | | | | | +-------------|-|---------|---|-----------+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | +-----------|-----------------------|-|---------------------|---------------------|-----------+ +-----------|---------+ | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + +-------|-|-|-----+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-|---|-+ | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | +-------+ | | | | | | | | | +---------|-------------------------------+ | | | | | | | | | | | | | | | | | | | | | | | +---+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | +-|-|-----|---|-|-|-|-------------------------------------|-|-------------------------------|---------|-|-|-----|-|-------------+ | | | | | | | +-------------+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + +---------|---+ | | | | | | | +-----+ | | | | | | | +-|-|-------------------|---------|---|-----|---|-----|-----------------------+ | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | +---|---------------------------------------|---+ | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | +-----|-|---------|-|---------------|-----------------------|-|---------|-|-|-------------------|-+ | | | | | | | | | | | | | | | | | | +-+ | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + +---------------|-----|---------------|---|---|---------+ +-----+ | | | +-----|-|-------|-+ +---------------|-|-|---|-|---------|---------------------|-|-----------|-----|-----|---|-+ | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | +-|-------|-|---|---|-------|---------|-------------------|-|---------|-------------------------------|-----|-|-|-|---------------------------|---------|-----|---|-----|-+ | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | +-|---|---|-|-+ | | | +-----|-|-------|---------------------|-+ | | | +-----------|-------|---------|-|-----|-|-------|-------+ | | +-+ | +-|-|-----|-+ | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | +-+ | | | | | | | | | | | | | | | | +-----|-----------------|-|---|-----|-----------|-----+ | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | U | | | | | | | + | | | | | | | | | | | | | +-----|-|-------|-----------|-----------------------------------------|---+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | +-----|-|---|-|---|-----|-----------|-----|-------|---|-|---|-|-|-----------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +---|---|-|-----------|---|-|-|-------|-|-----|-------|-------------------|----------------E--+ | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | +-------|---|---------------|-------|-----|---+ | | | +-|-------|---|-|-|---|-|-|-----------------------------|---|-----|-----|-------+ +---|-------+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | +---|---|-|-|-|---|---|-----|---------------------------|-|-------|---|---+ | +---|---|-|-------|-----|-|-+ | | | +-----+ | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | +---|-|-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-|-----------------------------|-|-|---------------|-------|-----|---+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | +-----------------|-----------|-----------|-----------------------|-------|-|-|-----------------------+ | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | +---------------|-------------|---|---|-|---------|-|---------------|---|-|-----|-------------------|-----------|---|---|---------|-+ +-|-+ | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | +---|-|-----|-----|---|---|---------|-|-----------------|---------------|-------------|-------------|-|---|---------|-----|-----------------------------+ | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +---------|-----|-----|-----------------------------------|---|-|---|---------|-+ | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | +---|---------|-|-|-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-|---|---+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | +-|-----|---|-|---|---|-|---------------+ | | +-|-------|-------|-----------+ +-|-|-|-|---|-------|-|---|---------------------|-------+ | | +---+ | | +-|-----|---+ | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | +-----------|-|-|---------|-|---|---|-----|-|---------------|-----+ | | | | | +-|-|-----+ +-|-|-|---|-|---+ | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | +-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-----|-+ | +-------+ | | +-----------|-|-------------------------+ | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | +---|---------+ | | +-|-|-|-------|-----|-|-----------|-------------|-|---|---|-----+ | | | | | | | | | | | | +---|---|-+ | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | N | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | +-|-----|---|-+ | | +-----|---|-------------|-|-------+ | | +---|---|-|-----|-----------------------------|---|-|--D|---|-----|---+ | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | +---|---|-|-----|-|-|-|-----|-|---|-----------|-|-----|-|-----|-|-----|---|-------|---------------|-------|-|---------|-------------------|---------|-----|---|---|-|---|-----|---|-+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | +-------|-|-----|-|-|-----------|-|-+ | | | | | | | | | | +-------|---------+ | | | | | | +-------+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | +-------|---+ | | | | | | | | | | | | | | | | | | | | | | | +-+ +-|-----|-----|---+ | | | | | | +-------|---------|---------+ | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | +---|-------+ | +-----------|-------|-----+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +---|---+ | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | +-|-|-----|-------|-|-|-----|-----------|-+ | | | | | | | | +-|-------+ | | +---------------+ | +-+ | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | +---|-----------|-------|-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +---|-------------|---+ | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | +---|-------|-----|---|-------------|-|---|---|---------|---|---|-|-----+ | | +---------|-|---|-|-----|-------------------|-------|-------+ | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | +---|-|-----|---------------|-|---------|---|---|---------|-|---------------------|-----|---|-------+ | | | | | | +-|---|-+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-----|-------+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | +-|-------|---|---|---|---------|-----+ | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | +-|-+ | | | | | | | | | | | | | | | | | | | | | | | | +-----------------|-----|---------|-----------------------------|---------|-------------|---|-|---|-|-----+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | +-----------------|-------------|---------|-----+ | | +---------------|---|---|-+ | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | +-------------|-|-|-----|---|---|-|-|---------|---|---------|---------------------------|-----|-----|---------|---------|-------------------|---------|---------+ | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | +---------|-+ | +-----|-|-|---|-|-|---+ | | | | | | | | +---------------------------|-------------------|-------------+ +---------|----------Y--+ | | | | +---|-+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | +-|---|-----------|---------|---------|---|---------|---|-----+ +---|-|-----|-----|---------+ | | +-----------------------------+ | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | +-----|-|-----|---|-------|-|---|-----|-----------------------------|---------------------------------|---|-------------------------------------|-----+ | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | +-|---|-------|-------|-|-----|---|-----|---------+ | | | | +-------------+ | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | +-|---|-------|-------|---|-----|-|-------|-|-|-|---------------|-|-----|-----|---------------|-|-----------|-------|-----------|-------------|---|-----------|-------------------------------+ | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | +---------|-------|---|-|-|-|---------|-|-----|---|-----|---|---|-----------------|---|-------------|---------------+ | | | | +-+ | | | +-+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | +-|-|---+ | | | | | | | | | | | | | | | | | | | | | | | | | | | +---|-----------------|---------------------------------------------|---+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | +---+ | | | | +---+ | | | | | | | +---|-----------+ | | | | +-+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | +-|-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-----------|-|---+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | +-|---|-------------|---|---|-|---------------+ | | | | | | | | | | | | | | | +---|-----------------|-----+ | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | +-------|-----|-|-|---|-|---+ +---|-|-------|-|---------|-|-----------|---------------|-|---+ | | | | | | | | +---|-------|-+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | +-+ | | +-|-----------|-|-----|---|---------+ | | | | | | | | | | | | | | | | +---------------|-----------------|-+ | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | +---|-|---|-|---|-----|-|-----------------------|---|-----|-------|-------|-----------|---------|-------------------|-----+ | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | +-----------------------------------|-----------+ | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | +-----|-----|---|O------------------|-|---|-|---+ | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | +-|---------------|-----|---|-----------|-----|-|---+ | | | | | | | | | | | | | +-----|-----|-----------+ +-----+ | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | +-----------|-----+ | | | | | | | | | | +-----------|-----------|-------------------------|-----------------------------|-----------------|-------------------------+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | +-------------|-------|-----|-|-|-----------------|-|-----------------------------------|-----|---|-----|---------|-----------------------------|-----------|---------------------+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | +-----------------+ | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | +-+ +-----+ +---------|-----|-------------------|-----------|-----------------+ | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | +-----------+ | | +-|-|-----------|-----+ | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | +-|-+ | +-|-+ | | | | | | | | | | | | | | | | | +---|-----+ | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | +-----+ +---------|-----------|-------|---------|-------+ | | | +-+ | +-------------------------|-------------|---|-----------|---------------------+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | +-----+ | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | +-+ | | | +-----------------------|-----------|-------|---------|-------+ +-|---+ +-----------+ | | | +-------------------------|-+ | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | +---|-------|-+ | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | + +-------|-------------|-------------|-------------------|---------|---------+ | | | +-----------|-----+ | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | + +-|-+ | +---|-+ | | +-----------------|---------+ | +---------+ | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | + | +---+ +---------+ | +---------------------------------------+ | +---------------+ | | | | | | | +-------------------+ + | | | | | | | | | | | | | | | | | | + +-+ +-----+ +---------------------|---------|-----------+ +-------------------|-------------------------------+ +-+ | | | + | | | | | | | | | | + | +-------------------+ | | +-----------+ | + | | | | | | + +-------------------------------------------------------+ +---------------------------------+ +-------------------------------------------------------+ + diff --git a/2017/d19/ex2/ex2.py b/2017/d19/ex2/ex2.py new file mode 100755 index 0000000..ce27c01 --- /dev/null +++ b/2017/d19/ex2/ex2.py @@ -0,0 +1,75 @@ +#!/usr/bin/env python + +import enum +import sys +from collections.abc import Iterator +from typing import NamedTuple + + +class Point(NamedTuple): + x: int + y: int + + +class Direction(enum.Enum): + UP = Point(-1, 0) + DOWN = Point(1, 0) + LEFT = Point(0, -1) + RIGHT = Point(0, 1) + + def apply(self, p: Point) -> Point: + dx, dy = self.value + return Point(p.x + dx, p.y + dy) + + def turns(self) -> Iterator["Direction"]: + match self: + case Direction.UP | Direction.DOWN: + turns = (Direction.LEFT, Direction.RIGHT) + case Direction.LEFT | Direction.RIGHT: + turns = (Direction.UP, Direction.DOWN) + yield from turns + + +def solve(input: str) -> int: + def parse(input: str) -> dict[Point, str]: + return { + Point(x, y): c + for x, line in enumerate(input.splitlines()) + for y, c in enumerate(line) + if c != " " + } + + def packet_walk(map: dict[Point, str]) -> int: + letters: list[str] = [] + # Travel starts downward, from outside the map before the first line + pos = min(map.keys(), key=lambda p: p.x) + dir = Direction.DOWN + + steps = 0 + while True: + if (letter := map[pos]) not in ("+", "|", "-"): + letters.append(letter) + new_dir = dir + new_pos = dir.apply(pos) + steps += 1 + if new_pos not in map: + for new_dir in dir.turns(): + if (new_pos := new_dir.apply(pos)) in map: + break + else: + # Must be the end of the line, stop looping + return steps + dir = new_dir + pos = new_pos + + map = parse(input) + return packet_walk(map) + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d19/ex2/input b/2017/d19/ex2/input new file mode 100644 index 0000000..2a3c8fc --- /dev/null +++ b/2017/d19/ex2/input @@ -0,0 +1,201 @@ + | + +---+ +-------------------------------+ +---+ +---------+ +---------------------------|-------------------------------------------------------------------------+ +-----+ + | | | | | | | | | | | | | + | +-----|---------+ +---------------------|---|-----|-------------|---------------------------|-------------------------------------------------------------------------+ | +-------+ + | | | | | | | | | | | | | + | +---+ +---------+ | | | | +-------------------------------------------------------------------------------------------------------+ A-+ +-----------------------+ + | | | | | | | | | | | | | | | | | | + | | | | | | +---------------------|-----|---------|-----------+ | +-----------------------------------------------+ | + | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | +---------|-----------|-------------------|---------------------|-----------------------------------------|-----------|-------------+ + | R | | | | | | | | | | | | | | | | | | | | + | | | | +-------|---------------------------|-------------|-----------|-------------------|---------------------|-------------+ +-----------|-----|-----|-----+ +-------+ + | | | | | | | | | | | | | | | | | | | | | | | | + | +---------|-------+ | | | | | +-|---------+ +-|---|-----+ | +-----------------|---------------------|-------+ | | +-|-----|-|---|-----------------+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + +-------------------|-----|-|-|-------|-------|---------|-----+ | | | | | | +-----------------|---------------------------------------------|---------|---------|---|-----------+ | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | +-----+ +---|---|-----|---|-----------------|-----------------|-----------|-|-------------------------------------+ | | | +---------|-|---+ +-|---------------------+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | +-+ | | | | | | | | | | | | | +---------------------|-----------------------------|-----|-------------------|-|---+ | | + | | | | | | | | | | | | | | | | | | | | | | | | + | +---------------------+ | | | | | | | | | +-|-----------------------------------------|-------|-------------------------|-|-------|-------+ +-+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | +---------+ | | | | | | | | | | | | | | | | | | | | | | +---------------+ | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + +---+ | | | +-+ | | | | +-----+ | +-|---------------+ | | +-|-------|-------------------|-+ | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | W | | + +-------|-|-|-|-+ | | | | | +-------------|-------------------|-|-|-------|-|-------------------------------------|-----------|-----------------+ +-|-----------|-----------------+ | + | | | | | | | | | | | | | | | | | | | | | | | H | | | | | | | | | | | | + | | +-|-------+ | | | | | | | | | | | | | | +---------|---------------------|-------|-----|---------------------------------|-|---------------+ | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | +-----|-|---+ | | | +---+ | | +-|-----------------------|-----|-------+ | | | | | | | | | | +-|-|-------------+ | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | +-------------------|-------|-----|---------+ | | +---------------+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | +-+ | | | | | | | | +-------------|-----------------|-+ | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | +-----------------------------------------|-----|-------|---------|---------|-----------+ | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | +-|-|-|-+ | | | | +-|-|-------|-------------------------------|-|---|-----|-|---------|---------|-----------|-------|-+ | | | | | | +-+ | | | | +-+ | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | +-|---------|-+ | +---------|-|---|-+ | | +-------+ +-------|-|---------|---------------------|-----------|-----------------------------------|---+ | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-------------------------------------------|-----|-|-------|---+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | +---------|---|-----|-------------------------------------|-----------|---------------------|-|---|-|---------|-----|---------------|-----+ | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | +-----|-|---|-|-|---|-|-----+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | +-|-|-|---|---|-|-|-------+ | | | | | +-----+ | | | | | | +---------------------+ | | | | | | | +-------------|-|---------|---|-----------+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | +-----------|-----------------------|-|---------------------|---------------------|-----------+ +-----------|---------+ | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + +-------|-|-|-----+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-|---|-+ | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | +-------+ | | | | | | | | | +---------|-------------------------------+ | | | | | | | | | | | | | | | | | | | | | | | +---+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | +-|-|-----|---|-|-|-|-------------------------------------|-|-------------------------------|---------|-|-|-----|-|-------------+ | | | | | | | +-------------+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + +---------|---+ | | | | | | | +-----+ | | | | | | | +-|-|-------------------|---------|---|-----|---|-----|-----------------------+ | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | +---|---------------------------------------|---+ | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | +-----|-|---------|-|---------------|-----------------------|-|---------|-|-|-------------------|-+ | | | | | | | | | | | | | | | | | | +-+ | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + +---------------|-----|---------------|---|---|---------+ +-----+ | | | +-----|-|-------|-+ +---------------|-|-|---|-|---------|---------------------|-|-----------|-----|-----|---|-+ | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | +-|-------|-|---|---|-------|---------|-------------------|-|---------|-------------------------------|-----|-|-|-|---------------------------|---------|-----|---|-----|-+ | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | +-|---|---|-|-+ | | | +-----|-|-------|---------------------|-+ | | | +-----------|-------|---------|-|-----|-|-------|-------+ | | +-+ | +-|-|-----|-+ | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | +-+ | | | | | | | | | | | | | | | | +-----|-----------------|-|---|-----|-----------|-----+ | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | U | | | | | | | + | | | | | | | | | | | | | +-----|-|-------|-----------|-----------------------------------------|---+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | +-----|-|---|-|---|-----|-----------|-----|-------|---|-|---|-|-|-----------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +---|---|-|-----------|---|-|-|-------|-|-----|-------|-------------------|----------------E--+ | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | +-------|---|---------------|-------|-----|---+ | | | +-|-------|---|-|-|---|-|-|-----------------------------|---|-----|-----|-------+ +---|-------+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | +---|---|-|-|-|---|---|-----|---------------------------|-|-------|---|---+ | +---|---|-|-------|-----|-|-+ | | | +-----+ | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | +---|-|-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-|-----------------------------|-|-|---------------|-------|-----|---+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | +-----------------|-----------|-----------|-----------------------|-------|-|-|-----------------------+ | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | +---------------|-------------|---|---|-|---------|-|---------------|---|-|-----|-------------------|-----------|---|---|---------|-+ +-|-+ | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | +---|-|-----|-----|---|---|---------|-|-----------------|---------------|-------------|-------------|-|---|---------|-----|-----------------------------+ | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +---------|-----|-----|-----------------------------------|---|-|---|---------|-+ | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | +---|---------|-|-|-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-|---|---+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | +-|-----|---|-|---|---|-|---------------+ | | +-|-------|-------|-----------+ +-|-|-|-|---|-------|-|---|---------------------|-------+ | | +---+ | | +-|-----|---+ | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | +-----------|-|-|---------|-|---|---|-----|-|---------------|-----+ | | | | | +-|-|-----+ +-|-|-|---|-|---+ | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | +-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-----|-+ | +-------+ | | +-----------|-|-------------------------+ | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | +---|---------+ | | +-|-|-|-------|-----|-|-----------|-------------|-|---|---|-----+ | | | | | | | | | | | | +---|---|-+ | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | N | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | +-|-----|---|-+ | | +-----|---|-------------|-|-------+ | | +---|---|-|-----|-----------------------------|---|-|--D|---|-----|---+ | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | +---|---|-|-----|-|-|-|-----|-|---|-----------|-|-----|-|-----|-|-----|---|-------|---------------|-------|-|---------|-------------------|---------|-----|---|---|-|---|-----|---|-+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | +-------|-|-----|-|-|-----------|-|-+ | | | | | | | | | | +-------|---------+ | | | | | | +-------+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | +-------|---+ | | | | | | | | | | | | | | | | | | | | | | | +-+ +-|-----|-----|---+ | | | | | | +-------|---------|---------+ | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | +---|-------+ | +-----------|-------|-----+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +---|---+ | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | +-|-|-----|-------|-|-|-----|-----------|-+ | | | | | | | | +-|-------+ | | +---------------+ | +-+ | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | +---|-----------|-------|-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +---|-------------|---+ | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | +---|-------|-----|---|-------------|-|---|---|---------|---|---|-|-----+ | | +---------|-|---|-|-----|-------------------|-------|-------+ | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | +---|-|-----|---------------|-|---------|---|---|---------|-|---------------------|-----|---|-------+ | | | | | | +-|---|-+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-----|-------+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | +-|-------|---|---|---|---------|-----+ | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | +-|-+ | | | | | | | | | | | | | | | | | | | | | | | | +-----------------|-----|---------|-----------------------------|---------|-------------|---|-|---|-|-----+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | +-----------------|-------------|---------|-----+ | | +---------------|---|---|-+ | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | +-------------|-|-|-----|---|---|-|-|---------|---|---------|---------------------------|-----|-----|---------|---------|-------------------|---------|---------+ | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | +---------|-+ | +-----|-|-|---|-|-|---+ | | | | | | | | +---------------------------|-------------------|-------------+ +---------|----------Y--+ | | | | +---|-+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | +-|---|-----------|---------|---------|---|---------|---|-----+ +---|-|-----|-----|---------+ | | +-----------------------------+ | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | +-----|-|-----|---|-------|-|---|-----|-----------------------------|---------------------------------|---|-------------------------------------|-----+ | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | +-|---|-------|-------|-|-----|---|-----|---------+ | | | | +-------------+ | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | +-|---|-------|-------|---|-----|-|-------|-|-|-|---------------|-|-----|-----|---------------|-|-----------|-------|-----------|-------------|---|-----------|-------------------------------+ | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | +---------|-------|---|-|-|-|---------|-|-----|---|-----|---|---|-----------------|---|-------------|---------------+ | | | | +-+ | | | +-+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | +-|-|---+ | | | | | | | | | | | | | | | | | | | | | | | | | | | +---|-----------------|---------------------------------------------|---+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | +---+ | | | | +---+ | | | | | | | +---|-----------+ | | | | +-+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | +-|-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-----------|-|---+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | +-|---|-------------|---|---|-|---------------+ | | | | | | | | | | | | | | | +---|-----------------|-----+ | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | +-------|-----|-|-|---|-|---+ +---|-|-------|-|---------|-|-----------|---------------|-|---+ | | | | | | | | +---|-------|-+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | +-+ | | +-|-----------|-|-----|---|---------+ | | | | | | | | | | | | | | | | +---------------|-----------------|-+ | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | +---|-|---|-|---|-----|-|-----------------------|---|-----|-------|-------|-----------|---------|-------------------|-----+ | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | +-----------------------------------|-----------+ | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | +-----|-----|---|O------------------|-|---|-|---+ | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | +-|---------------|-----|---|-----------|-----|-|---+ | | | | | | | | | | | | | +-----|-----|-----------+ +-----+ | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | +-----------|-----+ | | | | | | | | | | +-----------|-----------|-------------------------|-----------------------------|-----------------|-------------------------+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | +-------------|-------|-----|-|-|-----------------|-|-----------------------------------|-----|---|-----|---------|-----------------------------|-----------|---------------------+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | +-----------------+ | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | +-+ +-----+ +---------|-----|-------------------|-----------|-----------------+ | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | +-----------+ | | +-|-|-----------|-----+ | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | +-|-+ | +-|-+ | | | | | | | | | | | | | | | | | +---|-----+ | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | +-----+ +---------|-----------|-------|---------|-------+ | | | +-+ | +-------------------------|-------------|---|-----------|---------------------+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | +-----+ | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | +-+ | | | +-----------------------|-----------|-------|---------|-------+ +-|---+ +-----------+ | | | +-------------------------|-+ | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | +---|-------|-+ | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | + +-------|-------------|-------------|-------------------|---------|---------+ | | | +-----------|-----+ | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | + +-|-+ | +---|-+ | | +-----------------|---------+ | +---------+ | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | + | +---+ +---------+ | +---------------------------------------+ | +---------------+ | | | | | | | +-------------------+ + | | | | | | | | | | | | | | | | | | + +-+ +-----+ +---------------------|---------|-----------+ +-------------------|-------------------------------+ +-+ | | | + | | | | | | | | | | + | +-------------------+ | | +-----------+ | + | | | | | | + +-------------------------------------------------------+ +---------------------------------+ +-------------------------------------------------------+ + diff --git a/2017/d20/ex1/ex1.py b/2017/d20/ex1/ex1.py new file mode 100755 index 0000000..887f911 --- /dev/null +++ b/2017/d20/ex1/ex1.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python + +import sys +from typing import NamedTuple + + +class Point(NamedTuple): + x: int + y: int + z: int + + +class Particle(NamedTuple): + pos: Point + vel: Point + acc: Point + + @classmethod + def from_str(cls, input: str) -> "Particle": + p, v, a = input.split(", ") + return cls( + Point(*map(int, p[3:-1].split(","))), + Point(*map(int, v[3:-1].split(","))), + Point(*map(int, a[3:-1].split(","))), + ) + + +def solve(input: str) -> int: + def parse(input: str) -> list[Particle]: + return [Particle.from_str(line) for line in input.splitlines()] + + def dist(point: Point, other: Point) -> int: + return sum(abs(a - b) for a, b in zip(point, other)) + + particles = parse(input) + orig = Point(0, 0, 0) + # Lowest acceleration will be closest to origin as time tends to infinity + # Same logic for velocity and position + closest_particle = min( + particles, + key=lambda p: (dist(p.acc, orig), dist(p.vel, orig), dist(p.pos, orig)), + ) + return particles.index(closest_particle) + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d20/ex1/input b/2017/d20/ex1/input new file mode 100644 index 0000000..d30ed99 --- /dev/null +++ b/2017/d20/ex1/input @@ -0,0 +1,1000 @@ +p=<1500,413,-535>, v=<-119,22,36>, a=<-5,-12,3> +p=<65,1223,-530>, v=<-14,-136,52>, a=<2,2,0> +p=<260,-387,800>, v=<49,14,-103>, a=<-13,4,4> +p=<429,726,462>, v=<-36,-36,-19>, a=<0,-6,-4> +p=<1705,-165,1331>, v=<-134,9,-104>, a=<-3,0,-3> +p=<341,693,-473>, v=<-28,9,-18>, a=<0,-13,10> +p=<2816,-2250,1464>, v=<-91,41,149>, a=<-4,6,-20> +p=<-1237,-1704,-531>, v=<47,125,35>, a=<1,-4,-1> +p=<-4828,-171,-447>, v=<86,8,-24>, a=<13,0,4> +p=<2553,3286,-5524>, v=<-128,45,41>, a=<3,-9,8> +p=<1065,8038,-3700>, v=<1,-87,17>, a=<-2,-10,6> +p=<1081,-4698,860>, v=<50,113,-43>, a=<-5,2,1> +p=<-4103,102,-7540>, v=<47,-37,137>, a=<5,2,6> +p=<2985,-3162,1516>, v=<40,65,-47>, a=<-8,2,0> +p=<8089,4886,-2404>, v=<-4,28,26>, a=<-15,-11,3> +p=<-188,492,143>, v=<29,78,-27>, a=<-2,-13,2> +p=<1556,2084,1247>, v=<-97,-115,-45>, a=<0,-2,-4> +p=<220,-404,-1241>, v=<-39,-2,0>, a=<3,3,9> +p=<-948,908,751>, v=<102,-16,-99>, a=<-5,-5,6> +p=<676,-2628,-1641>, v=<-8,52,59>, a=<-4,13,5> +p=<-1636,-204,2167>, v=<77,11,-77>, a=<3,0,-7> +p=<-92,-212,615>, v=<23,-65,37>, a=<-2,9,-9> +p=<660,1700,-1217>, v=<-75,-40,41>, a=<4,-8,4> +p=<2428,-284,1007>, v=<-143,-35,-30>, a=<-1,6,-4> +p=<2516,-3412,-577>, v=<-4,101,1>, a=<-18,13,4> +p=<-1551,-1873,-3487>, v=<29,-15,-125>, a=<1,4,13> +p=<-276,3805,-2229>, v=<-61,98,13>, a=<4,-12,3> +p=<-752,5811,1239>, v=<-12,-66,-19>, a=<2,-6,-1> +p=<-6736,1782,-13636>, v=<24,70,156>, a=<10,-7,14> +p=<1169,-819,2123>, v=<124,-81,-45>, a=<-9,6,-1> +p=<31,-1310,-640>, v=<-8,167,15>, a=<0,-9,6> +p=<-1895,-1544,878>, v=<68,76,-53>, a=<13,8,-3> +p=<2382,126,1908>, v=<-112,-6,8>, a=<1,0,-7> +p=<18,-3462,288>, v=<-1,81,13>, a=<0,5,-2> +p=<-1958,317,-1998>, v=<173,40,64>, a=<-7,-6,4> +p=<-818,507,-136>, v=<13,140,-14>, a=<3,-17,2> +p=<3362,-640,-138>, v=<-32,44,18>, a=<-16,-1,-1> +p=<50,-1351,303>, v=<-19,17,22>, a=<2,6,-4> +p=<896,-244,-2424>, v=<-123,-16,31>, a=<8,3,11> +p=<50,197,726>, v=<0,-12,8>, a=<0,0,-5> +p=<698,-2431,2949>, v=<2,77,-144>, a=<-4,6,-2> +p=<-202,-226,-21>, v=<14,97,-17>, a=<0,-9,2> +p=<-1363,998,168>, v=<50,-47,1>, a=<3,-1,-1> +p=<2039,476,1554>, v=<-101,115,0>, a=<-1,-15,-9> +p=<-2992,1664,-2190>, v=<150,-27,113>, a=<2,-7,1> +p=<-4132,2004,373>, v=<47,-37,18>, a=<11,-4,-3> +p=<-1694,2004,-2433>, v=<37,-97,68>, a=<3,1,3> +p=<-1326,-2320,-1835>, v=<33,103,78>, a=<2,0,0> +p=<-1027,1682,1247>, v=<-40,-47,-116>, a=<7,-2,5> +p=<-337,2234,534>, v=<14,-47,-1>, a=<0,-4,-2> +p=<2745,3016,-202>, v=<-24,-81,-29>, a=<-8,-4,3> +p=<-1343,-3402,1983>, v=<99,84,-43>, a=<-2,13,-8> +p=<-272,1460,1303>, v=<-72,-31,-111>, a=<10,-6,4> +p=<1377,-2348,130>, v=<-52,67,21>, a=<-3,8,-3> +p=<2482,1409,1371>, v=<-135,-100,-7>, a=<-1,2,-8> +p=<136,-3334,-2879>, v=<-15,134,108>, a=<1,7,7> +p=<-2754,-614,-873>, v=<74,1,-55>, a=<10,4,12> +p=<136,950,-431>, v=<-6,17,27>, a=<0,-8,0> +p=<272,-1940,-1502>, v=<-5,142,45>, a=<-1,-3,5> +p=<952,-1532,-2743>, v=<-54,-26,118>, a=<0,13,5> +p=<646,4570,-4911>, v=<-54,-65,-31>, a=<2,-4,10> +p=<-7837,3193,-5948>, v=<73,-77,17>, a=<9,-1,9> +p=<1666,3686,6547>, v=<21,-109,-53>, a=<-4,0,-8> +p=<-1731,-1228,580>, v=<163,24,-58>, a=<2,18,0> +p=<399,422,-2410>, v=<-6,-42,197>, a=<-6,0,8> +p=<7537,-5727,-3546>, v=<-129,57,14>, a=<-12,12,9> +p=<-6802,2710,-6328>, v=<58,-11,67>, a=<15,-7,13> +p=<-2616,-3153,1771>, v=<32,120,-15>, a=<5,0,-4> +p=<1804,1046,5307>, v=<-84,-55,-70>, a=<1,1,-10> +p=<2233,-2321,445>, v=<-60,61,-18>, a=<-2,2,0> +p=<2193,-2574,-5336>, v=<-77,45,38>, a=<1,1,5> +p=<3090,1248,319>, v=<80,-33,13>, a=<-8,0,-1> +p=<4299,-1209,-8807>, v=<-111,-70,47>, a=<0,5,9> +p=<6288,-1092,-227>, v=<18,7,47>, a=<-9,1,-2> +p=<-6426,-4992,-1943>, v=<84,-53,111>, a=<4,9,-3> +p=<-5880,-10491,-4751>, v=<90,48,63>, a=<3,11,3> +p=<6210,-8463,670>, v=<-80,76,-176>, a=<-4,7,8> +p=<384,-1868,1875>, v=<-17,72,-18>, a=<0,0,-4> +p=<5376,-672,913>, v=<-47,-1,-35>, a=<-12,2,0> +p=<4856,4489,783>, v=<-27,-24,-57>, a=<-12,-11,2> +p=<-3100,1070,-946>, v=<-18,13,23>, a=<10,-4,1> +p=<-786,-5534,1420>, v=<1,132,-41>, a=<2,6,-1> +p=<2659,-2297,692>, v=<-91,21,95>, a=<-1,5,-9> +p=<-1514,-724,-2584>, v=<-79,1,-22>, a=<10,2,9> +p=<1426,-304,32>, v=<-145,-39,32>, a=<7,5,-3> +p=<1526,2846,-738>, v=<-129,-186,81>, a=<5,4,-4> +p=<356,-114,-2458>, v=<-18,-17,41>, a=<0,2,8> +p=<-719,-741,-2568>, v=<47,35,55>, a=<-1,0,6> +p=<1003,-342,3144>, v=<86,16,-30>, a=<-12,0,-11> +p=<1276,897,-2631>, v=<-59,-21,-8>, a=<0,-2,12> +p=<-1244,-426,-2862>, v=<39,97,69>, a=<2,-7,6> +p=<-530,708,603>, v=<-17,-56,-85>, a=<4,2,5> +p=<-2882,2724,-3114>, v=<-15,-20,81>, a=<14,-10,6> +p=<4552,-1035,624>, v=<-61,82,35>, a=<-14,-3,-6> +p=<2809,1317,-783>, v=<-33,-74,-41>, a=<-9,1,7> +p=<3229,1464,3417>, v=<-119,-81,-153>, a=<-3,1,-1> +p=<1321,1115,5088>, v=<62,70,-117>, a=<-8,-8,-5> +p=<3319,-2611,3711>, v=<-96,26,-80>, a=<-2,5,-4> +p=<916,-316,-744>, v=<7,-59,-41>, a=<-3,5,5> +p=<376,3302,-2526>, v=<-71,45,-87>, a=<4,-12,13> +p=<889,-181,687>, v=<-76,6,32>, a=<3,0,-4> +p=<-2594,-964,1281>, v=<-73,91,52>, a=<12,-4,-7> +p=<1240,3707,-5496>, v=<37,16,23>, a=<-6,-11,13> +p=<-3026,-2017,-4227>, v=<-29,60,-80>, a=<10,1,17> +p=<-5056,959,3746>, v=<34,-37,-136>, a=<13,0,-1> +p=<-7106,-3941,1596>, v=<77,3,-63>, a=<16,12,0> +p=<2194,-591,-3679>, v=<-48,25,31>, a=<-3,0,9> +p=<-2281,284,4771>, v=<131,-23,-47>, a=<-3,1,-11> +p=<5469,1859,-4929>, v=<-166,5,133>, a=<-4,-6,5> +p=<2194,3084,-1279>, v=<-100,-122,26>, a=<1,0,2> +p=<-3781,-1991,2496>, v=<61,42,-8>, a=<7,3,-7> +p=<-4606,-1641,6321>, v=<146,54,-70>, a=<3,1,-14> +p=<5994,2959,-3779>, v=<-148,-65,61>, a=<-7,-4,7> +p=<-1372,142,2651>, v=<63,-130,-5>, a=<0,11,-11> +p=<3101,-2693,3428>, v=<-51,115,-42>, a=<-9,1,-11> +p=<4382,3901,-1213>, v=<-167,-166,36>, a=<-4,-2,2> +p=<1862,-2084,3743>, v=<-80,130,-90>, a=<-1,-3,-8> +p=<-395,-2026,-944>, v=<-2,132,-47>, a=<2,-3,9> +p=<-2675,554,-1744>, v=<28,-18,-28>, a=<10,-1,11> +p=<-1595,-5756,-104>, v=<163,119,37>, a=<-8,16,-3> +p=<-1795,2784,2936>, v=<-16,70,-52>, a=<10,-20,-9> +p=<-1135,-86,166>, v=<14,56,13>, a=<4,-5,-2> +p=<-3989,-76,-5091>, v=<30,65,138>, a=<11,-5,6> +p=<415,-892,1581>, v=<34,-1,135>, a=<-4,3,-16> +p=<-365,-28,-3327>, v=<179,-137,77>, a=<-13,11,5> +p=<2623,3740,-5691>, v=<-8,-94,38>, a=<-8,-5,16> +p=<-497,3020,-2283>, v=<-53,-14,96>, a=<6,-9,0> +p=<403,-904,1737>, v=<22,-13,66>, a=<-3,4,-11> +p=<1195,1460,489>, v=<-61,-74,-107>, a=<1,1,7> +p=<-2009,104,1245>, v=<35,145,24>, a=<4,-12,-6> +p=<-1493,1808,-5115>, v=<101,-76,89>, a=<-3,0,10> +p=<7013,6579,-435>, v=<60,-101,-18>, a=<-18,-7,2> +p=<-3403,-2597,3595>, v=<76,19,-100>, a=<2,4,-1> +p=<-2659,1216,-3752>, v=<-28,-136,-39>, a=<7,6,10> +p=<3200,-4240,2789>, v=<-41,136,6>, a=<-4,0,-6> +p=<3262,-5852,-3690>, v=<-75,28,55>, a=<-2,10,4> +p=<-6503,1836,1487>, v=<112,-12,16>, a=<6,-3,-4> +p=<-3589,8687,1859>, v=<98,-57,36>, a=<1,-14,-6> +p=<7381,-1966,-607>, v=<-29,67,22>, a=<-15,0,0> +p=<595,1659,379>, v=<25,77,33>, a=<-3,-9,-3> +p=<1717,347,26>, v=<-92,-79,34>, a=<-6,7,-5> +p=<-1611,659,2184>, v=<143,-40,-160>, a=<-3,-2,-1> +p=<599,958,988>, v=<-41,-84,-68>, a=<-1,1,-1> +p=<469,438,1638>, v=<-59,-72,-20>, a=<3,5,-15> +p=<1457,-2175,962>, v=<-142,122,-31>, a=<4,6,-6> +p=<-2131,-4,299>, v=<134,32,-106>, a=<4,-5,12> +p=<-1013,-563,1677>, v=<-29,-37,-86>, a=<15,11,-6> +p=<-1312,-563,-871>, v=<22,-23,68>, a=<11,9,0> +p=<677,1504,1495>, v=<-82,-126,-44>, a=<4,1,-10> +p=<-401,-354,-103>, v=<54,101,-37>, a=<-3,-12,8> +p=<787,-1531,-257>, v=<-90,70,31>, a=<3,11,-1> +p=<83,405,-4>, v=<-26,-40,8>, a=<3,0,-1> +p=<-654,1032,-598>, v=<-43,-73,-10>, a=<17,-4,11> +p=<160,273,491>, v=<45,50,-49>, a=<-10,-13,1> +p=<72,-2,-895>, v=<83,9,83>, a=<-15,-2,0> +p=<-797,-1311,-631>, v=<60,26,89>, a=<2,15,-5> +p=<1045,-1354,502>, v=<-56,11,-67>, a=<0,6,4> +p=<-1691,2294,1737>, v=<28,-101,38>, a=<6,-2,-13> +p=<1847,521,-3642>, v=<0,-89,36>, a=<-5,5,7> +p=<1307,1682,30>, v=<-78,-90,40>, a=<2,2,-3> +p=<5411,5192,-5181>, v=<-20,-94,-47>, a=<-13,-7,17> +p=<-1015,-3583,651>, v=<36,105,-25>, a=<0,2,0> +p=<-1196,-512,-1809>, v=<89,-65,105>, a=<0,15,5> +p=<-91,125,102>, v=<-24,40,28>, a=<4,-7,-5> +p=<-1495,996,453>, v=<77,-41,-55>, a=<5,-5,3> +p=<-299,-1500,-1042>, v=<-43,123,-17>, a=<9,-1,14> +p=<1651,-1448,453>, v=<-32,-14,-55>, a=<-14,18,3> +p=<-520,-668,-1289>, v=<-19,10,86>, a=<8,6,2> +p=<-728,632,635>, v=<158,-27,-55>, a=<-15,-3,1> +p=<0,671,1103>, v=<18,-93,-84>, a=<-3,6,0> +p=<-975,1126,869>, v=<65,-37,-157>, a=<1,-7,13> +p=<-6957,4124,-167>, v=<90,-6,95>, a=<10,-9,-6> +p=<-1592,180,4560>, v=<10,-80,37>, a=<3,5,-13> +p=<1482,4849,906>, v=<-36,29,-47>, a=<-1,-13,1> +p=<-1360,-690,732>, v=<-103,10,4>, a=<10,1,-2> +p=<-4811,-5011,471>, v=<31,-21,-17>, a=<9,13,0> +p=<-8262,586,4647>, v=<195,56,-101>, a=<6,-5,-4> +p=<-5594,10214,2588>, v=<148,-66,0>, a=<3,-19,-6> +p=<10593,874,-5911>, v=<-83,109,43>, a=<-14,-8,8> +p=<1419,-9455,-6637>, v=<161,133,48>, a=<-12,9,9> +p=<-3333,280,128>, v=<33,25,-21>, a=<4,-2,1> +p=<-3069,-8300,722>, v=<8,13,-39>, a=<5,14,1> +p=<5973,2029,-3469>, v=<-113,40,20>, a=<-4,-6,5> +p=<-667,2909,-4429>, v=<21,-20,-131>, a=<0,-5,18> +p=<758,1919,5456>, v=<20,44,-11>, a=<-3,-7,-11> +p=<5818,2323,4262>, v=<-79,-70,-68>, a=<-16,-3,-11> +p=<417,-823,-875>, v=<-52,-65,39>, a=<3,9,0> +p=<-2179,-1098,5648>, v=<20,28,-131>, a=<7,2,-11> +p=<681,-944,-523>, v=<5,21,0>, a=<-3,2,2> +p=<-1387,-614,2832>, v=<84,-69,-62>, a=<-2,8,-5> +p=<-628,-1672,3200>, v=<39,13,-66>, a=<-1,5,-6> +p=<522,-3466,49>, v=<-59,55,-13>, a=<3,8,1> +p=<-2537,2146,-227>, v=<-34,51,47>, a=<12,-12,-3> +p=<-582,1295,739>, v=<-47,-32,-67>, a=<6,-2,3> +p=<-610,2649,-2932>, v=<-30,8,52>, a=<5,-11,7> +p=<2525,-607,-3460>, v=<0,-51,76>, a=<-10,7,7> +p=<-577,790,819>, v=<-43,-34,-38>, a=<6,0,0> +p=<3020,2363,-105>, v=<35,-48,27>, a=<-15,-5,-2> +p=<292,163,368>, v=<21,52,-29>, a=<-3,-5,1> +p=<1436,691,-3196>, v=<-31,-110,64>, a=<-3,7,7> +p=<-2007,1439,2766>, v=<91,63,46>, a=<0,-11,-15> +p=<-71,-1146,-2965>, v=<26,77,42>, a=<-2,-2,8> +p=<-3646,2451,-336>, v=<85,63,-20>, a=<7,-15,3> +p=<-730,-1186,2066>, v=<-2,27,-64>, a=<5,5,-6> +p=<3503,-1679,77>, v=<-107,74,-1>, a=<-11,3,0> +p=<2007,-2053,-1368>, v=<-10,168,66>, a=<-12,-5,2> +p=<-543,-387,570>, v=<68,-92,33>, a=<-4,13,-7> +p=<-203,378,2763>, v=<30,-128,-96>, a=<-2,12,-7> +p=<-560,2758,3647>, v=<33,-97,-121>, a=<0,-7,-10> +p=<-577,38,-280>, v=<43,-54,-25>, a=<-1,6,5> +p=<-3161,-802,-1532>, v=<86,26,29>, a=<6,1,4> +p=<-1565,-1096,2731>, v=<43,84,-119>, a=<3,-3,-1> +p=<-158,395,295>, v=<9,13,-25>, a=<0,-3,1> +p=<-1376,143,6469>, v=<-32,-96,-154>, a=<9,8,-14> +p=<73,4238,1513>, v=<-13,-159,-39>, a=<1,-4,-3> +p=<73,1592,1891>, v=<9,-121,53>, a=<-1,4,-13> +p=<703,-2314,1282>, v=<-32,-23,-105>, a=<0,12,4> +p=<-2888,-3826,-2603>, v=<29,-6,14>, a=<10,17,10> +p=<-956,-1789,3361>, v=<25,62,-39>, a=<2,2,-11> +p=<4714,-1600,1345>, v=<-3,119,2>, a=<-20,-4,-6> +p=<-341,-1584,886>, v=<9,82,2>, a=<1,0,-5> +p=<1027,-3104,-1508>, v=<-103,72,88>, a=<5,9,-1> +p=<628,12,1760>, v=<58,38,-144>, a=<-9,-4,5> +p=<-4084,1342,1000>, v=<116,-52,56>, a=<10,-2,-11> +p=<1388,1418,1817>, v=<38,-6,-107>, a=<-11,-7,1> +p=<1654,487,-4453>, v=<-66,-87,53>, a=<-2,6,18> +p=<632,-186,-1501>, v=<-10,45,26>, a=<-3,-4,7> +p=<-1204,-662,-753>, v=<71,-44,144>, a=<0,9,-11> +p=<-1051,1174,-566>, v=<-1,37,-2>, a=<7,-12,4> +p=<1975,1548,-2657>, v=<-17,-75,94>, a=<-11,-2,7> +p=<-3040,1548,-532>, v=<80,-75,-13>, a=<11,-2,5> +p=<-2037,-3416,-1705>, v=<48,172,47>, a=<8,3,6> +p=<1397,2721,233>, v=<-91,-99,59>, a=<1,-7,-8> +p=<-727,94,-946>, v=<24,-36,94>, a=<0,2,-4> +p=<1328,6919,-7711>, v=<-29,-93,180>, a=<-1,-9,5> +p=<4628,-191,-2656>, v=<-77,51,-4>, a=<-5,-3,6> +p=<4808,5914,614>, v=<10,18,-20>, a=<-11,-14,0> +p=<668,-8816,2699>, v=<-131,137,-74>, a=<7,10,-1> +p=<2978,-101,-721>, v=<9,-14,-84>, a=<-7,1,7> +p=<413,3334,1529>, v=<-45,73,58>, a=<2,-12,-7> +p=<-3442,-56,6539>, v=<68,0,-140>, a=<3,0,-5> +p=<1039,1335,128>, v=<-56,-75,-89>, a=<0,0,9> +p=<1174,2631,1478>, v=<-73,-90,-12>, a=<1,-6,-7> +p=<31,-1257,803>, v=<-95,-7,-3>, a=<10,8,-4> +p=<958,-1167,1613>, v=<53,140,-86>, a=<-11,-8,0> +p=<-1049,1335,839>, v=<41,-113,-81>, a=<2,4,4> +p=<-2219,-141,-295>, v=<30,7,134>, a=<10,0,-12> +p=<-1967,2550,2585>, v=<54,0,-45>, a=<6,-15,-10> +p=<-891,-3575,2084>, v=<62,43,-121>, a=<-2,7,3> +p=<-293,1326,-1465>, v=<93,-51,-79>, a=<-6,0,10> +p=<3698,-2262,-2687>, v=<-74,33,-32>, a=<-5,4,10> +p=<162,3224,-3896>, v=<89,-16,55>, a=<-7,-8,7> +p=<-3556,-611,-2219>, v=<151,-44,85>, a=<-1,5,0> +p=<1202,-1443,-5092>, v=<-32,69,128>, a=<-1,-1,5> +p=<6168,-1261,1967>, v=<-88,62,5>, a=<-11,-1,-6> +p=<-8173,10133,282>, v=<170,-53,9>, a=<4,-14,-1> +p=<-4688,-2923,333>, v=<155,-54,-10>, a=<-1,8,0> +p=<-4263,6393,2390>, v=<55,-48,-18>, a=<4,-8,-3> +p=<-472,1259,12743>, v=<31,68,-95>, a=<-1,-6,-16> +p=<-2308,-9910,2645>, v=<50,-6,-8>, a=<1,17,-4> +p=<-2002,-8346,11910>, v=<-29,-52,-53>, a=<5,17,-17> +p=<-489,-6459,-398>, v=<119,85,99>, a=<-6,6,-5> +p=<2418,-1512,-10785>, v=<51,-8,2>, a=<-7,3,18> +p=<-3226,-7547,4940>, v=<7,117,-58>, a=<5,6,-5> +p=<-1883,-2362,1829>, v=<-50,52,-54>, a=<6,1,0> +p=<-104,-2146,-706>, v=<-47,82,78>, a=<6,5,-4> +p=<-3300,149,1538>, v=<-3,19,-36>, a=<22,-3,-6> +p=<865,2121,-1335>, v=<-59,-115,-56>, a=<1,-1,15> +p=<491,-2350,-145>, v=<-37,13,117>, a=<1,14,-12> +p=<-2042,2835,892>, v=<157,-67,-16>, a=<-4,-11,-4> +p=<259,-985,2750>, v=<-92,-12,-33>, a=<7,5,-8> +p=<798,1072,2783>, v=<56,-2,-23>, a=<-8,-4,-9> +p=<-4691,225,1276>, v=<41,2,-35>, a=<15,-1,-2> +p=<2125,2739,2007>, v=<-41,-42,-41>, a=<-1,-2,-1> +p=<-885,-3946,-5588>, v=<45,41,-22>, a=<-1,4,10> +p=<4085,6519,-1808>, v=<-115,12,-40>, a=<0,-11,5> +p=<-2999,-2892,7364>, v=<61,-50,-88>, a=<3,10,-11> +p=<7731,2937,-31>, v=<-84,-56,47>, a=<-12,-3,-3> +p=<-911,-4110,2782>, v=<4,67,-5>, a=<2,5,-6> +p=<-4217,2328,839>, v=<-17,-80,-88>, a=<11,0,4> +p=<-1491,-340,2115>, v=<84,-138,-12>, a=<-2,10,-4> +p=<5092,2966,2376>, v=<22,-72,-126>, a=<-13,-2,3> +p=<-1250,-4251,-7477>, v=<-64,15,41>, a=<5,5,8> +p=<4792,5743,2707>, v=<11,-53,-71>, a=<-7,-5,0> +p=<-6703,-2826,-2100>, v=<21,-3,-81>, a=<8,4,7> +p=<-4032,-444,5776>, v=<55,-6,-144>, a=<10,2,-9> +p=<-3204,177,-1147>, v=<79,51,-59>, a=<5,-5,9> +p=<3305,-2054,141>, v=<-60,40,-7>, a=<-7,4,0> +p=<890,3581,3637>, v=<-15,-25,-135>, a=<-2,-11,-2> +p=<1842,1039,-3622>, v=<-84,-48,28>, a=<0,0,12> +p=<1886,775,-3303>, v=<29,-13,25>, a=<-10,-2,11> +p=<2898,3558,1548>, v=<-109,-59,0>, a=<-2,-9,-6> +p=<632,-644,1779>, v=<-52,86,-91>, a=<2,-5,1> +p=<-358,-1260,2505>, v=<-53,-24,-55>, a=<6,7,-5> +p=<1578,1567,3572>, v=<-3,-72,-23>, a=<-6,0,-12> +p=<-3614,-347,3033>, v=<141,15,13>, a=<2,0,-13> +p=<1105,-6221,129>, v=<-39,167,30>, a=<-1,10,-3> +p=<5076,2315,-311>, v=<-139,-106,-65>, a=<-8,0,7> +p=<2727,-1894,-1187>, v=<-64,98,42>, a=<-8,0,2> +p=<-579,6,-3543>, v=<-20,-12,166>, a=<5,1,2> +p=<2404,709,-1890>, v=<3,61,-61>, a=<-13,-10,16> +p=<1150,-602,390>, v=<-51,20,-31>, a=<-1,1,1> +p=<143,-1704,1701>, v=<42,138,-60>, a=<-5,-5,-3> +p=<2708,-1381,694>, v=<17,1,-17>, a=<-16,7,-2> +p=<979,-1039,-3391>, v=<-62,83,118>, a=<1,-3,6> +p=<2622,993,1733>, v=<-122,-103,-97>, a=<-1,5,1> +p=<312,-1597,2523>, v=<4,-26,-42>, a=<-2,10,-8> +p=<-538,-2877,-517>, v=<-27,59,-16>, a=<5,8,4> +p=<-1462,-3479,-1080>, v=<78,157,0>, a=<1,5,7> +p=<425,-725,433>, v=<30,67,-71>, a=<-6,-3,5> +p=<-1972,-1864,586>, v=<126,8,10>, a=<-1,11,-5> +p=<-1513,-1575,620>, v=<-9,18,-37>, a=<11,8,0> +p=<-119,873,-2491>, v=<26,-18,110>, a=<-2,-4,4> +p=<748,652,518>, v=<-61,22,-40>, a=<2,-7,1> +p=<2584,-2646,-859>, v=<-115,54,104>, a=<-4,11,-6> +p=<-221,-1116,-2304>, v=<86,72,117>, a=<-8,-1,2> +p=<3757,108,-26>, v=<-94,-72,82>, a=<-14,7,-9> +p=<-455,484,-1995>, v=<-55,68,32>, a=<6,-7,4> +p=<3073,-1724,-2607>, v=<-152,85,20>, a=<2,-1,7> +p=<-7043,-5420,5289>, v=<82,89,-84>, a=<17,11,-11> +p=<3505,1096,513>, v=<-170,-45,-85>, a=<2,0,5> +p=<-431,-920,-987>, v=<44,64,115>, a=<-2,-2,-6> +p=<-8771,2980,-723>, v=<179,-86,104>, a=<15,-3,-6> +p=<-923,1264,561>, v=<-98,48,-87>, a=<11,-8,5> +p=<-11,1792,-2019>, v=<39,-49,33>, a=<-3,-2,4> +p=<-435,1273,-382>, v=<-7,-121,-13>, a=<6,3,6> +p=<-461,571,411>, v=<37,17,-67>, a=<0,-9,5> +p=<1034,1481,255>, v=<-50,-102,64>, a=<-4,-2,-12> +p=<1109,-1211,-3947>, v=<-98,-108,-91>, a=<4,11,17> +p=<920,895,-3731>, v=<49,-18,-71>, a=<-6,-1,15> +p=<-1672,-185,-2813>, v=<-65,50,-63>, a=<9,-3,12> +p=<-4291,-4721,454>, v=<-38,36,-2>, a=<14,10,-1> +p=<3512,2596,-329>, v=<-103,-95,55>, a=<-2,0,-3> +p=<2162,-2642,1885>, v=<-193,71,57>, a=<8,2,-9> +p=<2438,-3105,2240>, v=<-85,122,13>, a=<0,-1,-6> +p=<-2086,723,4154>, v=<-34,110,-38>, a=<7,-9,-7> +p=<3424,4377,-1298>, v=<-59,-31,-45>, a=<-4,-8,6> +p=<550,-910,-2884>, v=<60,11,-17>, a=<-8,3,14> +p=<1264,1022,203>, v=<-139,-92,-54>, a=<7,4,4> +p=<1306,2576,1589>, v=<-20,-78,12>, a=<-4,-4,-8> +p=<1474,917,-28>, v=<5,1,155>, a=<-7,-4,-14> +p=<-605,1967,1379>, v=<-17,-115,-110>, a=<4,2,4> +p=<-2999,707,1316>, v=<163,-55,-52>, a=<-2,2,-1> +p=<-2124,85,1333>, v=<-76,97,-1>, a=<19,-10,-7> +p=<-2865,674,-985>, v=<43,-54,-19>, a=<11,2,7> +p=<-699,845,-4215>, v=<-21,-3,121>, a=<6,-4,10> +p=<1182,-1796,-1308>, v=<-30,66,88>, a=<-3,3,-2> +p=<-53,2080,1884>, v=<-75,-48,-100>, a=<8,-6,0> +p=<1828,-1245,1675>, v=<-74,-23,-19>, a=<-2,9,-7> +p=<1790,2859,3784>, v=<38,-109,-110>, a=<-13,-4,-9> +p=<-3245,1909,1751>, v=<143,1,27>, a=<3,-10,-12> +p=<1279,-4391,-2768>, v=<118,19,6>, a=<-13,12,8> +p=<1079,2259,4932>, v=<-4,-91,-68>, a=<-3,0,-10> +p=<3109,1104,4379>, v=<-46,-43,-174>, a=<-6,0,0> +p=<-1866,-2221,-1021>, v=<23,51,16>, a=<4,3,2> +p=<609,-2071,-3171>, v=<41,58,63>, a=<-5,2,5> +p=<3634,1004,2654>, v=<-54,-117,12>, a=<-7,6,-9> +p=<-716,5304,-171>, v=<-10,-94,-31>, a=<3,-9,3> +p=<4930,-4950,-2256>, v=<-35,96,91>, a=<-9,5,-1> +p=<-928,4214,1891>, v=<-28,-40,143>, a=<4,-7,-14> +p=<1682,1343,1456>, v=<-73,59,-82>, a=<1,-7,2> +p=<5394,-4660,-3677>, v=<-186,11,-70>, a=<0,10,13> +p=<-1740,2184,-1705>, v=<-30,-75,12>, a=<6,0,3> +p=<-2378,2851,-2894>, v=<67,-68,-7>, a=<1,-2,7> +p=<-2728,1792,2081>, v=<44,95,-69>, a=<3,-10,0> +p=<7382,-6773,-4144>, v=<-76,24,-32>, a=<-11,13,11> +p=<-6778,-1613,1556>, v=<117,-24,-36>, a=<7,5,-1> +p=<-1870,806,494>, v=<41,-29,-54>, a=<5,-1,3> +p=<360,946,2374>, v=<3,27,-22>, a=<-2,-7,-9> +p=<-1500,1016,-556>, v=<54,-29,72>, a=<2,-2,-4> +p=<870,696,2034>, v=<30,-76,-26>, a=<-7,4,-7> +p=<-390,-3464,644>, v=<-33,69,-51>, a=<5,10,2> +p=<-1180,1486,-476>, v=<17,0,68>, a=<4,-7,-4> +p=<1224,-754,1267>, v=<-14,55,-40>, a=<-10,0,-7> +p=<-1513,891,147>, v=<69,-115,25>, a=<5,7,-5> +p=<-1289,-292,868>, v=<53,97,-34>, a=<5,-10,-4> +p=<-1951,3305,-2253>, v=<-32,-17,79>, a=<7,-7,0> +p=<2123,-4535,1485>, v=<-47,31,47>, a=<-2,9,-7> +p=<-1237,3067,-6145>, v=<-14,-110,44>, a=<4,0,12> +p=<-2287,-1931,-111>, v=<9,170,46>, a=<5,-7,-3> +p=<-2940,427,-2488>, v=<53,-30,21>, a=<3,1,4> +p=<-4140,-203,4397>, v=<62,53,-7>, a=<5,-3,-9> +p=<-3240,-938,-3928>, v=<125,0,100>, a=<-1,2,2> +p=<4020,1147,-4738>, v=<-55,8,65>, a=<-5,-3,6> +p=<-1888,1962,-3057>, v=<-10,99,90>, a=<5,-11,1> +p=<838,1237,2279>, v=<-89,94,-109>, a=<4,-9,2> +p=<7044,-1547,1728>, v=<-153,70,-60>, a=<-6,-1,0> +p=<-3976,-1402,-1230>, v=<152,-10,-63>, a=<-1,4,7> +p=<-5484,-3461,-3840>, v=<69,136,117>, a=<8,-1,1> +p=<-1685,-4911,-4942>, v=<-2,81,170>, a=<4,6,0> +p=<-5861,831,5730>, v=<7,48,-3>, a=<13,-5,-13> +p=<2868,628,1148>, v=<-99,25,65>, a=<0,-3,-7> +p=<-1308,-4766,-4652>, v=<0,61,40>, a=<3,7,8> +p=<-1917,-1721,1699>, v=<-9,-59,-59>, a=<5,8,0> +p=<4897,-13852,5050>, v=<14,-6,-29>, a=<-7,18,-5> +p=<-836,-1606,-6416>, v=<41,-20,-35>, a=<-1,3,10> +p=<-9338,5648,-9068>, v=<-1,-6,73>, a=<12,-7,8> +p=<-7778,-9679,-2360>, v=<39,47,81>, a=<8,10,-1> +p=<7978,11537,6649>, v=<-25,-57,-30>, a=<-9,-12,-7> +p=<-8870,-3517,3022>, v=<-73,-71,63>, a=<15,8,-7> +p=<334,9821,682>, v=<51,67,-117>, a=<-3,-16,5> +p=<-378,289,-2545>, v=<-115,19,22>, a=<12,-3,9> +p=<672,184,2159>, v=<-66,123,-81>, a=<3,-12,-2> +p=<-2583,2620,-4456>, v=<23,7,58>, a=<9,-12,14> +p=<4662,1507,500>, v=<-135,-17,-57>, a=<-8,-5,3> +p=<-1533,2536,1403>, v=<39,-66,43>, a=<3,-5,-10> +p=<714,919,122>, v=<-68,-66,-39>, a=<3,2,3> +p=<21,-2588,-3931>, v=<53,-31,154>, a=<-5,14,3> +p=<1575,1255,1655>, v=<-65,-60,42>, a=<-1,0,-11> +p=<-2961,-404,-2818>, v=<184,30,101>, a=<-4,-1,3> +p=<-2961,1465,-3280>, v=<52,51,-9>, a=<8,-11,15> +p=<446,81,-335>, v=<-29,-42,-22>, a=<-2,6,8> +p=<193,510,-720>, v=<-6,-87,31>, a=<-2,7,5> +p=<-214,-2196,853>, v=<7,141,-28>, a=<2,10,-9> +p=<-49,48,-984>, v=<10,-21,1>, a=<-1,3,14> +p=<-1237,719,-621>, v=<82,-10,4>, a=<5,-9,8> +p=<-104,1709,171>, v=<63,-136,-50>, a=<-9,-3,5> +p=<611,-513,-1215>, v=<-38,0,82>, a=<-3,8,4> +p=<-1138,-1954,-742>, v=<1,125,21>, a=<17,9,7> +p=<1227,587,-841>, v=<-82,2,6>, a=<-5,-9,11> +p=<820,-1019,1414>, v=<-93,76,-109>, a=<3,3,-4> +p=<-2978,8304,-1519>, v=<30,-106,-23>, a=<5,-12,5> +p=<-2137,-889,5441>, v=<106,-74,-38>, a=<-2,7,-10> +p=<-629,5259,-533>, v=<69,-61,78>, a=<-3,-8,-4> +p=<10318,3176,-4795>, v=<-111,31,89>, a=<-11,-7,3> +p=<3246,4315,-2262>, v=<-78,-55,67>, a=<-1,-4,0> +p=<-2381,5199,2872>, v=<35,-11,126>, a=<2,-8,-12> +p=<6051,-6140,-2381>, v=<-38,60,-122>, a=<-8,7,11> +p=<-1925,445,1736>, v=<31,-85,-133>, a=<7,6,4> +p=<1571,-1683,3617>, v=<-43,57,-62>, a=<-4,3,-13> +p=<184,2003,-734>, v=<10,-97,-63>, a=<-2,-1,10> +p=<-1583,-3070,368>, v=<63,150,-1>, a=<2,1,-2> +p=<2255,-1550,1527>, v=<-79,-110,-72>, a=<-4,19,-1> +p=<-595,65,3256>, v=<51,-5,-203>, a=<-2,0,3> +p=<-766,2839,-1580>, v=<-35,-67,29>, a=<7,-7,5> +p=<-116,-2071,1060>, v=<48,63,-19>, a=<-4,4,-3> +p=<-3386,-2081,-1570>, v=<159,11,81>, a=<1,9,0> +p=<1604,1409,470>, v=<25,-48,-42>, a=<-10,-2,2> +p=<-3586,-511,290>, v=<64,6,51>, a=<11,2,-6> +p=<-596,429,-3420>, v=<-12,-20,58>, a=<4,0,11> +p=<704,539,1230>, v=<70,-78,-59>, a=<-10,5,0> +p=<3944,-4401,1840>, v=<-113,148,-16>, a=<-8,7,-7> +p=<-456,3089,1380>, v=<65,-69,7>, a=<-4,-8,-7> +p=<1714,1789,-780>, v=<-96,59,-53>, a=<1,-14,9> +p=<1943,-411,2163>, v=<0,20,-14>, a=<-16,1,-16> +p=<98,-1566,603>, v=<11,49,74>, a=<-2,7,-14> +p=<-502,-2541,-342>, v=<3,82,-95>, a=<4,11,15> +p=<263,-291,1473>, v=<72,12,-112>, a=<-11,1,2> +p=<1688,-381,-567>, v=<-143,-22,-40>, a=<4,6,10> +p=<-682,519,2883>, v=<23,-10,-118>, a=<3,-3,-9> +p=<383,744,-72>, v=<8,-1,79>, a=<-4,-6,-9> +p=<443,9,168>, v=<52,0,71>, a=<-10,0,-10> +p=<-1387,-2950,-247>, v=<115,110,-16>, a=<-4,6,3> +p=<-730,-1438,-2092>, v=<12,83,77>, a=<3,0,4> +p=<2276,695,-301>, v=<-22,-26,44>, a=<-11,-1,-3> +p=<628,-3534,-2913>, v=<-39,-38,186>, a=<1,15,-5> +p=<-140,1326,603>, v=<-107,-28,-23>, a=<9,-2,0> +p=<1480,-1650,2583>, v=<13,71,-43>, a=<-6,0,-5> +p=<-824,-366,-657>, v=<59,-20,-108>, a=<-2,3,11> +p=<1168,-426,-2625>, v=<1,20,74>, a=<-4,0,3> +p=<-260,2154,2079>, v=<-2,0,78>, a=<1,-7,-13> +p=<-128,2286,3579>, v=<55,32,-122>, a=<-4,-10,-2> +p=<-3812,1686,27>, v=<-29,-43,-24>, a=<15,-2,2> +p=<-33,-807,1257>, v=<-20,31,-83>, a=<4,4,-2> +p=<942,-1249,685>, v=<-67,79,-53>, a=<0,2,0> +p=<-423,-1119,191>, v=<-32,-15,-15>, a=<10,14,0> +p=<2772,-7072,-3749>, v=<-53,-94,34>, a=<-2,19,5> +p=<-3052,3008,5659>, v=<-3,-13,-128>, a=<6,-5,-3> +p=<2980,-11056,-2565>, v=<56,80,30>, a=<-9,16,3> +p=<4676,3696,7083>, v=<-162,-51,-90>, a=<1,-4,-8> +p=<-492,2224,379>, v=<82,-71,-62>, a=<-4,0,3> +p=<3332,-1264,8443>, v=<-54,104,-17>, a=<-3,-4,-15> +p=<-1196,11904,-3445>, v=<-28,-126,-25>, a=<4,-15,8> +p=<244,2096,8779>, v=<-7,65,22>, a=<0,-8,-18> +p=<-1502,113,127>, v=<3,-41,-53>, a=<12,4,6> +p=<-1112,233,-548>, v=<65,15,40>, a=<1,-4,0> +p=<73,-2377,-458>, v=<10,-3,42>, a=<-2,20,-1> +p=<-632,-1537,-188>, v=<-31,-3,48>, a=<9,13,-4> +p=<253,8,1267>, v=<14,-2,-57>, a=<-4,0,-3> +p=<-2342,-1792,517>, v=<67,54,1>, a=<11,8,-4> +p=<-1607,1193,37>, v=<2,-81,-103>, a=<13,0,13> +p=<-3302,-232,-2588>, v=<123,6,32>, a=<12,1,18> +p=<156,-333,2057>, v=<58,-71,-52>, a=<-6,8,-4> +p=<-75,969,-2017>, v=<25,-12,10>, a=<-2,-3,8> +p=<30,-4869,1469>, v=<-156,35,-46>, a=<14,18,-2> +p=<-3204,1200,-2374>, v=<86,-100,27>, a=<6,4,8> +p=<2907,1137,-2815>, v=<-18,24,26>, a=<-11,-7,10> +p=<-278,189,-3099>, v=<3,-12,51>, a=<1,0,11> +p=<-468,930,-2928>, v=<43,-21,102>, a=<-2,-3,5> +p=<-2045,-210,207>, v=<-44,-11,-23>, a=<15,2,1> +p=<596,4369,-420>, v=<-113,-42,0>, a=<8,-19,2> +p=<-829,-96,-1921>, v=<-8,13,129>, a=<5,-1,-3> +p=<2914,-780,1537>, v=<-85,29,7>, a=<-7,1,-9> +p=<667,-850,-181>, v=<18,13,-9>, a=<-5,3,2> +p=<952,404,3961>, v=<33,67,-117>, a=<-8,-9,-9> +p=<-4083,689,3182>, v=<58,-38,-36>, a=<16,0,-13> +p=<3669,2627,1586>, v=<-70,-20,-12>, a=<-12,-12,-7> +p=<1731,-204,-1549>, v=<-88,69,63>, a=<0,-6,2> +p=<-2525,366,1909>, v=<16,39,31>, a=<12,-6,-13> +p=<420,3862,-200>, v=<-19,-105,-18>, a=<0,-10,3> +p=<1256,-1382,-390>, v=<-63,61,-8>, a=<0,1,3> +p=<1284,1741,445>, v=<-113,-41,68>, a=<4,-8,-11> +p=<-780,885,885>, v=<-1,-47,-36>, a=<6,-1,-2> +p=<796,-1587,-731>, v=<-74,99,48>, a=<3,0,0> +p=<1036,-1859,1717>, v=<30,-3,-20>, a=<-11,14,-10> +p=<52,669,325>, v=<-2,9,-103>, a=<0,-6,10> +p=<1724,-2675,-379>, v=<-149,99,9>, a=<5,8,2> +p=<-3652,989,-435>, v=<136,-96,4>, a=<11,4,3> +p=<-660,-427,-1139>, v=<119,69,116>, a=<-9,-5,-5> +p=<-1054,-503,-2618>, v=<41,30,114>, a=<3,0,6> +p=<1594,2001,-10>, v=<-31,-16,19>, a=<-8,-13,-2> +p=<1946,-839,-2250>, v=<-121,-34,91>, a=<0,10,6> +p=<1882,-311,2262>, v=<-15,35,-55>, a=<-12,-2,-10> +p=<1642,1073,206>, v=<-51,-77,-54>, a=<-6,1,5> +p=<2154,817,326>, v=<-66,58,32>, a=<-8,-13,-6> +p=<-1726,2617,1662>, v=<100,-80,-43>, a=<1,-10,-7> +p=<-2662,2545,-130>, v=<48,-101,18>, a=<14,-7,-1> +p=<1799,2271,3676>, v=<-122,-39,-86>, a=<4,-3,-3> +p=<-7371,-5583,2892>, v=<133,82,-116>, a=<9,8,1> +p=<2107,-1761,246>, v=<-17,18,51>, a=<-4,3,-4> +p=<-4627,-1453,2738>, v=<122,94,-9>, a=<3,-3,-6> +p=<917,-1173,2164>, v=<69,-32,113>, a=<-7,5,-13> +p=<-2821,493,-5214>, v=<14,39,-15>, a=<6,-4,14> +p=<-497,3503,-5102>, v=<18,-141,126>, a=<0,1,4> +p=<-5789,1613,2206>, v=<149,-30,39>, a=<4,-2,-8> +p=<1855,-2881,2850>, v=<-153,87,-100>, a=<6,1,0> +p=<-1437,-2510,2378>, v=<3,51,-5>, a=<6,6,-10> +p=<-2256,871,-1654>, v=<-24,-33,0>, a=<12,-1,7> +p=<474,-746,-562>, v=<-22,-33,3>, a=<0,6,2> +p=<-998,-5851,-402>, v=<103,189,123>, a=<-5,10,-10> +p=<2902,-1171,-1782>, v=<-113,18,45>, a=<-3,4,4> +p=<-1268,1779,-372>, v=<1,-14,-57>, a=<6,-7,7> +p=<532,-2881,-402>, v=<121,30,18>, a=<-14,11,0> +p=<-1248,-3501,-3432>, v=<63,124,-9>, a=<0,5,17> +p=<-868,-531,-3632>, v=<44,49,43>, a=<0,-2,13> +p=<6474,-2376,-1510>, v=<15,-67,32>, a=<-14,9,1> +p=<-3136,-6375,-9105>, v=<85,-2,149>, a=<1,13,9> +p=<863,6614,1218>, v=<84,-37,-72>, a=<-7,-11,2> +p=<-966,197,7170>, v=<31,-150,-40>, a=<0,9,-12> +p=<-3446,-2655,6302>, v=<-33,38,-156>, a=<9,3,-3> +p=<4397,-3709,-1076>, v=<-62,56,-62>, a=<-5,4,6> +p=<-322,-1160,-2709>, v=<-31,16,88>, a=<6,6,8> +p=<2024,-2316,2510>, v=<-88,75,-39>, a=<-3,7,-12> +p=<-50,1118,1184>, v=<-56,-19,-24>, a=<7,-5,-5> +p=<-12607,-1099,3400>, v=<98,83,8>, a=<18,-3,-7> +p=<-783,-747,-6216>, v=<-24,-93,-71>, a=<3,7,16> +p=<-558,-2190,4022>, v=<61,-16,-43>, a=<-3,8,-9> +p=<-4358,-540,-6053>, v=<18,100,87>, a=<12,-6,12> +p=<2642,2960,-1303>, v=<-41,-1,53>, a=<-5,-9,0> +p=<-1408,1010,6972>, v=<-48,-40,-187>, a=<8,0,-7> +p=<-1433,-5540,-5403>, v=<135,66,74>, a=<-6,12,11> +p=<217,-4115,2747>, v=<-35,126,-70>, a=<2,3,-3> +p=<1792,5685,-2253>, v=<97,-71,91>, a=<-13,-12,0> +p=<-158,1210,172>, v=<71,121,111>, a=<-5,-13,-9> +p=<-858,-3615,-3303>, v=<-18,15,159>, a=<4,10,-2> +p=<-6083,-5215,-1353>, v=<61,14,55>, a=<14,15,0> +p=<1908,1058,-75>, v=<60,-95,57>, a=<-10,4,-4> +p=<907,4204,-4820>, v=<31,-81,-44>, a=<-5,-6,17> +p=<3637,-411,-2246>, v=<34,29,-35>, a=<-13,-1,9> +p=<1362,-4155,-283>, v=<54,11,-43>, a=<-8,11,4> +p=<4701,-9467,8834>, v=<-133,37,-37>, a=<0,13,-12> +p=<-5204,2713,-3871>, v=<6,31,2>, a=<8,-6,6> +p=<-2016,-470,-1992>, v=<-286,-72,-288>, a=<19,6,19> +p=<-2067,-2051,-1458>, v=<-296,-291,-207>, a=<20,22,10> +p=<-1027,-2595,-500>, v=<-147,-371,-71>, a=<8,27,7> +p=<-71,-3053,486>, v=<-10,-430,69>, a=<-1,33,-5> +p=<1668,359,-2327>, v=<238,50,-329>, a=<-15,-4,28> +p=<2009,537,-2278>, v=<284,76,-324>, a=<-14,-8,17> +p=<-773,2518,931>, v=<-112,357,135>, a=<5,-23,-5> +p=<411,802,2157>, v=<63,108,308>, a=<-5,-10,-21> +p=<-1874,107,2417>, v=<-266,18,347>, a=<12,-5,-26> +p=<2244,-2094,35>, v=<317,-298,9>, a=<-17,22,3> +p=<-1796,1907,1218>, v=<-255,270,175>, a=<20,-21,-10> +p=<-2128,1882,-1395>, v=<-311,268,-196>, a=<19,-16,11> +p=<1115,1844,-2272>, v=<159,260,-324>, a=<-4,-20,26> +p=<2896,560,152>, v=<414,77,25>, a=<-33,-8,1> +p=<2896,1485,547>, v=<413,210,80>, a=<-23,-14,-6> +p=<2936,-363,123>, v=<419,-49,19>, a=<-29,0,-2> +p=<1380,-388,-3156>, v=<197,-55,-448>, a=<-19,0,30> +p=<-240,-2621,-1687>, v=<-32,-368,-241>, a=<6,23,15> +p=<-2151,-239,1867>, v=<-310,-37,268>, a=<21,-4,-19> +p=<-2715,494,1671>, v=<-384,70,236>, a=<31,-3,-16> +p=<1594,442,2371>, v=<231,60,340>, a=<-13,-5,-25> +p=<-387,2027,1630>, v=<-55,284,232>, a=<-1,-21,-21> +p=<873,2025,1551>, v=<131,291,220>, a=<-8,-22,-16> +p=<-2969,370,26>, v=<-429,50,2>, a=<28,-5,-1> +p=<2798,897,-1992>, v=<400,125,-287>, a=<-33,-8,25> +p=<-1072,892,-2424>, v=<-153,127,-354>, a=<10,-5,23> +p=<1194,-2051,-1285>, v=<166,-290,-186>, a=<-13,25,16> +p=<-304,-2224,-1635>, v=<-39,-313,-229>, a=<7,22,16> +p=<498,1066,2607>, v=<74,151,370>, a=<-11,-12,-30> +p=<3622,401,268>, v=<514,57,32>, a=<-34,-4,-2> +p=<-1957,-506,-2453>, v=<-285,-66,-348>, a=<16,3,23> +p=<-1362,-501,-2102>, v=<-195,-65,-299>, a=<18,7,19> +p=<1933,1724,1334>, v=<279,246,189>, a=<-25,-21,-14> +p=<-2142,1260,-2152>, v=<-311,181,-314>, a=<22,-12,23> +p=<-347,-1371,-2579>, v=<-51,-196,-371>, a=<6,16,25> +p=<1083,2704,106>, v=<151,385,17>, a=<-12,-30,4> +p=<-2820,1697,811>, v=<-400,242,120>, a=<32,-16,-6> +p=<-1104,2720,-1534>, v=<-156,388,-219>, a=<11,-26,17> +p=<589,-751,2836>, v=<81,-108,406>, a=<-1,3,-27> +p=<-1067,-1168,2214>, v=<-152,-161,317>, a=<10,11,-22> +p=<-1207,-366,2703>, v=<-172,-52,381>, a=<17,3,-34> +p=<-1192,-3124,-321>, v=<-173,-452,-44>, a=<7,33,7> +p=<2232,-893,1778>, v=<319,-128,255>, a=<-22,9,-21> +p=<1871,-460,2230>, v=<269,-65,321>, a=<-17,4,-22> +p=<-2409,-753,795>, v=<-344,-106,113>, a=<20,4,-4> +p=<1280,386,-2672>, v=<181,53,-383>, a=<-8,-4,29> +p=<3029,1184,391>, v=<433,169,56>, a=<-25,-6,-2> +p=<1127,-737,2201>, v=<161,-105,311>, a=<-10,13,-20> +p=<-2639,-1118,-1104>, v=<-380,-159,-163>, a=<26,7,13> +p=<1096,258,3149>, v=<158,36,449>, a=<-7,1,-32> +p=<1163,2004,2321>, v=<166,283,330>, a=<-12,-25,-20> +p=<2115,-918,-1957>, v=<309,-131,-279>, a=<-20,13,18> +p=<-1432,1051,2016>, v=<-205,149,290>, a=<15,-10,-18> +p=<-1889,2232,-912>, v=<-271,317,-126>, a=<21,-19,3> +p=<-2217,1395,1388>, v=<-313,196,202>, a=<22,-17,-13> +p=<-1257,-704,-2330>, v=<-180,-100,-331>, a=<12,7,27> +p=<-1663,1076,-1905>, v=<-234,150,-270>, a=<16,-10,19> +p=<1327,1340,2125>, v=<189,195,302>, a=<-13,-11,-20> +p=<-1280,-739,-2082>, v=<-179,-107,-300>, a=<11,4,21> +p=<-1554,-998,2380>, v=<-222,-143,342>, a=<19,3,-27> +p=<679,-2132,2115>, v=<95,-305,299>, a=<-3,18,-22> +p=<-217,2813,-1020>, v=<-35,399,-142>, a=<3,-28,9> +p=<2867,-866,-1319>, v=<409,-125,-184>, a=<-28,5,10> +p=<-1320,1952,2228>, v=<-188,280,317>, a=<13,-20,-17> +p=<-1304,-1233,2264>, v=<-186,-174,319>, a=<17,12,-22> +p=<-2692,-721,-888>, v=<-382,-103,-129>, a=<20,3,9> +p=<-1976,-1554,-1752>, v=<-275,-218,-250>, a=<20,9,19> +p=<-1203,2819,-1294>, v=<-172,405,-185>, a=<11,-27,14> +p=<-2327,2241,449>, v=<-334,326,62>, a=<24,-24,-2> +p=<-2067,2050,1210>, v=<-295,297,169>, a=<20,-15,-7> +p=<1378,2394,527>, v=<190,344,70>, a=<-11,-22,-5> +p=<-1488,-2886,-992>, v=<-212,-413,-148>, a=<10,29,8> +p=<-1696,2898,-319>, v=<-245,413,-45>, a=<12,-28,2> +p=<3098,797,-510>, v=<440,113,-67>, a=<-32,-7,6> +p=<-2871,-578,-611>, v=<-410,-82,-88>, a=<24,5,5> +p=<1034,-1285,-2480>, v=<146,-185,-354>, a=<-10,15,22> +p=<879,1740,1198>, v=<122,246,168>, a=<-10,-16,-12> +p=<3168,1337,-308>, v=<448,191,-40>, a=<-31,-13,3> +p=<3035,-1149,893>, v=<434,-163,126>, a=<-27,9,-9> +p=<-947,-2705,656>, v=<-131,-387,93>, a=<8,25,-3> +p=<500,-2393,1363>, v=<77,-348,193>, a=<0,23,-8> +p=<-1882,1920,796>, v=<-268,272,115>, a=<19,-17,-3> +p=<-960,493,-2623>, v=<-139,68,-374>, a=<9,-8,21> +p=<1828,-2071,1203>, v=<259,-291,167>, a=<-18,21,-9> +p=<-1604,1283,-1649>, v=<-230,181,-239>, a=<18,-14,16> +p=<-1799,2321,-868>, v=<-252,330,-119>, a=<22,-21,8> +p=<-24,2346,-1669>, v=<-7,335,-243>, a=<4,-22,19> +p=<-876,-1276,2680>, v=<-123,-188,378>, a=<10,14,-26> +p=<-2889,1176,545>, v=<-415,168,80>, a=<32,-11,-7> +p=<-86,1176,2086>, v=<-12,168,300>, a=<-1,-7,-20> +p=<-402,-2477,807>, v=<-57,-353,119>, a=<4,27,-2> +p=<-1970,-1448,-1967>, v=<-278,-202,-283>, a=<19,12,24> +p=<631,-958,-2998>, v=<89,-136,-432>, a=<-8,10,33> +p=<-1785,1056,1545>, v=<-256,148,213>, a=<13,-15,-15> +p=<1676,1822,1043>, v=<241,263,147>, a=<-16,-17,-8> +p=<-56,2448,1580>, v=<-11,347,223>, a=<4,-24,-15> +p=<-2842,439,379>, v=<-406,66,54>, a=<31,-2,-4> +p=<-1293,1742,-1884>, v=<-183,246,-267>, a=<10,-13,18> +p=<-1336,2627,-1311>, v=<-197,379,-184>, a=<9,-23,12> +p=<-618,2160,-2253>, v=<-83,313,-321>, a=<9,-21,22> +p=<2734,-1738,-454>, v=<389,-247,-60>, a=<-27,17,8> +p=<-2927,-295,-97>, v=<-417,-40,-13>, a=<27,1,5> +p=<1538,-1987,-280>, v=<222,-283,-38>, a=<-13,18,5> +p=<-2076,1215,-363>, v=<-298,172,-53>, a=<18,-17,3> +p=<-2642,183,341>, v=<-377,19,50>, a=<23,1,-1> +p=<-31,2384,-1377>, v=<-5,337,-199>, a=<2,-26,11> +p=<771,690,-2686>, v=<116,98,-379>, a=<-15,-3,29> +p=<-68,-2134,-3000>, v=<-10,-301,-431>, a=<1,23,33> +p=<3022,1487,35>, v=<434,213,6>, a=<-31,-14,6> +p=<-402,-2383,-1800>, v=<-57,-340,-257>, a=<2,17,17> +p=<-1125,744,-2551>, v=<-156,106,-364>, a=<8,-3,25> +p=<705,2907,-863>, v=<100,411,-120>, a=<-4,-37,6> +p=<-303,-424,3358>, v=<-43,-57,481>, a=<9,0,-33> +p=<3065,-242,1553>, v=<438,-36,221>, a=<-28,-4,-15> +p=<211,3341,-1331>, v=<33,481,-190>, a=<1,-35,12> +p=<2309,1563,-21>, v=<333,218,-3>, a=<-21,-16,0> +p=<-1142,3233,737>, v=<-158,461,107>, a=<15,-32,-2> +p=<241,-3065,-706>, v=<32,-437,-101>, a=<-1,30,10> +p=<-1229,-1539,2489>, v=<-171,-212,353>, a=<14,15,-20> +p=<1664,132,-1899>, v=<236,19,-273>, a=<-18,1,15> +p=<-27,-599,2800>, v=<-2,-87,402>, a=<4,5,-30> +p=<-3022,842,-1427>, v=<-431,120,-204>, a=<26,-13,14> +p=<-2558,-862,-996>, v=<-362,-122,-135>, a=<28,11,7> +p=<1860,-1025,-2431>, v=<259,-143,-349>, a=<-21,13,24> +p=<2563,-1818,534>, v=<364,-258,82>, a=<-30,20,-8> +p=<614,-3055,-609>, v=<87,-431,-89>, a=<-6,27,2> +p=<-180,-3323,420>, v=<-22,-472,60>, a=<5,34,-2> +p=<1270,1194,-2769>, v=<182,168,-391>, a=<-14,-11,23> +p=<-89,-1147,-2030>, v=<-13,-165,-285>, a=<3,12,22> +p=<-159,-2746,874>, v=<-20,-391,128>, a=<3,27,-15> +p=<2942,694,778>, v=<423,104,112>, a=<-28,-5,-8> +p=<2937,775,238>, v=<418,118,30>, a=<-29,-7,1> +p=<-2889,-1216,-1522>, v=<-414,-176,-214>, a=<29,13,10> +p=<3108,-504,1282>, v=<440,-72,183>, a=<-37,6,-13> +p=<1404,-2482,-779>, v=<201,-356,-114>, a=<-15,21,11> +p=<-3135,1691,-457>, v=<-445,242,-63>, a=<33,-14,7> +p=<593,-560,-3030>, v=<85,-76,-433>, a=<-11,7,29> +p=<-1810,2667,339>, v=<-259,384,50>, a=<21,-28,-6> +p=<1361,2731,923>, v=<194,391,131>, a=<-13,-29,-11> +p=<-491,-1870,2097>, v=<-70,-259,295>, a=<4,12,-16> +p=<202,-3264,584>, v=<30,-464,83>, a=<-2,28,-4> +p=<-420,2323,-1657>, v=<-60,332,-233>, a=<5,-23,20> +p=<1630,-1018,1758>, v=<232,-143,246>, a=<-13,10,-17> +p=<1479,-2655,-951>, v=<213,-380,-135>, a=<-17,23,5> +p=<-1309,599,-2712>, v=<-191,85,-389>, a=<14,-3,26> +p=<-365,-1831,-3076>, v=<-52,-257,-439>, a=<1,18,28> +p=<-1572,-82,2148>, v=<-224,-6,308>, a=<11,1,-22> +p=<1951,839,-1829>, v=<275,120,-266>, a=<-16,-2,18> +p=<-462,-2306,1178>, v=<-67,-327,168>, a=<4,25,-9> +p=<-1355,-1176,2319>, v=<-189,-167,329>, a=<10,11,-23> +p=<-1609,846,1797>, v=<-226,121,262>, a=<23,-6,-17> +p=<-584,-214,2601>, v=<-80,-30,376>, a=<4,1,-26> +p=<-2998,-621,-215>, v=<-428,-88,-33>, a=<29,4,6> +p=<-2037,-2515,-628>, v=<-283,-362,-90>, a=<19,26,2> +p=<899,-825,3038>, v=<128,-123,434>, a=<-6,6,-32> +p=<1501,246,-2640>, v=<208,35,-377>, a=<-12,-8,23> +p=<-2606,-1301,775>, v=<-372,-185,112>, a=<22,12,-3> +p=<-1243,1236,2385>, v=<-182,172,337>, a=<11,-13,-21> +p=<759,735,-2578>, v=<111,105,-370>, a=<-4,-2,26> +p=<-2138,576,2315>, v=<-303,87,330>, a=<23,-6,-22> +p=<1450,-2184,-1592>, v=<206,-312,-226>, a=<-12,23,19> +p=<-1024,2357,1170>, v=<-146,332,164>, a=<10,-24,-11> +p=<1895,2547,-22>, v=<270,365,-8>, a=<-24,-25,0> +p=<2776,124,-668>, v=<395,18,-90>, a=<-24,2,9> +p=<-2599,104,474>, v=<-366,9,74>, a=<25,-6,-8> +p=<139,185,2854>, v=<20,28,406>, a=<-5,3,-30> +p=<2164,1455,-616>, v=<309,205,-89>, a=<-25,-15,3> +p=<1800,463,2549>, v=<256,66,367>, a=<-19,-4,-28> +p=<2538,-1430,344>, v=<361,-203,47>, a=<-28,15,-3> +p=<-9,2185,1710>, v=<-6,312,246>, a=<-4,-22,-15> +p=<-34,144,-3420>, v=<-4,13,-489>, a=<-3,-2,33> +p=<880,813,-2385>, v=<125,115,-339>, a=<-13,-7,18> +p=<1889,-2915,20>, v=<271,-421,0>, a=<-14,25,-2> +p=<1368,-1912,-679>, v=<198,-280,-95>, a=<-13,23,4> +p=<2464,756,-1235>, v=<351,108,-174>, a=<-18,-12,12> +p=<536,-896,2762>, v=<80,-124,398>, a=<-6,5,-29> +p=<-275,26,3405>, v=<-41,2,489>, a=<2,-3,-32> +p=<-691,2510,2012>, v=<-100,358,287>, a=<2,-24,-21> +p=<186,776,-2800>, v=<26,108,-398>, a=<-1,-9,31> +p=<48,-2765,51>, v=<6,-394,7>, a=<0,28,1> +p=<-1243,-2674,-621>, v=<-181,-387,-90>, a=<14,25,8> +p=<637,-2968,249>, v=<91,-432,37>, a=<-8,29,-2> +p=<-108,2644,-359>, v=<-15,377,-43>, a=<0,-25,1> +p=<311,2396,1647>, v=<46,341,238>, a=<0,-23,-19> +p=<2091,863,1991>, v=<300,123,281>, a=<-17,-8,-22> +p=<-1316,1419,1976>, v=<-183,204,279>, a=<13,-15,-21> +p=<57,-1973,2964>, v=<2,-281,424>, a=<-1,21,-29> +p=<-775,-2721,-1750>, v=<-109,-389,-247>, a=<13,28,19> +p=<731,1583,-2157>, v=<110,228,-314>, a=<-6,-15,22> +p=<-893,2775,-190>, v=<-126,396,-26>, a=<6,-27,2> +p=<367,-2679,-1080>, v=<51,-384,-154>, a=<-7,27,11> +p=<3177,-367,441>, v=<445,-51,64>, a=<-30,3,-5> +p=<-1647,-1342,2341>, v=<-240,-185,331>, a=<12,13,-23> +p=<986,-2763,1286>, v=<136,-391,185>, a=<-9,28,-9> +p=<-2802,-1225,252>, v=<-399,-180,31>, a=<26,13,1> +p=<175,2883,-1052>, v=<30,408,-150>, a=<-2,-31,13> +p=<-229,-2683,-1449>, v=<-28,-386,-211>, a=<7,28,14> +p=<2786,531,1110>, v=<398,77,157>, a=<-29,-8,-9> +p=<279,-2586,-2001>, v=<35,-371,-285>, a=<-2,27,20> +p=<2176,-126,1717>, v=<304,-19,245>, a=<-21,1,-24> +p=<2153,2118,998>, v=<304,302,142>, a=<-26,-24,-9> +p=<-744,2719,1245>, v=<-111,386,176>, a=<2,-28,-16> +p=<3101,-1190,-994>, v=<444,-167,-143>, a=<-34,12,7> +p=<-156,-2267,-2303>, v=<-21,-324,-334>, a=<5,19,22> +p=<1023,-1402,2182>, v=<143,-199,312>, a=<-8,20,-28> +p=<2486,-1200,-1942>, v=<359,-171,-278>, a=<-22,12,19> +p=<1355,1883,2115>, v=<197,269,305>, a=<-15,-18,-24> +p=<1830,788,2438>, v=<263,107,349>, a=<-13,-9,-17> +p=<-912,715,3178>, v=<-131,105,450>, a=<6,-9,-30> +p=<1612,-1972,-156>, v=<226,-283,-23>, a=<-20,13,4> +p=<893,-2183,2349>, v=<126,-319,334>, a=<-13,23,-24> +p=<1817,-2407,-431>, v=<256,-343,-63>, a=<-18,20,1> +p=<2372,1739,-527>, v=<336,250,-74>, a=<-23,-20,4> +p=<-2169,-888,1343>, v=<-305,-122,186>, a=<23,3,-15> +p=<1004,-2830,-740>, v=<139,-399,-107>, a=<-11,27,6> +p=<-305,-2955,521>, v=<-40,-419,74>, a=<3,29,-7> +p=<-509,1141,2439>, v=<-75,160,348>, a=<3,-11,-24> +p=<-2301,1385,-970>, v=<-327,199,-139>, a=<15,-17,11> +p=<-2030,1762,-1028>, v=<-292,253,-142>, a=<20,-21,11> +p=<-861,2917,38>, v=<-123,415,7>, a=<7,-29,3> +p=<-167,-2616,1713>, v=<-21,-374,241>, a=<2,18,-20> +p=<-1058,1016,-2844>, v=<-157,151,-402>, a=<10,-10,28> +p=<1515,795,-2400>, v=<214,120,-339>, a=<-14,-5,25> +p=<-1976,1929,1093>, v=<-285,274,156>, a=<23,-17,-10> +p=<-2791,376,-1195>, v=<-397,50,-169>, a=<27,1,14> +p=<-415,-2632,-1896>, v=<-61,-373,-274>, a=<5,29,19> +p=<731,2967,-1217>, v=<104,426,-175>, a=<-4,-29,12> +p=<-1052,-2543,-649>, v=<-154,-365,-94>, a=<8,23,0> +p=<-86,-1297,2692>, v=<-8,-183,387>, a=<1,12,-29> +p=<2334,-1447,1773>, v=<334,-210,250>, a=<-23,19,-22> +p=<-1461,1036,3091>, v=<-214,152,440>, a=<14,-7,-29> +p=<574,1634,-2195>, v=<82,232,-314>, a=<-4,-8,25> +p=<2758,-1277,-252>, v=<395,-186,-36>, a=<-30,16,-2> +p=<2285,-1449,1267>, v=<328,-207,185>, a=<-28,16,-12> +p=<-1991,-2098,-804>, v=<-284,-292,-118>, a=<17,16,8> +p=<1255,909,2080>, v=<180,129,296>, a=<-12,-13,-18> +p=<-1210,1924,-2166>, v=<-170,273,-309>, a=<10,-19,21> +p=<498,619,-2631>, v=<70,90,-374>, a=<-6,-6,29> +p=<1181,1790,-2398>, v=<170,253,-340>, a=<-10,-16,27> +p=<1096,-2878,-674>, v=<156,-411,-98>, a=<-14,29,9> +p=<-1718,2707,-58>, v=<-244,383,-7>, a=<17,-31,1> +p=<576,-3141,-439>, v=<83,-454,-62>, a=<0,28,7> +p=<1993,-1807,1900>, v=<284,-255,271>, a=<-18,18,-18> +p=<758,2506,-1611>, v=<105,354,-234>, a=<-6,-25,20> +p=<-2346,1520,-480>, v=<-335,217,-66>, a=<19,-12,4> +p=<-3102,541,88>, v=<-435,80,11>, a=<33,-7,1> +p=<1428,1818,-1579>, v=<205,256,-224>, a=<-12,-18,15> +p=<-2580,242,-393>, v=<-367,37,-61>, a=<23,2,4> +p=<2525,-866,-1209>, v=<360,-119,-172>, a=<-25,6,12> +p=<-1643,-1621,1822>, v=<-238,-235,263>, a=<13,16,-17> +p=<-1935,2048,802>, v=<-274,293,110>, a=<21,-20,-6> +p=<1482,2793,-375>, v=<213,399,-47>, a=<-17,-30,10> +p=<1252,2495,-610>, v=<176,357,-88>, a=<-12,-26,9> +p=<1009,250,-2787>, v=<143,35,-398>, a=<-10,-5,27> +p=<-878,2715,-1519>, v=<-125,385,-217>, a=<9,-24,16> +p=<-1311,2581,1146>, v=<-184,371,160>, a=<13,-24,-10> +p=<2640,410,-781>, v=<378,59,-114>, a=<-19,-6,14> +p=<-371,1354,-2693>, v=<-52,194,-384>, a=<6,-13,29> +p=<537,-2185,-2231>, v=<75,-312,-317>, a=<-3,28,25> +p=<-32,-2568,1670>, v=<-4,-370,242>, a=<3,25,-14> +p=<1565,1932,454>, v=<223,277,66>, a=<-15,-19,-3> +p=<-1345,2918,-69>, v=<-192,416,-11>, a=<10,-25,1> +p=<-2085,-271,-1874>, v=<-297,-38,-263>, a=<20,4,23> +p=<2111,-2280,-74>, v=<305,-322,-6>, a=<-22,24,-4> +p=<12,-488,3282>, v=<6,-69,462>, a=<-4,6,-35> +p=<-829,-937,2551>, v=<-116,-137,367>, a=<3,12,-23> +p=<1314,2115,-1539>, v=<187,298,-218>, a=<-13,-14,20> +p=<666,553,-3136>, v=<94,80,-448>, a=<-5,-5,28> +p=<373,2363,-928>, v=<52,335,-130>, a=<0,-20,8> +p=<-16,923,3038>, v=<0,125,435>, a=<0,-11,-30> +p=<-582,-2415,-1123>, v=<-84,-349,-157>, a=<5,20,18> +p=<1104,-320,2444>, v=<158,-44,354>, a=<-11,2,-23> +p=<-187,-1095,2647>, v=<-26,-156,376>, a=<-1,12,-21> +p=<-1421,-2357,200>, v=<-201,-333,33>, a=<15,21,2> +p=<1877,90,2147>, v=<273,12,309>, a=<-16,0,-21> +p=<-1880,419,-2597>, v=<-271,63,-374>, a=<18,-4,25> +p=<-1609,414,-2417>, v=<-229,59,-351>, a=<10,-1,24> +p=<-1480,2235,-210>, v=<-210,316,-30>, a=<12,-20,0> +p=<-1941,743,2365>, v=<-277,110,337>, a=<15,-7,-25> +p=<1495,-2896,1065>, v=<214,-412,152>, a=<-11,26,-10> +p=<-2038,541,1731>, v=<-286,80,245>, a=<15,-6,-13> +p=<1316,175,-2635>, v=<187,26,-378>, a=<-10,-1,27> +p=<1778,1932,-399>, v=<254,274,-57>, a=<-16,-20,3> +p=<-2497,84,472>, v=<-355,12,70>, a=<24,0,-6> +p=<566,-1984,-1067>, v=<77,-285,-155>, a=<-2,22,11> +p=<-1138,420,-3082>, v=<-157,62,-440>, a=<15,-1,34> +p=<789,-2022,2212>, v=<115,-290,317>, a=<-10,16,-25> +p=<354,-2402,-1538>, v=<50,-343,-214>, a=<-2,22,15> +p=<-1233,-3403,-289>, v=<-181,-482,-40>, a=<14,28,2> +p=<-2416,-1448,462>, v=<-346,-204,70>, a=<24,12,-3> +p=<676,-2408,-1515>, v=<88,-343,-221>, a=<-6,23,14> +p=<795,420,-2555>, v=<106,57,-366>, a=<-6,-5,24> +p=<951,-2678,-2019>, v=<133,-382,-289>, a=<-7,23,20> +p=<384,1486,2761>, v=<54,207,394>, a=<-4,-11,-26> +p=<-2164,1308,-2362>, v=<-308,186,-343>, a=<23,-12,23> +p=<1636,-2395,-677>, v=<233,-344,-102>, a=<-17,19,7> +p=<-836,2716,802>, v=<-116,390,114>, a=<5,-26,-8> +p=<-1017,2318,-1502>, v=<-148,331,-212>, a=<14,-22,14> +p=<-8,2290,-2327>, v=<-1,326,-336>, a=<0,-26,23> +p=<957,-475,-2503>, v=<135,-71,-363>, a=<-7,4,21> +p=<-1802,1695,-2518>, v=<-262,242,-356>, a=<17,-16,22> +p=<-1918,1084,978>, v=<-273,152,140>, a=<19,-8,-9> +p=<-2718,-511,267>, v=<-390,-70,38>, a=<22,0,-5> +p=<-931,741,-2861>, v=<-135,107,-409>, a=<4,-8,27> +p=<2919,720,-429>, v=<418,105,-59>, a=<-30,-11,4> +p=<-127,-208,-2528>, v=<-17,-29,-361>, a=<-2,2,24> +p=<2588,-1533,325>, v=<369,-224,46>, a=<-25,15,-5> +p=<2240,755,1445>, v=<321,110,206>, a=<-20,-8,-11> +p=<-1025,-2658,396>, v=<-144,-381,56>, a=<9,22,4> +p=<-1591,-1577,-2200>, v=<-227,-229,-312>, a=<17,13,22> +p=<2320,-2390,453>, v=<328,-346,65>, a=<-19,26,-3> +p=<-2665,277,577>, v=<-379,37,82>, a=<25,1,-5> +p=<-244,-314,2533>, v=<-36,-49,359>, a=<-2,4,-24> +p=<1363,1901,-1003>, v=<198,268,-143>, a=<-15,-20,10> +p=<-1982,-2008,-666>, v=<-279,-286,-93>, a=<15,21,6> +p=<404,1110,-2724>, v=<57,152,-390>, a=<-5,-11,25> +p=<1106,-29,2811>, v=<157,-5,397>, a=<-4,-1,-29> +p=<1279,-1327,-2438>, v=<176,-186,-347>, a=<-16,13,23> +p=<-2442,-1060,-1808>, v=<-348,-152,-261>, a=<25,9,17> +p=<-2764,706,766>, v=<-392,99,116>, a=<26,-4,-11> +p=<398,-961,-2682>, v=<51,-137,-388>, a=<-2,9,30> +p=<1783,-461,-1623>, v=<258,-68,-234>, a=<-19,5,13> +p=<164,-766,-3613>, v=<24,-107,-517>, a=<2,9,39> +p=<-2002,-2461,-920>, v=<-287,-349,-131>, a=<24,21,4> +p=<770,493,3153>, v=<112,71,450>, a=<-4,-1,-35> +p=<-864,477,-3078>, v=<-120,73,-439>, a=<7,-6,29> +p=<1315,2948,-955>, v=<185,418,-134>, a=<-12,-27,10> +p=<1168,2186,-1475>, v=<165,308,-215>, a=<-11,-16,14> +p=<1883,1702,1906>, v=<270,252,273>, a=<-20,-13,-18> +p=<-2462,-1690,-48>, v=<-353,-241,-8>, a=<24,15,2> +p=<-1016,1706,2368>, v=<-144,242,341>, a=<7,-21,-20> +p=<2752,1230,178>, v=<394,178,26>, a=<-23,-16,-1> +p=<-3139,492,-93>, v=<-446,70,-14>, a=<31,-6,0> +p=<-232,-669,3400>, v=<-35,-95,487>, a=<-1,3,-29> +p=<521,-4,2511>, v=<73,0,361>, a=<-8,3,-33> +p=<-1580,-2272,-2040>, v=<-224,-323,-292>, a=<15,20,20> +p=<2936,10,680>, v=<419,1,100>, a=<-33,1,-7> +p=<3134,29,491>, v=<450,8,66>, a=<-31,4,0> +p=<2028,-2215,730>, v=<286,-317,101>, a=<-17,17,-6> +p=<-942,2508,227>, v=<-132,360,34>, a=<6,-18,-2> +p=<-2074,-337,-2307>, v=<-292,-51,-325>, a=<17,9,25> +p=<3138,-829,906>, v=<448,-116,129>, a=<-27,8,-3> +p=<417,-1567,2520>, v=<60,-223,357>, a=<-7,8,-29> +p=<-591,2981,-253>, v=<-79,425,-35>, a=<9,-29,2> +p=<-428,2571,-2295>, v=<-65,372,-326>, a=<-1,-25,23> +p=<-1147,-2613,-1664>, v=<-163,-373,-239>, a=<10,32,17> +p=<-682,2368,720>, v=<-96,338,106>, a=<10,-27,-10> +p=<414,2028,-1676>, v=<65,286,-239>, a=<-6,-20,16> +p=<80,2771,-1315>, v=<8,395,-188>, a=<0,-25,13> +p=<-571,765,-2510>, v=<-80,110,-354>, a=<1,-10,31> +p=<1755,-2364,-196>, v=<251,-339,-30>, a=<-16,25,-1> +p=<-995,-2303,54>, v=<-141,-327,13>, a=<6,21,3> +p=<987,-1899,-2046>, v=<141,-272,-292>, a=<-9,18,25> +p=<-230,-841,-2371>, v=<-31,-118,-337>, a=<2,5,23> +p=<2201,-1834,1184>, v=<312,-262,169>, a=<-22,20,-7> +p=<2301,277,-1316>, v=<331,41,-186>, a=<-22,3,11> +p=<-2248,1705,39>, v=<-320,240,10>, a=<19,-15,1> +p=<-1825,2384,950>, v=<-264,341,136>, a=<20,-23,-4> +p=<2159,583,-2049>, v=<306,85,-291>, a=<-17,2,20> +p=<752,-306,-2743>, v=<110,-44,-391>, a=<-7,3,28> +p=<-1600,733,2474>, v=<-228,102,353>, a=<16,-4,-29> +p=<-1931,-2210,-1867>, v=<-276,-309,-267>, a=<18,24,14> +p=<-1295,-2031,1686>, v=<-184,-292,239>, a=<12,21,-15> +p=<478,-2672,-94>, v=<69,-381,-17>, a=<-2,23,0> +p=<1317,662,2146>, v=<184,91,301>, a=<-16,-4,-19> +p=<761,-2068,1675>, v=<109,-295,240>, a=<-5,20,-13> +p=<3126,878,1183>, v=<444,125,167>, a=<-29,-5,-8> +p=<1005,-2563,-549>, v=<146,-368,-80>, a=<-15,25,4> +p=<2042,-1193,-2128>, v=<290,-166,-300>, a=<-17,15,22> +p=<200,-1578,2895>, v=<26,-223,413>, a=<-4,11,-28> +p=<-986,2686,-304>, v=<-138,378,-38>, a=<9,-26,5> +p=<2871,-1251,358>, v=<411,-175,52>, a=<-28,17,0> +p=<1868,319,-2475>, v=<267,45,-348>, a=<-18,-3,22> +p=<2451,19,-1262>, v=<352,-1,-183>, a=<-25,0,12> +p=<1585,2301,-869>, v=<231,330,-120>, a=<-10,-23,7> +p=<2502,1759,-696>, v=<357,257,-102>, a=<-24,-19,6> +p=<2305,537,-2463>, v=<332,77,-348>, a=<-22,-8,18> +p=<-255,2470,-1500>, v=<-35,349,-217>, a=<6,-22,12> +p=<-236,2477,-1290>, v=<-37,350,-184>, a=<6,-24,15> +p=<2401,258,1682>, v=<343,36,238>, a=<-21,-2,-16> +p=<-674,2633,130>, v=<-96,377,22>, a=<7,-32,0> +p=<-682,-183,-2591>, v=<-95,-27,-365>, a=<6,6,22> +p=<-153,2400,-2116>, v=<-24,340,-304>, a=<2,-25,20> +p=<-1243,2187,1831>, v=<-177,311,261>, a=<13,-22,-18> +p=<1115,-2968,-411>, v=<164,-423,-63>, a=<-5,31,5> +p=<2669,-425,-1805>, v=<381,-55,-256>, a=<-26,4,19> +p=<-1819,-1005,-1806>, v=<-259,-146,-254>, a=<13,9,22> +p=<2727,-746,-1095>, v=<388,-107,-161>, a=<-21,7,10> +p=<2988,-1385,-756>, v=<431,-194,-105>, a=<-31,12,9> +p=<1892,-843,-2112>, v=<270,-120,-295>, a=<-18,8,18> +p=<981,-1233,2354>, v=<140,-176,335>, a=<-7,11,-21> +p=<-798,910,2557>, v=<-114,134,367>, a=<9,-9,-28> +p=<1357,3162,599>, v=<193,457,83>, a=<-12,-31,-6> +p=<2670,1729,-42>, v=<383,245,-2>, a=<-29,-17,2> +p=<-1459,-1028,2060>, v=<-208,-142,297>, a=<17,8,-17> +p=<-166,-236,2935>, v=<-20,-33,417>, a=<-2,0,-29> +p=<3032,-500,391>, v=<440,-72,55>, a=<-35,10,1> +p=<1867,1954,117>, v=<266,282,16>, a=<-11,-15,1> +p=<165,1444,2170>, v=<20,206,312>, a=<-2,-10,-19> +p=<-2105,-2100,395>, v=<-303,-300,51>, a=<23,21,-3> +p=<-975,2566,-2097>, v=<-141,364,-304>, a=<5,-26,20> +p=<2688,-678,-926>, v=<383,-97,-136>, a=<-28,6,9> +p=<-331,-3031,-174>, v=<-43,-435,-21>, a=<4,33,4> +p=<-1036,-2037,-1769>, v=<-149,-290,-254>, a=<8,27,17> +p=<443,-1213,-2648>, v=<60,-173,-386>, a=<-8,14,26> +p=<-2666,220,1758>, v=<-380,31,253>, a=<27,1,-16> +p=<1168,2827,1304>, v=<169,403,184>, a=<-11,-27,-11> +p=<1237,645,2828>, v=<176,89,403>, a=<-11,-3,-27> +p=<-194,-718,2500>, v=<-26,-97,355>, a=<2,2,-25> +p=<-1738,-1623,1459>, v=<-246,-231,207>, a=<20,18,-14> +p=<607,-1729,-2554>, v=<87,-244,-363>, a=<-5,17,21> +p=<-772,2981,-1709>, v=<-108,429,-248>, a=<6,-29,13> +p=<-929,-935,2559>, v=<-131,-133,366>, a=<8,9,-27> +p=<1889,-2222,2>, v=<273,-315,-4>, a=<-23,24,2> +p=<2252,-1177,-1148>, v=<317,-163,-169>, a=<-22,7,14> +p=<898,1129,1677>, v=<128,160,240>, a=<-8,-11,-18> +p=<585,1776,-1605>, v=<86,257,-232>, a=<-3,-11,11> +p=<1329,-702,2447>, v=<188,-99,350>, a=<-20,5,-24> +p=<-740,-1556,-2238>, v=<-104,-219,-317>, a=<9,19,22> +p=<1221,2376,-501>, v=<176,343,-70>, a=<-13,-23,2> +p=<-18,-582,-2939>, v=<-1,-83,-416>, a=<0,11,31> +p=<328,-1362,2407>, v=<47,-192,345>, a=<-1,11,-24> +p=<2254,-795,-2176>, v=<319,-115,-306>, a=<-17,7,20> +p=<1945,2178,374>, v=<273,308,54>, a=<-22,-23,-3> +p=<-1255,1542,-2209>, v=<-182,220,-315>, a=<11,-15,23> +p=<-1029,1657,2328>, v=<-148,234,331>, a=<16,-16,-27> +p=<299,2821,-1374>, v=<44,402,-193>, a=<-7,-25,13> +p=<-2317,106,-1824>, v=<-331,20,-262>, a=<23,-1,13> +p=<784,-2450,-1388>, v=<116,-346,-195>, a=<-11,26,14> +p=<2738,-544,-356>, v=<393,-77,-49>, a=<-26,10,-3> +p=<1355,1483,2334>, v=<195,211,331>, a=<-12,-19,-17> +p=<2570,-849,-414>, v=<369,-117,-60>, a=<-21,9,9> +p=<313,-1203,-2974>, v=<41,-173,-422>, a=<-4,16,26> +p=<133,-3658,193>, v=<22,-524,27>, a=<-4,42,2> +p=<1293,-1644,2714>, v=<179,-232,383>, a=<-12,15,-33> +p=<152,1845,1804>, v=<24,263,261>, a=<-1,-14,-18> +p=<1059,2077,-1799>, v=<154,296,-251>, a=<-7,-19,13> +p=<-2954,-985,167>, v=<-418,-140,23>, a=<29,7,-3> diff --git a/2017/d20/ex2/ex2.py b/2017/d20/ex2/ex2.py new file mode 100755 index 0000000..d451315 --- /dev/null +++ b/2017/d20/ex2/ex2.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python + +import collections +import sys +from typing import NamedTuple + + +class Point(NamedTuple): + x: int + y: int + z: int + + +class Particle(NamedTuple): + pos: Point + vel: Point + acc: Point + + @classmethod + def from_str(cls, input: str) -> "Particle": + p, v, a = input.split(", ") + return cls( + Point(*map(int, p[3:-1].split(","))), + Point(*map(int, v[3:-1].split(","))), + Point(*map(int, a[3:-1].split(","))), + ) + + def tick(self) -> "Particle": + pos, vel, acc = self + vel = Point(*((v + a) for v, a in zip(vel, acc))) + pos = Point(*((p + v) for p, v in zip(pos, vel))) + return Particle(pos, vel, acc) + + +def solve(input: str) -> int: + def parse(input: str) -> list[Particle]: + return [Particle.from_str(line) for line in input.splitlines()] + + def tick(particles: list[Particle]) -> list[Particle]: + particles = [p.tick() for p in particles] + positions = collections.Counter(p.pos for p in particles) + return [p for p in particles if positions[p.pos] == 1] + + particles = parse(input) + # Guesstimate that 1000 iterations is enough to process all colisions + for _ in range(1000): + particles = tick(particles) + return len(particles) + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d20/ex2/input b/2017/d20/ex2/input new file mode 100644 index 0000000..d30ed99 --- /dev/null +++ b/2017/d20/ex2/input @@ -0,0 +1,1000 @@ +p=<1500,413,-535>, v=<-119,22,36>, a=<-5,-12,3> +p=<65,1223,-530>, v=<-14,-136,52>, a=<2,2,0> +p=<260,-387,800>, v=<49,14,-103>, a=<-13,4,4> +p=<429,726,462>, v=<-36,-36,-19>, a=<0,-6,-4> +p=<1705,-165,1331>, v=<-134,9,-104>, a=<-3,0,-3> +p=<341,693,-473>, v=<-28,9,-18>, a=<0,-13,10> +p=<2816,-2250,1464>, v=<-91,41,149>, a=<-4,6,-20> +p=<-1237,-1704,-531>, v=<47,125,35>, a=<1,-4,-1> +p=<-4828,-171,-447>, v=<86,8,-24>, a=<13,0,4> +p=<2553,3286,-5524>, v=<-128,45,41>, a=<3,-9,8> +p=<1065,8038,-3700>, v=<1,-87,17>, a=<-2,-10,6> +p=<1081,-4698,860>, v=<50,113,-43>, a=<-5,2,1> +p=<-4103,102,-7540>, v=<47,-37,137>, a=<5,2,6> +p=<2985,-3162,1516>, v=<40,65,-47>, a=<-8,2,0> +p=<8089,4886,-2404>, v=<-4,28,26>, a=<-15,-11,3> +p=<-188,492,143>, v=<29,78,-27>, a=<-2,-13,2> +p=<1556,2084,1247>, v=<-97,-115,-45>, a=<0,-2,-4> +p=<220,-404,-1241>, v=<-39,-2,0>, a=<3,3,9> +p=<-948,908,751>, v=<102,-16,-99>, a=<-5,-5,6> +p=<676,-2628,-1641>, v=<-8,52,59>, a=<-4,13,5> +p=<-1636,-204,2167>, v=<77,11,-77>, a=<3,0,-7> +p=<-92,-212,615>, v=<23,-65,37>, a=<-2,9,-9> +p=<660,1700,-1217>, v=<-75,-40,41>, a=<4,-8,4> +p=<2428,-284,1007>, v=<-143,-35,-30>, a=<-1,6,-4> +p=<2516,-3412,-577>, v=<-4,101,1>, a=<-18,13,4> +p=<-1551,-1873,-3487>, v=<29,-15,-125>, a=<1,4,13> +p=<-276,3805,-2229>, v=<-61,98,13>, a=<4,-12,3> +p=<-752,5811,1239>, v=<-12,-66,-19>, a=<2,-6,-1> +p=<-6736,1782,-13636>, v=<24,70,156>, a=<10,-7,14> +p=<1169,-819,2123>, v=<124,-81,-45>, a=<-9,6,-1> +p=<31,-1310,-640>, v=<-8,167,15>, a=<0,-9,6> +p=<-1895,-1544,878>, v=<68,76,-53>, a=<13,8,-3> +p=<2382,126,1908>, v=<-112,-6,8>, a=<1,0,-7> +p=<18,-3462,288>, v=<-1,81,13>, a=<0,5,-2> +p=<-1958,317,-1998>, v=<173,40,64>, a=<-7,-6,4> +p=<-818,507,-136>, v=<13,140,-14>, a=<3,-17,2> +p=<3362,-640,-138>, v=<-32,44,18>, a=<-16,-1,-1> +p=<50,-1351,303>, v=<-19,17,22>, a=<2,6,-4> +p=<896,-244,-2424>, v=<-123,-16,31>, a=<8,3,11> +p=<50,197,726>, v=<0,-12,8>, a=<0,0,-5> +p=<698,-2431,2949>, v=<2,77,-144>, a=<-4,6,-2> +p=<-202,-226,-21>, v=<14,97,-17>, a=<0,-9,2> +p=<-1363,998,168>, v=<50,-47,1>, a=<3,-1,-1> +p=<2039,476,1554>, v=<-101,115,0>, a=<-1,-15,-9> +p=<-2992,1664,-2190>, v=<150,-27,113>, a=<2,-7,1> +p=<-4132,2004,373>, v=<47,-37,18>, a=<11,-4,-3> +p=<-1694,2004,-2433>, v=<37,-97,68>, a=<3,1,3> +p=<-1326,-2320,-1835>, v=<33,103,78>, a=<2,0,0> +p=<-1027,1682,1247>, v=<-40,-47,-116>, a=<7,-2,5> +p=<-337,2234,534>, v=<14,-47,-1>, a=<0,-4,-2> +p=<2745,3016,-202>, v=<-24,-81,-29>, a=<-8,-4,3> +p=<-1343,-3402,1983>, v=<99,84,-43>, a=<-2,13,-8> +p=<-272,1460,1303>, v=<-72,-31,-111>, a=<10,-6,4> +p=<1377,-2348,130>, v=<-52,67,21>, a=<-3,8,-3> +p=<2482,1409,1371>, v=<-135,-100,-7>, a=<-1,2,-8> +p=<136,-3334,-2879>, v=<-15,134,108>, a=<1,7,7> +p=<-2754,-614,-873>, v=<74,1,-55>, a=<10,4,12> +p=<136,950,-431>, v=<-6,17,27>, a=<0,-8,0> +p=<272,-1940,-1502>, v=<-5,142,45>, a=<-1,-3,5> +p=<952,-1532,-2743>, v=<-54,-26,118>, a=<0,13,5> +p=<646,4570,-4911>, v=<-54,-65,-31>, a=<2,-4,10> +p=<-7837,3193,-5948>, v=<73,-77,17>, a=<9,-1,9> +p=<1666,3686,6547>, v=<21,-109,-53>, a=<-4,0,-8> +p=<-1731,-1228,580>, v=<163,24,-58>, a=<2,18,0> +p=<399,422,-2410>, v=<-6,-42,197>, a=<-6,0,8> +p=<7537,-5727,-3546>, v=<-129,57,14>, a=<-12,12,9> +p=<-6802,2710,-6328>, v=<58,-11,67>, a=<15,-7,13> +p=<-2616,-3153,1771>, v=<32,120,-15>, a=<5,0,-4> +p=<1804,1046,5307>, v=<-84,-55,-70>, a=<1,1,-10> +p=<2233,-2321,445>, v=<-60,61,-18>, a=<-2,2,0> +p=<2193,-2574,-5336>, v=<-77,45,38>, a=<1,1,5> +p=<3090,1248,319>, v=<80,-33,13>, a=<-8,0,-1> +p=<4299,-1209,-8807>, v=<-111,-70,47>, a=<0,5,9> +p=<6288,-1092,-227>, v=<18,7,47>, a=<-9,1,-2> +p=<-6426,-4992,-1943>, v=<84,-53,111>, a=<4,9,-3> +p=<-5880,-10491,-4751>, v=<90,48,63>, a=<3,11,3> +p=<6210,-8463,670>, v=<-80,76,-176>, a=<-4,7,8> +p=<384,-1868,1875>, v=<-17,72,-18>, a=<0,0,-4> +p=<5376,-672,913>, v=<-47,-1,-35>, a=<-12,2,0> +p=<4856,4489,783>, v=<-27,-24,-57>, a=<-12,-11,2> +p=<-3100,1070,-946>, v=<-18,13,23>, a=<10,-4,1> +p=<-786,-5534,1420>, v=<1,132,-41>, a=<2,6,-1> +p=<2659,-2297,692>, v=<-91,21,95>, a=<-1,5,-9> +p=<-1514,-724,-2584>, v=<-79,1,-22>, a=<10,2,9> +p=<1426,-304,32>, v=<-145,-39,32>, a=<7,5,-3> +p=<1526,2846,-738>, v=<-129,-186,81>, a=<5,4,-4> +p=<356,-114,-2458>, v=<-18,-17,41>, a=<0,2,8> +p=<-719,-741,-2568>, v=<47,35,55>, a=<-1,0,6> +p=<1003,-342,3144>, v=<86,16,-30>, a=<-12,0,-11> +p=<1276,897,-2631>, v=<-59,-21,-8>, a=<0,-2,12> +p=<-1244,-426,-2862>, v=<39,97,69>, a=<2,-7,6> +p=<-530,708,603>, v=<-17,-56,-85>, a=<4,2,5> +p=<-2882,2724,-3114>, v=<-15,-20,81>, a=<14,-10,6> +p=<4552,-1035,624>, v=<-61,82,35>, a=<-14,-3,-6> +p=<2809,1317,-783>, v=<-33,-74,-41>, a=<-9,1,7> +p=<3229,1464,3417>, v=<-119,-81,-153>, a=<-3,1,-1> +p=<1321,1115,5088>, v=<62,70,-117>, a=<-8,-8,-5> +p=<3319,-2611,3711>, v=<-96,26,-80>, a=<-2,5,-4> +p=<916,-316,-744>, v=<7,-59,-41>, a=<-3,5,5> +p=<376,3302,-2526>, v=<-71,45,-87>, a=<4,-12,13> +p=<889,-181,687>, v=<-76,6,32>, a=<3,0,-4> +p=<-2594,-964,1281>, v=<-73,91,52>, a=<12,-4,-7> +p=<1240,3707,-5496>, v=<37,16,23>, a=<-6,-11,13> +p=<-3026,-2017,-4227>, v=<-29,60,-80>, a=<10,1,17> +p=<-5056,959,3746>, v=<34,-37,-136>, a=<13,0,-1> +p=<-7106,-3941,1596>, v=<77,3,-63>, a=<16,12,0> +p=<2194,-591,-3679>, v=<-48,25,31>, a=<-3,0,9> +p=<-2281,284,4771>, v=<131,-23,-47>, a=<-3,1,-11> +p=<5469,1859,-4929>, v=<-166,5,133>, a=<-4,-6,5> +p=<2194,3084,-1279>, v=<-100,-122,26>, a=<1,0,2> +p=<-3781,-1991,2496>, v=<61,42,-8>, a=<7,3,-7> +p=<-4606,-1641,6321>, v=<146,54,-70>, a=<3,1,-14> +p=<5994,2959,-3779>, v=<-148,-65,61>, a=<-7,-4,7> +p=<-1372,142,2651>, v=<63,-130,-5>, a=<0,11,-11> +p=<3101,-2693,3428>, v=<-51,115,-42>, a=<-9,1,-11> +p=<4382,3901,-1213>, v=<-167,-166,36>, a=<-4,-2,2> +p=<1862,-2084,3743>, v=<-80,130,-90>, a=<-1,-3,-8> +p=<-395,-2026,-944>, v=<-2,132,-47>, a=<2,-3,9> +p=<-2675,554,-1744>, v=<28,-18,-28>, a=<10,-1,11> +p=<-1595,-5756,-104>, v=<163,119,37>, a=<-8,16,-3> +p=<-1795,2784,2936>, v=<-16,70,-52>, a=<10,-20,-9> +p=<-1135,-86,166>, v=<14,56,13>, a=<4,-5,-2> +p=<-3989,-76,-5091>, v=<30,65,138>, a=<11,-5,6> +p=<415,-892,1581>, v=<34,-1,135>, a=<-4,3,-16> +p=<-365,-28,-3327>, v=<179,-137,77>, a=<-13,11,5> +p=<2623,3740,-5691>, v=<-8,-94,38>, a=<-8,-5,16> +p=<-497,3020,-2283>, v=<-53,-14,96>, a=<6,-9,0> +p=<403,-904,1737>, v=<22,-13,66>, a=<-3,4,-11> +p=<1195,1460,489>, v=<-61,-74,-107>, a=<1,1,7> +p=<-2009,104,1245>, v=<35,145,24>, a=<4,-12,-6> +p=<-1493,1808,-5115>, v=<101,-76,89>, a=<-3,0,10> +p=<7013,6579,-435>, v=<60,-101,-18>, a=<-18,-7,2> +p=<-3403,-2597,3595>, v=<76,19,-100>, a=<2,4,-1> +p=<-2659,1216,-3752>, v=<-28,-136,-39>, a=<7,6,10> +p=<3200,-4240,2789>, v=<-41,136,6>, a=<-4,0,-6> +p=<3262,-5852,-3690>, v=<-75,28,55>, a=<-2,10,4> +p=<-6503,1836,1487>, v=<112,-12,16>, a=<6,-3,-4> +p=<-3589,8687,1859>, v=<98,-57,36>, a=<1,-14,-6> +p=<7381,-1966,-607>, v=<-29,67,22>, a=<-15,0,0> +p=<595,1659,379>, v=<25,77,33>, a=<-3,-9,-3> +p=<1717,347,26>, v=<-92,-79,34>, a=<-6,7,-5> +p=<-1611,659,2184>, v=<143,-40,-160>, a=<-3,-2,-1> +p=<599,958,988>, v=<-41,-84,-68>, a=<-1,1,-1> +p=<469,438,1638>, v=<-59,-72,-20>, a=<3,5,-15> +p=<1457,-2175,962>, v=<-142,122,-31>, a=<4,6,-6> +p=<-2131,-4,299>, v=<134,32,-106>, a=<4,-5,12> +p=<-1013,-563,1677>, v=<-29,-37,-86>, a=<15,11,-6> +p=<-1312,-563,-871>, v=<22,-23,68>, a=<11,9,0> +p=<677,1504,1495>, v=<-82,-126,-44>, a=<4,1,-10> +p=<-401,-354,-103>, v=<54,101,-37>, a=<-3,-12,8> +p=<787,-1531,-257>, v=<-90,70,31>, a=<3,11,-1> +p=<83,405,-4>, v=<-26,-40,8>, a=<3,0,-1> +p=<-654,1032,-598>, v=<-43,-73,-10>, a=<17,-4,11> +p=<160,273,491>, v=<45,50,-49>, a=<-10,-13,1> +p=<72,-2,-895>, v=<83,9,83>, a=<-15,-2,0> +p=<-797,-1311,-631>, v=<60,26,89>, a=<2,15,-5> +p=<1045,-1354,502>, v=<-56,11,-67>, a=<0,6,4> +p=<-1691,2294,1737>, v=<28,-101,38>, a=<6,-2,-13> +p=<1847,521,-3642>, v=<0,-89,36>, a=<-5,5,7> +p=<1307,1682,30>, v=<-78,-90,40>, a=<2,2,-3> +p=<5411,5192,-5181>, v=<-20,-94,-47>, a=<-13,-7,17> +p=<-1015,-3583,651>, v=<36,105,-25>, a=<0,2,0> +p=<-1196,-512,-1809>, v=<89,-65,105>, a=<0,15,5> +p=<-91,125,102>, v=<-24,40,28>, a=<4,-7,-5> +p=<-1495,996,453>, v=<77,-41,-55>, a=<5,-5,3> +p=<-299,-1500,-1042>, v=<-43,123,-17>, a=<9,-1,14> +p=<1651,-1448,453>, v=<-32,-14,-55>, a=<-14,18,3> +p=<-520,-668,-1289>, v=<-19,10,86>, a=<8,6,2> +p=<-728,632,635>, v=<158,-27,-55>, a=<-15,-3,1> +p=<0,671,1103>, v=<18,-93,-84>, a=<-3,6,0> +p=<-975,1126,869>, v=<65,-37,-157>, a=<1,-7,13> +p=<-6957,4124,-167>, v=<90,-6,95>, a=<10,-9,-6> +p=<-1592,180,4560>, v=<10,-80,37>, a=<3,5,-13> +p=<1482,4849,906>, v=<-36,29,-47>, a=<-1,-13,1> +p=<-1360,-690,732>, v=<-103,10,4>, a=<10,1,-2> +p=<-4811,-5011,471>, v=<31,-21,-17>, a=<9,13,0> +p=<-8262,586,4647>, v=<195,56,-101>, a=<6,-5,-4> +p=<-5594,10214,2588>, v=<148,-66,0>, a=<3,-19,-6> +p=<10593,874,-5911>, v=<-83,109,43>, a=<-14,-8,8> +p=<1419,-9455,-6637>, v=<161,133,48>, a=<-12,9,9> +p=<-3333,280,128>, v=<33,25,-21>, a=<4,-2,1> +p=<-3069,-8300,722>, v=<8,13,-39>, a=<5,14,1> +p=<5973,2029,-3469>, v=<-113,40,20>, a=<-4,-6,5> +p=<-667,2909,-4429>, v=<21,-20,-131>, a=<0,-5,18> +p=<758,1919,5456>, v=<20,44,-11>, a=<-3,-7,-11> +p=<5818,2323,4262>, v=<-79,-70,-68>, a=<-16,-3,-11> +p=<417,-823,-875>, v=<-52,-65,39>, a=<3,9,0> +p=<-2179,-1098,5648>, v=<20,28,-131>, a=<7,2,-11> +p=<681,-944,-523>, v=<5,21,0>, a=<-3,2,2> +p=<-1387,-614,2832>, v=<84,-69,-62>, a=<-2,8,-5> +p=<-628,-1672,3200>, v=<39,13,-66>, a=<-1,5,-6> +p=<522,-3466,49>, v=<-59,55,-13>, a=<3,8,1> +p=<-2537,2146,-227>, v=<-34,51,47>, a=<12,-12,-3> +p=<-582,1295,739>, v=<-47,-32,-67>, a=<6,-2,3> +p=<-610,2649,-2932>, v=<-30,8,52>, a=<5,-11,7> +p=<2525,-607,-3460>, v=<0,-51,76>, a=<-10,7,7> +p=<-577,790,819>, v=<-43,-34,-38>, a=<6,0,0> +p=<3020,2363,-105>, v=<35,-48,27>, a=<-15,-5,-2> +p=<292,163,368>, v=<21,52,-29>, a=<-3,-5,1> +p=<1436,691,-3196>, v=<-31,-110,64>, a=<-3,7,7> +p=<-2007,1439,2766>, v=<91,63,46>, a=<0,-11,-15> +p=<-71,-1146,-2965>, v=<26,77,42>, a=<-2,-2,8> +p=<-3646,2451,-336>, v=<85,63,-20>, a=<7,-15,3> +p=<-730,-1186,2066>, v=<-2,27,-64>, a=<5,5,-6> +p=<3503,-1679,77>, v=<-107,74,-1>, a=<-11,3,0> +p=<2007,-2053,-1368>, v=<-10,168,66>, a=<-12,-5,2> +p=<-543,-387,570>, v=<68,-92,33>, a=<-4,13,-7> +p=<-203,378,2763>, v=<30,-128,-96>, a=<-2,12,-7> +p=<-560,2758,3647>, v=<33,-97,-121>, a=<0,-7,-10> +p=<-577,38,-280>, v=<43,-54,-25>, a=<-1,6,5> +p=<-3161,-802,-1532>, v=<86,26,29>, a=<6,1,4> +p=<-1565,-1096,2731>, v=<43,84,-119>, a=<3,-3,-1> +p=<-158,395,295>, v=<9,13,-25>, a=<0,-3,1> +p=<-1376,143,6469>, v=<-32,-96,-154>, a=<9,8,-14> +p=<73,4238,1513>, v=<-13,-159,-39>, a=<1,-4,-3> +p=<73,1592,1891>, v=<9,-121,53>, a=<-1,4,-13> +p=<703,-2314,1282>, v=<-32,-23,-105>, a=<0,12,4> +p=<-2888,-3826,-2603>, v=<29,-6,14>, a=<10,17,10> +p=<-956,-1789,3361>, v=<25,62,-39>, a=<2,2,-11> +p=<4714,-1600,1345>, v=<-3,119,2>, a=<-20,-4,-6> +p=<-341,-1584,886>, v=<9,82,2>, a=<1,0,-5> +p=<1027,-3104,-1508>, v=<-103,72,88>, a=<5,9,-1> +p=<628,12,1760>, v=<58,38,-144>, a=<-9,-4,5> +p=<-4084,1342,1000>, v=<116,-52,56>, a=<10,-2,-11> +p=<1388,1418,1817>, v=<38,-6,-107>, a=<-11,-7,1> +p=<1654,487,-4453>, v=<-66,-87,53>, a=<-2,6,18> +p=<632,-186,-1501>, v=<-10,45,26>, a=<-3,-4,7> +p=<-1204,-662,-753>, v=<71,-44,144>, a=<0,9,-11> +p=<-1051,1174,-566>, v=<-1,37,-2>, a=<7,-12,4> +p=<1975,1548,-2657>, v=<-17,-75,94>, a=<-11,-2,7> +p=<-3040,1548,-532>, v=<80,-75,-13>, a=<11,-2,5> +p=<-2037,-3416,-1705>, v=<48,172,47>, a=<8,3,6> +p=<1397,2721,233>, v=<-91,-99,59>, a=<1,-7,-8> +p=<-727,94,-946>, v=<24,-36,94>, a=<0,2,-4> +p=<1328,6919,-7711>, v=<-29,-93,180>, a=<-1,-9,5> +p=<4628,-191,-2656>, v=<-77,51,-4>, a=<-5,-3,6> +p=<4808,5914,614>, v=<10,18,-20>, a=<-11,-14,0> +p=<668,-8816,2699>, v=<-131,137,-74>, a=<7,10,-1> +p=<2978,-101,-721>, v=<9,-14,-84>, a=<-7,1,7> +p=<413,3334,1529>, v=<-45,73,58>, a=<2,-12,-7> +p=<-3442,-56,6539>, v=<68,0,-140>, a=<3,0,-5> +p=<1039,1335,128>, v=<-56,-75,-89>, a=<0,0,9> +p=<1174,2631,1478>, v=<-73,-90,-12>, a=<1,-6,-7> +p=<31,-1257,803>, v=<-95,-7,-3>, a=<10,8,-4> +p=<958,-1167,1613>, v=<53,140,-86>, a=<-11,-8,0> +p=<-1049,1335,839>, v=<41,-113,-81>, a=<2,4,4> +p=<-2219,-141,-295>, v=<30,7,134>, a=<10,0,-12> +p=<-1967,2550,2585>, v=<54,0,-45>, a=<6,-15,-10> +p=<-891,-3575,2084>, v=<62,43,-121>, a=<-2,7,3> +p=<-293,1326,-1465>, v=<93,-51,-79>, a=<-6,0,10> +p=<3698,-2262,-2687>, v=<-74,33,-32>, a=<-5,4,10> +p=<162,3224,-3896>, v=<89,-16,55>, a=<-7,-8,7> +p=<-3556,-611,-2219>, v=<151,-44,85>, a=<-1,5,0> +p=<1202,-1443,-5092>, v=<-32,69,128>, a=<-1,-1,5> +p=<6168,-1261,1967>, v=<-88,62,5>, a=<-11,-1,-6> +p=<-8173,10133,282>, v=<170,-53,9>, a=<4,-14,-1> +p=<-4688,-2923,333>, v=<155,-54,-10>, a=<-1,8,0> +p=<-4263,6393,2390>, v=<55,-48,-18>, a=<4,-8,-3> +p=<-472,1259,12743>, v=<31,68,-95>, a=<-1,-6,-16> +p=<-2308,-9910,2645>, v=<50,-6,-8>, a=<1,17,-4> +p=<-2002,-8346,11910>, v=<-29,-52,-53>, a=<5,17,-17> +p=<-489,-6459,-398>, v=<119,85,99>, a=<-6,6,-5> +p=<2418,-1512,-10785>, v=<51,-8,2>, a=<-7,3,18> +p=<-3226,-7547,4940>, v=<7,117,-58>, a=<5,6,-5> +p=<-1883,-2362,1829>, v=<-50,52,-54>, a=<6,1,0> +p=<-104,-2146,-706>, v=<-47,82,78>, a=<6,5,-4> +p=<-3300,149,1538>, v=<-3,19,-36>, a=<22,-3,-6> +p=<865,2121,-1335>, v=<-59,-115,-56>, a=<1,-1,15> +p=<491,-2350,-145>, v=<-37,13,117>, a=<1,14,-12> +p=<-2042,2835,892>, v=<157,-67,-16>, a=<-4,-11,-4> +p=<259,-985,2750>, v=<-92,-12,-33>, a=<7,5,-8> +p=<798,1072,2783>, v=<56,-2,-23>, a=<-8,-4,-9> +p=<-4691,225,1276>, v=<41,2,-35>, a=<15,-1,-2> +p=<2125,2739,2007>, v=<-41,-42,-41>, a=<-1,-2,-1> +p=<-885,-3946,-5588>, v=<45,41,-22>, a=<-1,4,10> +p=<4085,6519,-1808>, v=<-115,12,-40>, a=<0,-11,5> +p=<-2999,-2892,7364>, v=<61,-50,-88>, a=<3,10,-11> +p=<7731,2937,-31>, v=<-84,-56,47>, a=<-12,-3,-3> +p=<-911,-4110,2782>, v=<4,67,-5>, a=<2,5,-6> +p=<-4217,2328,839>, v=<-17,-80,-88>, a=<11,0,4> +p=<-1491,-340,2115>, v=<84,-138,-12>, a=<-2,10,-4> +p=<5092,2966,2376>, v=<22,-72,-126>, a=<-13,-2,3> +p=<-1250,-4251,-7477>, v=<-64,15,41>, a=<5,5,8> +p=<4792,5743,2707>, v=<11,-53,-71>, a=<-7,-5,0> +p=<-6703,-2826,-2100>, v=<21,-3,-81>, a=<8,4,7> +p=<-4032,-444,5776>, v=<55,-6,-144>, a=<10,2,-9> +p=<-3204,177,-1147>, v=<79,51,-59>, a=<5,-5,9> +p=<3305,-2054,141>, v=<-60,40,-7>, a=<-7,4,0> +p=<890,3581,3637>, v=<-15,-25,-135>, a=<-2,-11,-2> +p=<1842,1039,-3622>, v=<-84,-48,28>, a=<0,0,12> +p=<1886,775,-3303>, v=<29,-13,25>, a=<-10,-2,11> +p=<2898,3558,1548>, v=<-109,-59,0>, a=<-2,-9,-6> +p=<632,-644,1779>, v=<-52,86,-91>, a=<2,-5,1> +p=<-358,-1260,2505>, v=<-53,-24,-55>, a=<6,7,-5> +p=<1578,1567,3572>, v=<-3,-72,-23>, a=<-6,0,-12> +p=<-3614,-347,3033>, v=<141,15,13>, a=<2,0,-13> +p=<1105,-6221,129>, v=<-39,167,30>, a=<-1,10,-3> +p=<5076,2315,-311>, v=<-139,-106,-65>, a=<-8,0,7> +p=<2727,-1894,-1187>, v=<-64,98,42>, a=<-8,0,2> +p=<-579,6,-3543>, v=<-20,-12,166>, a=<5,1,2> +p=<2404,709,-1890>, v=<3,61,-61>, a=<-13,-10,16> +p=<1150,-602,390>, v=<-51,20,-31>, a=<-1,1,1> +p=<143,-1704,1701>, v=<42,138,-60>, a=<-5,-5,-3> +p=<2708,-1381,694>, v=<17,1,-17>, a=<-16,7,-2> +p=<979,-1039,-3391>, v=<-62,83,118>, a=<1,-3,6> +p=<2622,993,1733>, v=<-122,-103,-97>, a=<-1,5,1> +p=<312,-1597,2523>, v=<4,-26,-42>, a=<-2,10,-8> +p=<-538,-2877,-517>, v=<-27,59,-16>, a=<5,8,4> +p=<-1462,-3479,-1080>, v=<78,157,0>, a=<1,5,7> +p=<425,-725,433>, v=<30,67,-71>, a=<-6,-3,5> +p=<-1972,-1864,586>, v=<126,8,10>, a=<-1,11,-5> +p=<-1513,-1575,620>, v=<-9,18,-37>, a=<11,8,0> +p=<-119,873,-2491>, v=<26,-18,110>, a=<-2,-4,4> +p=<748,652,518>, v=<-61,22,-40>, a=<2,-7,1> +p=<2584,-2646,-859>, v=<-115,54,104>, a=<-4,11,-6> +p=<-221,-1116,-2304>, v=<86,72,117>, a=<-8,-1,2> +p=<3757,108,-26>, v=<-94,-72,82>, a=<-14,7,-9> +p=<-455,484,-1995>, v=<-55,68,32>, a=<6,-7,4> +p=<3073,-1724,-2607>, v=<-152,85,20>, a=<2,-1,7> +p=<-7043,-5420,5289>, v=<82,89,-84>, a=<17,11,-11> +p=<3505,1096,513>, v=<-170,-45,-85>, a=<2,0,5> +p=<-431,-920,-987>, v=<44,64,115>, a=<-2,-2,-6> +p=<-8771,2980,-723>, v=<179,-86,104>, a=<15,-3,-6> +p=<-923,1264,561>, v=<-98,48,-87>, a=<11,-8,5> +p=<-11,1792,-2019>, v=<39,-49,33>, a=<-3,-2,4> +p=<-435,1273,-382>, v=<-7,-121,-13>, a=<6,3,6> +p=<-461,571,411>, v=<37,17,-67>, a=<0,-9,5> +p=<1034,1481,255>, v=<-50,-102,64>, a=<-4,-2,-12> +p=<1109,-1211,-3947>, v=<-98,-108,-91>, a=<4,11,17> +p=<920,895,-3731>, v=<49,-18,-71>, a=<-6,-1,15> +p=<-1672,-185,-2813>, v=<-65,50,-63>, a=<9,-3,12> +p=<-4291,-4721,454>, v=<-38,36,-2>, a=<14,10,-1> +p=<3512,2596,-329>, v=<-103,-95,55>, a=<-2,0,-3> +p=<2162,-2642,1885>, v=<-193,71,57>, a=<8,2,-9> +p=<2438,-3105,2240>, v=<-85,122,13>, a=<0,-1,-6> +p=<-2086,723,4154>, v=<-34,110,-38>, a=<7,-9,-7> +p=<3424,4377,-1298>, v=<-59,-31,-45>, a=<-4,-8,6> +p=<550,-910,-2884>, v=<60,11,-17>, a=<-8,3,14> +p=<1264,1022,203>, v=<-139,-92,-54>, a=<7,4,4> +p=<1306,2576,1589>, v=<-20,-78,12>, a=<-4,-4,-8> +p=<1474,917,-28>, v=<5,1,155>, a=<-7,-4,-14> +p=<-605,1967,1379>, v=<-17,-115,-110>, a=<4,2,4> +p=<-2999,707,1316>, v=<163,-55,-52>, a=<-2,2,-1> +p=<-2124,85,1333>, v=<-76,97,-1>, a=<19,-10,-7> +p=<-2865,674,-985>, v=<43,-54,-19>, a=<11,2,7> +p=<-699,845,-4215>, v=<-21,-3,121>, a=<6,-4,10> +p=<1182,-1796,-1308>, v=<-30,66,88>, a=<-3,3,-2> +p=<-53,2080,1884>, v=<-75,-48,-100>, a=<8,-6,0> +p=<1828,-1245,1675>, v=<-74,-23,-19>, a=<-2,9,-7> +p=<1790,2859,3784>, v=<38,-109,-110>, a=<-13,-4,-9> +p=<-3245,1909,1751>, v=<143,1,27>, a=<3,-10,-12> +p=<1279,-4391,-2768>, v=<118,19,6>, a=<-13,12,8> +p=<1079,2259,4932>, v=<-4,-91,-68>, a=<-3,0,-10> +p=<3109,1104,4379>, v=<-46,-43,-174>, a=<-6,0,0> +p=<-1866,-2221,-1021>, v=<23,51,16>, a=<4,3,2> +p=<609,-2071,-3171>, v=<41,58,63>, a=<-5,2,5> +p=<3634,1004,2654>, v=<-54,-117,12>, a=<-7,6,-9> +p=<-716,5304,-171>, v=<-10,-94,-31>, a=<3,-9,3> +p=<4930,-4950,-2256>, v=<-35,96,91>, a=<-9,5,-1> +p=<-928,4214,1891>, v=<-28,-40,143>, a=<4,-7,-14> +p=<1682,1343,1456>, v=<-73,59,-82>, a=<1,-7,2> +p=<5394,-4660,-3677>, v=<-186,11,-70>, a=<0,10,13> +p=<-1740,2184,-1705>, v=<-30,-75,12>, a=<6,0,3> +p=<-2378,2851,-2894>, v=<67,-68,-7>, a=<1,-2,7> +p=<-2728,1792,2081>, v=<44,95,-69>, a=<3,-10,0> +p=<7382,-6773,-4144>, v=<-76,24,-32>, a=<-11,13,11> +p=<-6778,-1613,1556>, v=<117,-24,-36>, a=<7,5,-1> +p=<-1870,806,494>, v=<41,-29,-54>, a=<5,-1,3> +p=<360,946,2374>, v=<3,27,-22>, a=<-2,-7,-9> +p=<-1500,1016,-556>, v=<54,-29,72>, a=<2,-2,-4> +p=<870,696,2034>, v=<30,-76,-26>, a=<-7,4,-7> +p=<-390,-3464,644>, v=<-33,69,-51>, a=<5,10,2> +p=<-1180,1486,-476>, v=<17,0,68>, a=<4,-7,-4> +p=<1224,-754,1267>, v=<-14,55,-40>, a=<-10,0,-7> +p=<-1513,891,147>, v=<69,-115,25>, a=<5,7,-5> +p=<-1289,-292,868>, v=<53,97,-34>, a=<5,-10,-4> +p=<-1951,3305,-2253>, v=<-32,-17,79>, a=<7,-7,0> +p=<2123,-4535,1485>, v=<-47,31,47>, a=<-2,9,-7> +p=<-1237,3067,-6145>, v=<-14,-110,44>, a=<4,0,12> +p=<-2287,-1931,-111>, v=<9,170,46>, a=<5,-7,-3> +p=<-2940,427,-2488>, v=<53,-30,21>, a=<3,1,4> +p=<-4140,-203,4397>, v=<62,53,-7>, a=<5,-3,-9> +p=<-3240,-938,-3928>, v=<125,0,100>, a=<-1,2,2> +p=<4020,1147,-4738>, v=<-55,8,65>, a=<-5,-3,6> +p=<-1888,1962,-3057>, v=<-10,99,90>, a=<5,-11,1> +p=<838,1237,2279>, v=<-89,94,-109>, a=<4,-9,2> +p=<7044,-1547,1728>, v=<-153,70,-60>, a=<-6,-1,0> +p=<-3976,-1402,-1230>, v=<152,-10,-63>, a=<-1,4,7> +p=<-5484,-3461,-3840>, v=<69,136,117>, a=<8,-1,1> +p=<-1685,-4911,-4942>, v=<-2,81,170>, a=<4,6,0> +p=<-5861,831,5730>, v=<7,48,-3>, a=<13,-5,-13> +p=<2868,628,1148>, v=<-99,25,65>, a=<0,-3,-7> +p=<-1308,-4766,-4652>, v=<0,61,40>, a=<3,7,8> +p=<-1917,-1721,1699>, v=<-9,-59,-59>, a=<5,8,0> +p=<4897,-13852,5050>, v=<14,-6,-29>, a=<-7,18,-5> +p=<-836,-1606,-6416>, v=<41,-20,-35>, a=<-1,3,10> +p=<-9338,5648,-9068>, v=<-1,-6,73>, a=<12,-7,8> +p=<-7778,-9679,-2360>, v=<39,47,81>, a=<8,10,-1> +p=<7978,11537,6649>, v=<-25,-57,-30>, a=<-9,-12,-7> +p=<-8870,-3517,3022>, v=<-73,-71,63>, a=<15,8,-7> +p=<334,9821,682>, v=<51,67,-117>, a=<-3,-16,5> +p=<-378,289,-2545>, v=<-115,19,22>, a=<12,-3,9> +p=<672,184,2159>, v=<-66,123,-81>, a=<3,-12,-2> +p=<-2583,2620,-4456>, v=<23,7,58>, a=<9,-12,14> +p=<4662,1507,500>, v=<-135,-17,-57>, a=<-8,-5,3> +p=<-1533,2536,1403>, v=<39,-66,43>, a=<3,-5,-10> +p=<714,919,122>, v=<-68,-66,-39>, a=<3,2,3> +p=<21,-2588,-3931>, v=<53,-31,154>, a=<-5,14,3> +p=<1575,1255,1655>, v=<-65,-60,42>, a=<-1,0,-11> +p=<-2961,-404,-2818>, v=<184,30,101>, a=<-4,-1,3> +p=<-2961,1465,-3280>, v=<52,51,-9>, a=<8,-11,15> +p=<446,81,-335>, v=<-29,-42,-22>, a=<-2,6,8> +p=<193,510,-720>, v=<-6,-87,31>, a=<-2,7,5> +p=<-214,-2196,853>, v=<7,141,-28>, a=<2,10,-9> +p=<-49,48,-984>, v=<10,-21,1>, a=<-1,3,14> +p=<-1237,719,-621>, v=<82,-10,4>, a=<5,-9,8> +p=<-104,1709,171>, v=<63,-136,-50>, a=<-9,-3,5> +p=<611,-513,-1215>, v=<-38,0,82>, a=<-3,8,4> +p=<-1138,-1954,-742>, v=<1,125,21>, a=<17,9,7> +p=<1227,587,-841>, v=<-82,2,6>, a=<-5,-9,11> +p=<820,-1019,1414>, v=<-93,76,-109>, a=<3,3,-4> +p=<-2978,8304,-1519>, v=<30,-106,-23>, a=<5,-12,5> +p=<-2137,-889,5441>, v=<106,-74,-38>, a=<-2,7,-10> +p=<-629,5259,-533>, v=<69,-61,78>, a=<-3,-8,-4> +p=<10318,3176,-4795>, v=<-111,31,89>, a=<-11,-7,3> +p=<3246,4315,-2262>, v=<-78,-55,67>, a=<-1,-4,0> +p=<-2381,5199,2872>, v=<35,-11,126>, a=<2,-8,-12> +p=<6051,-6140,-2381>, v=<-38,60,-122>, a=<-8,7,11> +p=<-1925,445,1736>, v=<31,-85,-133>, a=<7,6,4> +p=<1571,-1683,3617>, v=<-43,57,-62>, a=<-4,3,-13> +p=<184,2003,-734>, v=<10,-97,-63>, a=<-2,-1,10> +p=<-1583,-3070,368>, v=<63,150,-1>, a=<2,1,-2> +p=<2255,-1550,1527>, v=<-79,-110,-72>, a=<-4,19,-1> +p=<-595,65,3256>, v=<51,-5,-203>, a=<-2,0,3> +p=<-766,2839,-1580>, v=<-35,-67,29>, a=<7,-7,5> +p=<-116,-2071,1060>, v=<48,63,-19>, a=<-4,4,-3> +p=<-3386,-2081,-1570>, v=<159,11,81>, a=<1,9,0> +p=<1604,1409,470>, v=<25,-48,-42>, a=<-10,-2,2> +p=<-3586,-511,290>, v=<64,6,51>, a=<11,2,-6> +p=<-596,429,-3420>, v=<-12,-20,58>, a=<4,0,11> +p=<704,539,1230>, v=<70,-78,-59>, a=<-10,5,0> +p=<3944,-4401,1840>, v=<-113,148,-16>, a=<-8,7,-7> +p=<-456,3089,1380>, v=<65,-69,7>, a=<-4,-8,-7> +p=<1714,1789,-780>, v=<-96,59,-53>, a=<1,-14,9> +p=<1943,-411,2163>, v=<0,20,-14>, a=<-16,1,-16> +p=<98,-1566,603>, v=<11,49,74>, a=<-2,7,-14> +p=<-502,-2541,-342>, v=<3,82,-95>, a=<4,11,15> +p=<263,-291,1473>, v=<72,12,-112>, a=<-11,1,2> +p=<1688,-381,-567>, v=<-143,-22,-40>, a=<4,6,10> +p=<-682,519,2883>, v=<23,-10,-118>, a=<3,-3,-9> +p=<383,744,-72>, v=<8,-1,79>, a=<-4,-6,-9> +p=<443,9,168>, v=<52,0,71>, a=<-10,0,-10> +p=<-1387,-2950,-247>, v=<115,110,-16>, a=<-4,6,3> +p=<-730,-1438,-2092>, v=<12,83,77>, a=<3,0,4> +p=<2276,695,-301>, v=<-22,-26,44>, a=<-11,-1,-3> +p=<628,-3534,-2913>, v=<-39,-38,186>, a=<1,15,-5> +p=<-140,1326,603>, v=<-107,-28,-23>, a=<9,-2,0> +p=<1480,-1650,2583>, v=<13,71,-43>, a=<-6,0,-5> +p=<-824,-366,-657>, v=<59,-20,-108>, a=<-2,3,11> +p=<1168,-426,-2625>, v=<1,20,74>, a=<-4,0,3> +p=<-260,2154,2079>, v=<-2,0,78>, a=<1,-7,-13> +p=<-128,2286,3579>, v=<55,32,-122>, a=<-4,-10,-2> +p=<-3812,1686,27>, v=<-29,-43,-24>, a=<15,-2,2> +p=<-33,-807,1257>, v=<-20,31,-83>, a=<4,4,-2> +p=<942,-1249,685>, v=<-67,79,-53>, a=<0,2,0> +p=<-423,-1119,191>, v=<-32,-15,-15>, a=<10,14,0> +p=<2772,-7072,-3749>, v=<-53,-94,34>, a=<-2,19,5> +p=<-3052,3008,5659>, v=<-3,-13,-128>, a=<6,-5,-3> +p=<2980,-11056,-2565>, v=<56,80,30>, a=<-9,16,3> +p=<4676,3696,7083>, v=<-162,-51,-90>, a=<1,-4,-8> +p=<-492,2224,379>, v=<82,-71,-62>, a=<-4,0,3> +p=<3332,-1264,8443>, v=<-54,104,-17>, a=<-3,-4,-15> +p=<-1196,11904,-3445>, v=<-28,-126,-25>, a=<4,-15,8> +p=<244,2096,8779>, v=<-7,65,22>, a=<0,-8,-18> +p=<-1502,113,127>, v=<3,-41,-53>, a=<12,4,6> +p=<-1112,233,-548>, v=<65,15,40>, a=<1,-4,0> +p=<73,-2377,-458>, v=<10,-3,42>, a=<-2,20,-1> +p=<-632,-1537,-188>, v=<-31,-3,48>, a=<9,13,-4> +p=<253,8,1267>, v=<14,-2,-57>, a=<-4,0,-3> +p=<-2342,-1792,517>, v=<67,54,1>, a=<11,8,-4> +p=<-1607,1193,37>, v=<2,-81,-103>, a=<13,0,13> +p=<-3302,-232,-2588>, v=<123,6,32>, a=<12,1,18> +p=<156,-333,2057>, v=<58,-71,-52>, a=<-6,8,-4> +p=<-75,969,-2017>, v=<25,-12,10>, a=<-2,-3,8> +p=<30,-4869,1469>, v=<-156,35,-46>, a=<14,18,-2> +p=<-3204,1200,-2374>, v=<86,-100,27>, a=<6,4,8> +p=<2907,1137,-2815>, v=<-18,24,26>, a=<-11,-7,10> +p=<-278,189,-3099>, v=<3,-12,51>, a=<1,0,11> +p=<-468,930,-2928>, v=<43,-21,102>, a=<-2,-3,5> +p=<-2045,-210,207>, v=<-44,-11,-23>, a=<15,2,1> +p=<596,4369,-420>, v=<-113,-42,0>, a=<8,-19,2> +p=<-829,-96,-1921>, v=<-8,13,129>, a=<5,-1,-3> +p=<2914,-780,1537>, v=<-85,29,7>, a=<-7,1,-9> +p=<667,-850,-181>, v=<18,13,-9>, a=<-5,3,2> +p=<952,404,3961>, v=<33,67,-117>, a=<-8,-9,-9> +p=<-4083,689,3182>, v=<58,-38,-36>, a=<16,0,-13> +p=<3669,2627,1586>, v=<-70,-20,-12>, a=<-12,-12,-7> +p=<1731,-204,-1549>, v=<-88,69,63>, a=<0,-6,2> +p=<-2525,366,1909>, v=<16,39,31>, a=<12,-6,-13> +p=<420,3862,-200>, v=<-19,-105,-18>, a=<0,-10,3> +p=<1256,-1382,-390>, v=<-63,61,-8>, a=<0,1,3> +p=<1284,1741,445>, v=<-113,-41,68>, a=<4,-8,-11> +p=<-780,885,885>, v=<-1,-47,-36>, a=<6,-1,-2> +p=<796,-1587,-731>, v=<-74,99,48>, a=<3,0,0> +p=<1036,-1859,1717>, v=<30,-3,-20>, a=<-11,14,-10> +p=<52,669,325>, v=<-2,9,-103>, a=<0,-6,10> +p=<1724,-2675,-379>, v=<-149,99,9>, a=<5,8,2> +p=<-3652,989,-435>, v=<136,-96,4>, a=<11,4,3> +p=<-660,-427,-1139>, v=<119,69,116>, a=<-9,-5,-5> +p=<-1054,-503,-2618>, v=<41,30,114>, a=<3,0,6> +p=<1594,2001,-10>, v=<-31,-16,19>, a=<-8,-13,-2> +p=<1946,-839,-2250>, v=<-121,-34,91>, a=<0,10,6> +p=<1882,-311,2262>, v=<-15,35,-55>, a=<-12,-2,-10> +p=<1642,1073,206>, v=<-51,-77,-54>, a=<-6,1,5> +p=<2154,817,326>, v=<-66,58,32>, a=<-8,-13,-6> +p=<-1726,2617,1662>, v=<100,-80,-43>, a=<1,-10,-7> +p=<-2662,2545,-130>, v=<48,-101,18>, a=<14,-7,-1> +p=<1799,2271,3676>, v=<-122,-39,-86>, a=<4,-3,-3> +p=<-7371,-5583,2892>, v=<133,82,-116>, a=<9,8,1> +p=<2107,-1761,246>, v=<-17,18,51>, a=<-4,3,-4> +p=<-4627,-1453,2738>, v=<122,94,-9>, a=<3,-3,-6> +p=<917,-1173,2164>, v=<69,-32,113>, a=<-7,5,-13> +p=<-2821,493,-5214>, v=<14,39,-15>, a=<6,-4,14> +p=<-497,3503,-5102>, v=<18,-141,126>, a=<0,1,4> +p=<-5789,1613,2206>, v=<149,-30,39>, a=<4,-2,-8> +p=<1855,-2881,2850>, v=<-153,87,-100>, a=<6,1,0> +p=<-1437,-2510,2378>, v=<3,51,-5>, a=<6,6,-10> +p=<-2256,871,-1654>, v=<-24,-33,0>, a=<12,-1,7> +p=<474,-746,-562>, v=<-22,-33,3>, a=<0,6,2> +p=<-998,-5851,-402>, v=<103,189,123>, a=<-5,10,-10> +p=<2902,-1171,-1782>, v=<-113,18,45>, a=<-3,4,4> +p=<-1268,1779,-372>, v=<1,-14,-57>, a=<6,-7,7> +p=<532,-2881,-402>, v=<121,30,18>, a=<-14,11,0> +p=<-1248,-3501,-3432>, v=<63,124,-9>, a=<0,5,17> +p=<-868,-531,-3632>, v=<44,49,43>, a=<0,-2,13> +p=<6474,-2376,-1510>, v=<15,-67,32>, a=<-14,9,1> +p=<-3136,-6375,-9105>, v=<85,-2,149>, a=<1,13,9> +p=<863,6614,1218>, v=<84,-37,-72>, a=<-7,-11,2> +p=<-966,197,7170>, v=<31,-150,-40>, a=<0,9,-12> +p=<-3446,-2655,6302>, v=<-33,38,-156>, a=<9,3,-3> +p=<4397,-3709,-1076>, v=<-62,56,-62>, a=<-5,4,6> +p=<-322,-1160,-2709>, v=<-31,16,88>, a=<6,6,8> +p=<2024,-2316,2510>, v=<-88,75,-39>, a=<-3,7,-12> +p=<-50,1118,1184>, v=<-56,-19,-24>, a=<7,-5,-5> +p=<-12607,-1099,3400>, v=<98,83,8>, a=<18,-3,-7> +p=<-783,-747,-6216>, v=<-24,-93,-71>, a=<3,7,16> +p=<-558,-2190,4022>, v=<61,-16,-43>, a=<-3,8,-9> +p=<-4358,-540,-6053>, v=<18,100,87>, a=<12,-6,12> +p=<2642,2960,-1303>, v=<-41,-1,53>, a=<-5,-9,0> +p=<-1408,1010,6972>, v=<-48,-40,-187>, a=<8,0,-7> +p=<-1433,-5540,-5403>, v=<135,66,74>, a=<-6,12,11> +p=<217,-4115,2747>, v=<-35,126,-70>, a=<2,3,-3> +p=<1792,5685,-2253>, v=<97,-71,91>, a=<-13,-12,0> +p=<-158,1210,172>, v=<71,121,111>, a=<-5,-13,-9> +p=<-858,-3615,-3303>, v=<-18,15,159>, a=<4,10,-2> +p=<-6083,-5215,-1353>, v=<61,14,55>, a=<14,15,0> +p=<1908,1058,-75>, v=<60,-95,57>, a=<-10,4,-4> +p=<907,4204,-4820>, v=<31,-81,-44>, a=<-5,-6,17> +p=<3637,-411,-2246>, v=<34,29,-35>, a=<-13,-1,9> +p=<1362,-4155,-283>, v=<54,11,-43>, a=<-8,11,4> +p=<4701,-9467,8834>, v=<-133,37,-37>, a=<0,13,-12> +p=<-5204,2713,-3871>, v=<6,31,2>, a=<8,-6,6> +p=<-2016,-470,-1992>, v=<-286,-72,-288>, a=<19,6,19> +p=<-2067,-2051,-1458>, v=<-296,-291,-207>, a=<20,22,10> +p=<-1027,-2595,-500>, v=<-147,-371,-71>, a=<8,27,7> +p=<-71,-3053,486>, v=<-10,-430,69>, a=<-1,33,-5> +p=<1668,359,-2327>, v=<238,50,-329>, a=<-15,-4,28> +p=<2009,537,-2278>, v=<284,76,-324>, a=<-14,-8,17> +p=<-773,2518,931>, v=<-112,357,135>, a=<5,-23,-5> +p=<411,802,2157>, v=<63,108,308>, a=<-5,-10,-21> +p=<-1874,107,2417>, v=<-266,18,347>, a=<12,-5,-26> +p=<2244,-2094,35>, v=<317,-298,9>, a=<-17,22,3> +p=<-1796,1907,1218>, v=<-255,270,175>, a=<20,-21,-10> +p=<-2128,1882,-1395>, v=<-311,268,-196>, a=<19,-16,11> +p=<1115,1844,-2272>, v=<159,260,-324>, a=<-4,-20,26> +p=<2896,560,152>, v=<414,77,25>, a=<-33,-8,1> +p=<2896,1485,547>, v=<413,210,80>, a=<-23,-14,-6> +p=<2936,-363,123>, v=<419,-49,19>, a=<-29,0,-2> +p=<1380,-388,-3156>, v=<197,-55,-448>, a=<-19,0,30> +p=<-240,-2621,-1687>, v=<-32,-368,-241>, a=<6,23,15> +p=<-2151,-239,1867>, v=<-310,-37,268>, a=<21,-4,-19> +p=<-2715,494,1671>, v=<-384,70,236>, a=<31,-3,-16> +p=<1594,442,2371>, v=<231,60,340>, a=<-13,-5,-25> +p=<-387,2027,1630>, v=<-55,284,232>, a=<-1,-21,-21> +p=<873,2025,1551>, v=<131,291,220>, a=<-8,-22,-16> +p=<-2969,370,26>, v=<-429,50,2>, a=<28,-5,-1> +p=<2798,897,-1992>, v=<400,125,-287>, a=<-33,-8,25> +p=<-1072,892,-2424>, v=<-153,127,-354>, a=<10,-5,23> +p=<1194,-2051,-1285>, v=<166,-290,-186>, a=<-13,25,16> +p=<-304,-2224,-1635>, v=<-39,-313,-229>, a=<7,22,16> +p=<498,1066,2607>, v=<74,151,370>, a=<-11,-12,-30> +p=<3622,401,268>, v=<514,57,32>, a=<-34,-4,-2> +p=<-1957,-506,-2453>, v=<-285,-66,-348>, a=<16,3,23> +p=<-1362,-501,-2102>, v=<-195,-65,-299>, a=<18,7,19> +p=<1933,1724,1334>, v=<279,246,189>, a=<-25,-21,-14> +p=<-2142,1260,-2152>, v=<-311,181,-314>, a=<22,-12,23> +p=<-347,-1371,-2579>, v=<-51,-196,-371>, a=<6,16,25> +p=<1083,2704,106>, v=<151,385,17>, a=<-12,-30,4> +p=<-2820,1697,811>, v=<-400,242,120>, a=<32,-16,-6> +p=<-1104,2720,-1534>, v=<-156,388,-219>, a=<11,-26,17> +p=<589,-751,2836>, v=<81,-108,406>, a=<-1,3,-27> +p=<-1067,-1168,2214>, v=<-152,-161,317>, a=<10,11,-22> +p=<-1207,-366,2703>, v=<-172,-52,381>, a=<17,3,-34> +p=<-1192,-3124,-321>, v=<-173,-452,-44>, a=<7,33,7> +p=<2232,-893,1778>, v=<319,-128,255>, a=<-22,9,-21> +p=<1871,-460,2230>, v=<269,-65,321>, a=<-17,4,-22> +p=<-2409,-753,795>, v=<-344,-106,113>, a=<20,4,-4> +p=<1280,386,-2672>, v=<181,53,-383>, a=<-8,-4,29> +p=<3029,1184,391>, v=<433,169,56>, a=<-25,-6,-2> +p=<1127,-737,2201>, v=<161,-105,311>, a=<-10,13,-20> +p=<-2639,-1118,-1104>, v=<-380,-159,-163>, a=<26,7,13> +p=<1096,258,3149>, v=<158,36,449>, a=<-7,1,-32> +p=<1163,2004,2321>, v=<166,283,330>, a=<-12,-25,-20> +p=<2115,-918,-1957>, v=<309,-131,-279>, a=<-20,13,18> +p=<-1432,1051,2016>, v=<-205,149,290>, a=<15,-10,-18> +p=<-1889,2232,-912>, v=<-271,317,-126>, a=<21,-19,3> +p=<-2217,1395,1388>, v=<-313,196,202>, a=<22,-17,-13> +p=<-1257,-704,-2330>, v=<-180,-100,-331>, a=<12,7,27> +p=<-1663,1076,-1905>, v=<-234,150,-270>, a=<16,-10,19> +p=<1327,1340,2125>, v=<189,195,302>, a=<-13,-11,-20> +p=<-1280,-739,-2082>, v=<-179,-107,-300>, a=<11,4,21> +p=<-1554,-998,2380>, v=<-222,-143,342>, a=<19,3,-27> +p=<679,-2132,2115>, v=<95,-305,299>, a=<-3,18,-22> +p=<-217,2813,-1020>, v=<-35,399,-142>, a=<3,-28,9> +p=<2867,-866,-1319>, v=<409,-125,-184>, a=<-28,5,10> +p=<-1320,1952,2228>, v=<-188,280,317>, a=<13,-20,-17> +p=<-1304,-1233,2264>, v=<-186,-174,319>, a=<17,12,-22> +p=<-2692,-721,-888>, v=<-382,-103,-129>, a=<20,3,9> +p=<-1976,-1554,-1752>, v=<-275,-218,-250>, a=<20,9,19> +p=<-1203,2819,-1294>, v=<-172,405,-185>, a=<11,-27,14> +p=<-2327,2241,449>, v=<-334,326,62>, a=<24,-24,-2> +p=<-2067,2050,1210>, v=<-295,297,169>, a=<20,-15,-7> +p=<1378,2394,527>, v=<190,344,70>, a=<-11,-22,-5> +p=<-1488,-2886,-992>, v=<-212,-413,-148>, a=<10,29,8> +p=<-1696,2898,-319>, v=<-245,413,-45>, a=<12,-28,2> +p=<3098,797,-510>, v=<440,113,-67>, a=<-32,-7,6> +p=<-2871,-578,-611>, v=<-410,-82,-88>, a=<24,5,5> +p=<1034,-1285,-2480>, v=<146,-185,-354>, a=<-10,15,22> +p=<879,1740,1198>, v=<122,246,168>, a=<-10,-16,-12> +p=<3168,1337,-308>, v=<448,191,-40>, a=<-31,-13,3> +p=<3035,-1149,893>, v=<434,-163,126>, a=<-27,9,-9> +p=<-947,-2705,656>, v=<-131,-387,93>, a=<8,25,-3> +p=<500,-2393,1363>, v=<77,-348,193>, a=<0,23,-8> +p=<-1882,1920,796>, v=<-268,272,115>, a=<19,-17,-3> +p=<-960,493,-2623>, v=<-139,68,-374>, a=<9,-8,21> +p=<1828,-2071,1203>, v=<259,-291,167>, a=<-18,21,-9> +p=<-1604,1283,-1649>, v=<-230,181,-239>, a=<18,-14,16> +p=<-1799,2321,-868>, v=<-252,330,-119>, a=<22,-21,8> +p=<-24,2346,-1669>, v=<-7,335,-243>, a=<4,-22,19> +p=<-876,-1276,2680>, v=<-123,-188,378>, a=<10,14,-26> +p=<-2889,1176,545>, v=<-415,168,80>, a=<32,-11,-7> +p=<-86,1176,2086>, v=<-12,168,300>, a=<-1,-7,-20> +p=<-402,-2477,807>, v=<-57,-353,119>, a=<4,27,-2> +p=<-1970,-1448,-1967>, v=<-278,-202,-283>, a=<19,12,24> +p=<631,-958,-2998>, v=<89,-136,-432>, a=<-8,10,33> +p=<-1785,1056,1545>, v=<-256,148,213>, a=<13,-15,-15> +p=<1676,1822,1043>, v=<241,263,147>, a=<-16,-17,-8> +p=<-56,2448,1580>, v=<-11,347,223>, a=<4,-24,-15> +p=<-2842,439,379>, v=<-406,66,54>, a=<31,-2,-4> +p=<-1293,1742,-1884>, v=<-183,246,-267>, a=<10,-13,18> +p=<-1336,2627,-1311>, v=<-197,379,-184>, a=<9,-23,12> +p=<-618,2160,-2253>, v=<-83,313,-321>, a=<9,-21,22> +p=<2734,-1738,-454>, v=<389,-247,-60>, a=<-27,17,8> +p=<-2927,-295,-97>, v=<-417,-40,-13>, a=<27,1,5> +p=<1538,-1987,-280>, v=<222,-283,-38>, a=<-13,18,5> +p=<-2076,1215,-363>, v=<-298,172,-53>, a=<18,-17,3> +p=<-2642,183,341>, v=<-377,19,50>, a=<23,1,-1> +p=<-31,2384,-1377>, v=<-5,337,-199>, a=<2,-26,11> +p=<771,690,-2686>, v=<116,98,-379>, a=<-15,-3,29> +p=<-68,-2134,-3000>, v=<-10,-301,-431>, a=<1,23,33> +p=<3022,1487,35>, v=<434,213,6>, a=<-31,-14,6> +p=<-402,-2383,-1800>, v=<-57,-340,-257>, a=<2,17,17> +p=<-1125,744,-2551>, v=<-156,106,-364>, a=<8,-3,25> +p=<705,2907,-863>, v=<100,411,-120>, a=<-4,-37,6> +p=<-303,-424,3358>, v=<-43,-57,481>, a=<9,0,-33> +p=<3065,-242,1553>, v=<438,-36,221>, a=<-28,-4,-15> +p=<211,3341,-1331>, v=<33,481,-190>, a=<1,-35,12> +p=<2309,1563,-21>, v=<333,218,-3>, a=<-21,-16,0> +p=<-1142,3233,737>, v=<-158,461,107>, a=<15,-32,-2> +p=<241,-3065,-706>, v=<32,-437,-101>, a=<-1,30,10> +p=<-1229,-1539,2489>, v=<-171,-212,353>, a=<14,15,-20> +p=<1664,132,-1899>, v=<236,19,-273>, a=<-18,1,15> +p=<-27,-599,2800>, v=<-2,-87,402>, a=<4,5,-30> +p=<-3022,842,-1427>, v=<-431,120,-204>, a=<26,-13,14> +p=<-2558,-862,-996>, v=<-362,-122,-135>, a=<28,11,7> +p=<1860,-1025,-2431>, v=<259,-143,-349>, a=<-21,13,24> +p=<2563,-1818,534>, v=<364,-258,82>, a=<-30,20,-8> +p=<614,-3055,-609>, v=<87,-431,-89>, a=<-6,27,2> +p=<-180,-3323,420>, v=<-22,-472,60>, a=<5,34,-2> +p=<1270,1194,-2769>, v=<182,168,-391>, a=<-14,-11,23> +p=<-89,-1147,-2030>, v=<-13,-165,-285>, a=<3,12,22> +p=<-159,-2746,874>, v=<-20,-391,128>, a=<3,27,-15> +p=<2942,694,778>, v=<423,104,112>, a=<-28,-5,-8> +p=<2937,775,238>, v=<418,118,30>, a=<-29,-7,1> +p=<-2889,-1216,-1522>, v=<-414,-176,-214>, a=<29,13,10> +p=<3108,-504,1282>, v=<440,-72,183>, a=<-37,6,-13> +p=<1404,-2482,-779>, v=<201,-356,-114>, a=<-15,21,11> +p=<-3135,1691,-457>, v=<-445,242,-63>, a=<33,-14,7> +p=<593,-560,-3030>, v=<85,-76,-433>, a=<-11,7,29> +p=<-1810,2667,339>, v=<-259,384,50>, a=<21,-28,-6> +p=<1361,2731,923>, v=<194,391,131>, a=<-13,-29,-11> +p=<-491,-1870,2097>, v=<-70,-259,295>, a=<4,12,-16> +p=<202,-3264,584>, v=<30,-464,83>, a=<-2,28,-4> +p=<-420,2323,-1657>, v=<-60,332,-233>, a=<5,-23,20> +p=<1630,-1018,1758>, v=<232,-143,246>, a=<-13,10,-17> +p=<1479,-2655,-951>, v=<213,-380,-135>, a=<-17,23,5> +p=<-1309,599,-2712>, v=<-191,85,-389>, a=<14,-3,26> +p=<-365,-1831,-3076>, v=<-52,-257,-439>, a=<1,18,28> +p=<-1572,-82,2148>, v=<-224,-6,308>, a=<11,1,-22> +p=<1951,839,-1829>, v=<275,120,-266>, a=<-16,-2,18> +p=<-462,-2306,1178>, v=<-67,-327,168>, a=<4,25,-9> +p=<-1355,-1176,2319>, v=<-189,-167,329>, a=<10,11,-23> +p=<-1609,846,1797>, v=<-226,121,262>, a=<23,-6,-17> +p=<-584,-214,2601>, v=<-80,-30,376>, a=<4,1,-26> +p=<-2998,-621,-215>, v=<-428,-88,-33>, a=<29,4,6> +p=<-2037,-2515,-628>, v=<-283,-362,-90>, a=<19,26,2> +p=<899,-825,3038>, v=<128,-123,434>, a=<-6,6,-32> +p=<1501,246,-2640>, v=<208,35,-377>, a=<-12,-8,23> +p=<-2606,-1301,775>, v=<-372,-185,112>, a=<22,12,-3> +p=<-1243,1236,2385>, v=<-182,172,337>, a=<11,-13,-21> +p=<759,735,-2578>, v=<111,105,-370>, a=<-4,-2,26> +p=<-2138,576,2315>, v=<-303,87,330>, a=<23,-6,-22> +p=<1450,-2184,-1592>, v=<206,-312,-226>, a=<-12,23,19> +p=<-1024,2357,1170>, v=<-146,332,164>, a=<10,-24,-11> +p=<1895,2547,-22>, v=<270,365,-8>, a=<-24,-25,0> +p=<2776,124,-668>, v=<395,18,-90>, a=<-24,2,9> +p=<-2599,104,474>, v=<-366,9,74>, a=<25,-6,-8> +p=<139,185,2854>, v=<20,28,406>, a=<-5,3,-30> +p=<2164,1455,-616>, v=<309,205,-89>, a=<-25,-15,3> +p=<1800,463,2549>, v=<256,66,367>, a=<-19,-4,-28> +p=<2538,-1430,344>, v=<361,-203,47>, a=<-28,15,-3> +p=<-9,2185,1710>, v=<-6,312,246>, a=<-4,-22,-15> +p=<-34,144,-3420>, v=<-4,13,-489>, a=<-3,-2,33> +p=<880,813,-2385>, v=<125,115,-339>, a=<-13,-7,18> +p=<1889,-2915,20>, v=<271,-421,0>, a=<-14,25,-2> +p=<1368,-1912,-679>, v=<198,-280,-95>, a=<-13,23,4> +p=<2464,756,-1235>, v=<351,108,-174>, a=<-18,-12,12> +p=<536,-896,2762>, v=<80,-124,398>, a=<-6,5,-29> +p=<-275,26,3405>, v=<-41,2,489>, a=<2,-3,-32> +p=<-691,2510,2012>, v=<-100,358,287>, a=<2,-24,-21> +p=<186,776,-2800>, v=<26,108,-398>, a=<-1,-9,31> +p=<48,-2765,51>, v=<6,-394,7>, a=<0,28,1> +p=<-1243,-2674,-621>, v=<-181,-387,-90>, a=<14,25,8> +p=<637,-2968,249>, v=<91,-432,37>, a=<-8,29,-2> +p=<-108,2644,-359>, v=<-15,377,-43>, a=<0,-25,1> +p=<311,2396,1647>, v=<46,341,238>, a=<0,-23,-19> +p=<2091,863,1991>, v=<300,123,281>, a=<-17,-8,-22> +p=<-1316,1419,1976>, v=<-183,204,279>, a=<13,-15,-21> +p=<57,-1973,2964>, v=<2,-281,424>, a=<-1,21,-29> +p=<-775,-2721,-1750>, v=<-109,-389,-247>, a=<13,28,19> +p=<731,1583,-2157>, v=<110,228,-314>, a=<-6,-15,22> +p=<-893,2775,-190>, v=<-126,396,-26>, a=<6,-27,2> +p=<367,-2679,-1080>, v=<51,-384,-154>, a=<-7,27,11> +p=<3177,-367,441>, v=<445,-51,64>, a=<-30,3,-5> +p=<-1647,-1342,2341>, v=<-240,-185,331>, a=<12,13,-23> +p=<986,-2763,1286>, v=<136,-391,185>, a=<-9,28,-9> +p=<-2802,-1225,252>, v=<-399,-180,31>, a=<26,13,1> +p=<175,2883,-1052>, v=<30,408,-150>, a=<-2,-31,13> +p=<-229,-2683,-1449>, v=<-28,-386,-211>, a=<7,28,14> +p=<2786,531,1110>, v=<398,77,157>, a=<-29,-8,-9> +p=<279,-2586,-2001>, v=<35,-371,-285>, a=<-2,27,20> +p=<2176,-126,1717>, v=<304,-19,245>, a=<-21,1,-24> +p=<2153,2118,998>, v=<304,302,142>, a=<-26,-24,-9> +p=<-744,2719,1245>, v=<-111,386,176>, a=<2,-28,-16> +p=<3101,-1190,-994>, v=<444,-167,-143>, a=<-34,12,7> +p=<-156,-2267,-2303>, v=<-21,-324,-334>, a=<5,19,22> +p=<1023,-1402,2182>, v=<143,-199,312>, a=<-8,20,-28> +p=<2486,-1200,-1942>, v=<359,-171,-278>, a=<-22,12,19> +p=<1355,1883,2115>, v=<197,269,305>, a=<-15,-18,-24> +p=<1830,788,2438>, v=<263,107,349>, a=<-13,-9,-17> +p=<-912,715,3178>, v=<-131,105,450>, a=<6,-9,-30> +p=<1612,-1972,-156>, v=<226,-283,-23>, a=<-20,13,4> +p=<893,-2183,2349>, v=<126,-319,334>, a=<-13,23,-24> +p=<1817,-2407,-431>, v=<256,-343,-63>, a=<-18,20,1> +p=<2372,1739,-527>, v=<336,250,-74>, a=<-23,-20,4> +p=<-2169,-888,1343>, v=<-305,-122,186>, a=<23,3,-15> +p=<1004,-2830,-740>, v=<139,-399,-107>, a=<-11,27,6> +p=<-305,-2955,521>, v=<-40,-419,74>, a=<3,29,-7> +p=<-509,1141,2439>, v=<-75,160,348>, a=<3,-11,-24> +p=<-2301,1385,-970>, v=<-327,199,-139>, a=<15,-17,11> +p=<-2030,1762,-1028>, v=<-292,253,-142>, a=<20,-21,11> +p=<-861,2917,38>, v=<-123,415,7>, a=<7,-29,3> +p=<-167,-2616,1713>, v=<-21,-374,241>, a=<2,18,-20> +p=<-1058,1016,-2844>, v=<-157,151,-402>, a=<10,-10,28> +p=<1515,795,-2400>, v=<214,120,-339>, a=<-14,-5,25> +p=<-1976,1929,1093>, v=<-285,274,156>, a=<23,-17,-10> +p=<-2791,376,-1195>, v=<-397,50,-169>, a=<27,1,14> +p=<-415,-2632,-1896>, v=<-61,-373,-274>, a=<5,29,19> +p=<731,2967,-1217>, v=<104,426,-175>, a=<-4,-29,12> +p=<-1052,-2543,-649>, v=<-154,-365,-94>, a=<8,23,0> +p=<-86,-1297,2692>, v=<-8,-183,387>, a=<1,12,-29> +p=<2334,-1447,1773>, v=<334,-210,250>, a=<-23,19,-22> +p=<-1461,1036,3091>, v=<-214,152,440>, a=<14,-7,-29> +p=<574,1634,-2195>, v=<82,232,-314>, a=<-4,-8,25> +p=<2758,-1277,-252>, v=<395,-186,-36>, a=<-30,16,-2> +p=<2285,-1449,1267>, v=<328,-207,185>, a=<-28,16,-12> +p=<-1991,-2098,-804>, v=<-284,-292,-118>, a=<17,16,8> +p=<1255,909,2080>, v=<180,129,296>, a=<-12,-13,-18> +p=<-1210,1924,-2166>, v=<-170,273,-309>, a=<10,-19,21> +p=<498,619,-2631>, v=<70,90,-374>, a=<-6,-6,29> +p=<1181,1790,-2398>, v=<170,253,-340>, a=<-10,-16,27> +p=<1096,-2878,-674>, v=<156,-411,-98>, a=<-14,29,9> +p=<-1718,2707,-58>, v=<-244,383,-7>, a=<17,-31,1> +p=<576,-3141,-439>, v=<83,-454,-62>, a=<0,28,7> +p=<1993,-1807,1900>, v=<284,-255,271>, a=<-18,18,-18> +p=<758,2506,-1611>, v=<105,354,-234>, a=<-6,-25,20> +p=<-2346,1520,-480>, v=<-335,217,-66>, a=<19,-12,4> +p=<-3102,541,88>, v=<-435,80,11>, a=<33,-7,1> +p=<1428,1818,-1579>, v=<205,256,-224>, a=<-12,-18,15> +p=<-2580,242,-393>, v=<-367,37,-61>, a=<23,2,4> +p=<2525,-866,-1209>, v=<360,-119,-172>, a=<-25,6,12> +p=<-1643,-1621,1822>, v=<-238,-235,263>, a=<13,16,-17> +p=<-1935,2048,802>, v=<-274,293,110>, a=<21,-20,-6> +p=<1482,2793,-375>, v=<213,399,-47>, a=<-17,-30,10> +p=<1252,2495,-610>, v=<176,357,-88>, a=<-12,-26,9> +p=<1009,250,-2787>, v=<143,35,-398>, a=<-10,-5,27> +p=<-878,2715,-1519>, v=<-125,385,-217>, a=<9,-24,16> +p=<-1311,2581,1146>, v=<-184,371,160>, a=<13,-24,-10> +p=<2640,410,-781>, v=<378,59,-114>, a=<-19,-6,14> +p=<-371,1354,-2693>, v=<-52,194,-384>, a=<6,-13,29> +p=<537,-2185,-2231>, v=<75,-312,-317>, a=<-3,28,25> +p=<-32,-2568,1670>, v=<-4,-370,242>, a=<3,25,-14> +p=<1565,1932,454>, v=<223,277,66>, a=<-15,-19,-3> +p=<-1345,2918,-69>, v=<-192,416,-11>, a=<10,-25,1> +p=<-2085,-271,-1874>, v=<-297,-38,-263>, a=<20,4,23> +p=<2111,-2280,-74>, v=<305,-322,-6>, a=<-22,24,-4> +p=<12,-488,3282>, v=<6,-69,462>, a=<-4,6,-35> +p=<-829,-937,2551>, v=<-116,-137,367>, a=<3,12,-23> +p=<1314,2115,-1539>, v=<187,298,-218>, a=<-13,-14,20> +p=<666,553,-3136>, v=<94,80,-448>, a=<-5,-5,28> +p=<373,2363,-928>, v=<52,335,-130>, a=<0,-20,8> +p=<-16,923,3038>, v=<0,125,435>, a=<0,-11,-30> +p=<-582,-2415,-1123>, v=<-84,-349,-157>, a=<5,20,18> +p=<1104,-320,2444>, v=<158,-44,354>, a=<-11,2,-23> +p=<-187,-1095,2647>, v=<-26,-156,376>, a=<-1,12,-21> +p=<-1421,-2357,200>, v=<-201,-333,33>, a=<15,21,2> +p=<1877,90,2147>, v=<273,12,309>, a=<-16,0,-21> +p=<-1880,419,-2597>, v=<-271,63,-374>, a=<18,-4,25> +p=<-1609,414,-2417>, v=<-229,59,-351>, a=<10,-1,24> +p=<-1480,2235,-210>, v=<-210,316,-30>, a=<12,-20,0> +p=<-1941,743,2365>, v=<-277,110,337>, a=<15,-7,-25> +p=<1495,-2896,1065>, v=<214,-412,152>, a=<-11,26,-10> +p=<-2038,541,1731>, v=<-286,80,245>, a=<15,-6,-13> +p=<1316,175,-2635>, v=<187,26,-378>, a=<-10,-1,27> +p=<1778,1932,-399>, v=<254,274,-57>, a=<-16,-20,3> +p=<-2497,84,472>, v=<-355,12,70>, a=<24,0,-6> +p=<566,-1984,-1067>, v=<77,-285,-155>, a=<-2,22,11> +p=<-1138,420,-3082>, v=<-157,62,-440>, a=<15,-1,34> +p=<789,-2022,2212>, v=<115,-290,317>, a=<-10,16,-25> +p=<354,-2402,-1538>, v=<50,-343,-214>, a=<-2,22,15> +p=<-1233,-3403,-289>, v=<-181,-482,-40>, a=<14,28,2> +p=<-2416,-1448,462>, v=<-346,-204,70>, a=<24,12,-3> +p=<676,-2408,-1515>, v=<88,-343,-221>, a=<-6,23,14> +p=<795,420,-2555>, v=<106,57,-366>, a=<-6,-5,24> +p=<951,-2678,-2019>, v=<133,-382,-289>, a=<-7,23,20> +p=<384,1486,2761>, v=<54,207,394>, a=<-4,-11,-26> +p=<-2164,1308,-2362>, v=<-308,186,-343>, a=<23,-12,23> +p=<1636,-2395,-677>, v=<233,-344,-102>, a=<-17,19,7> +p=<-836,2716,802>, v=<-116,390,114>, a=<5,-26,-8> +p=<-1017,2318,-1502>, v=<-148,331,-212>, a=<14,-22,14> +p=<-8,2290,-2327>, v=<-1,326,-336>, a=<0,-26,23> +p=<957,-475,-2503>, v=<135,-71,-363>, a=<-7,4,21> +p=<-1802,1695,-2518>, v=<-262,242,-356>, a=<17,-16,22> +p=<-1918,1084,978>, v=<-273,152,140>, a=<19,-8,-9> +p=<-2718,-511,267>, v=<-390,-70,38>, a=<22,0,-5> +p=<-931,741,-2861>, v=<-135,107,-409>, a=<4,-8,27> +p=<2919,720,-429>, v=<418,105,-59>, a=<-30,-11,4> +p=<-127,-208,-2528>, v=<-17,-29,-361>, a=<-2,2,24> +p=<2588,-1533,325>, v=<369,-224,46>, a=<-25,15,-5> +p=<2240,755,1445>, v=<321,110,206>, a=<-20,-8,-11> +p=<-1025,-2658,396>, v=<-144,-381,56>, a=<9,22,4> +p=<-1591,-1577,-2200>, v=<-227,-229,-312>, a=<17,13,22> +p=<2320,-2390,453>, v=<328,-346,65>, a=<-19,26,-3> +p=<-2665,277,577>, v=<-379,37,82>, a=<25,1,-5> +p=<-244,-314,2533>, v=<-36,-49,359>, a=<-2,4,-24> +p=<1363,1901,-1003>, v=<198,268,-143>, a=<-15,-20,10> +p=<-1982,-2008,-666>, v=<-279,-286,-93>, a=<15,21,6> +p=<404,1110,-2724>, v=<57,152,-390>, a=<-5,-11,25> +p=<1106,-29,2811>, v=<157,-5,397>, a=<-4,-1,-29> +p=<1279,-1327,-2438>, v=<176,-186,-347>, a=<-16,13,23> +p=<-2442,-1060,-1808>, v=<-348,-152,-261>, a=<25,9,17> +p=<-2764,706,766>, v=<-392,99,116>, a=<26,-4,-11> +p=<398,-961,-2682>, v=<51,-137,-388>, a=<-2,9,30> +p=<1783,-461,-1623>, v=<258,-68,-234>, a=<-19,5,13> +p=<164,-766,-3613>, v=<24,-107,-517>, a=<2,9,39> +p=<-2002,-2461,-920>, v=<-287,-349,-131>, a=<24,21,4> +p=<770,493,3153>, v=<112,71,450>, a=<-4,-1,-35> +p=<-864,477,-3078>, v=<-120,73,-439>, a=<7,-6,29> +p=<1315,2948,-955>, v=<185,418,-134>, a=<-12,-27,10> +p=<1168,2186,-1475>, v=<165,308,-215>, a=<-11,-16,14> +p=<1883,1702,1906>, v=<270,252,273>, a=<-20,-13,-18> +p=<-2462,-1690,-48>, v=<-353,-241,-8>, a=<24,15,2> +p=<-1016,1706,2368>, v=<-144,242,341>, a=<7,-21,-20> +p=<2752,1230,178>, v=<394,178,26>, a=<-23,-16,-1> +p=<-3139,492,-93>, v=<-446,70,-14>, a=<31,-6,0> +p=<-232,-669,3400>, v=<-35,-95,487>, a=<-1,3,-29> +p=<521,-4,2511>, v=<73,0,361>, a=<-8,3,-33> +p=<-1580,-2272,-2040>, v=<-224,-323,-292>, a=<15,20,20> +p=<2936,10,680>, v=<419,1,100>, a=<-33,1,-7> +p=<3134,29,491>, v=<450,8,66>, a=<-31,4,0> +p=<2028,-2215,730>, v=<286,-317,101>, a=<-17,17,-6> +p=<-942,2508,227>, v=<-132,360,34>, a=<6,-18,-2> +p=<-2074,-337,-2307>, v=<-292,-51,-325>, a=<17,9,25> +p=<3138,-829,906>, v=<448,-116,129>, a=<-27,8,-3> +p=<417,-1567,2520>, v=<60,-223,357>, a=<-7,8,-29> +p=<-591,2981,-253>, v=<-79,425,-35>, a=<9,-29,2> +p=<-428,2571,-2295>, v=<-65,372,-326>, a=<-1,-25,23> +p=<-1147,-2613,-1664>, v=<-163,-373,-239>, a=<10,32,17> +p=<-682,2368,720>, v=<-96,338,106>, a=<10,-27,-10> +p=<414,2028,-1676>, v=<65,286,-239>, a=<-6,-20,16> +p=<80,2771,-1315>, v=<8,395,-188>, a=<0,-25,13> +p=<-571,765,-2510>, v=<-80,110,-354>, a=<1,-10,31> +p=<1755,-2364,-196>, v=<251,-339,-30>, a=<-16,25,-1> +p=<-995,-2303,54>, v=<-141,-327,13>, a=<6,21,3> +p=<987,-1899,-2046>, v=<141,-272,-292>, a=<-9,18,25> +p=<-230,-841,-2371>, v=<-31,-118,-337>, a=<2,5,23> +p=<2201,-1834,1184>, v=<312,-262,169>, a=<-22,20,-7> +p=<2301,277,-1316>, v=<331,41,-186>, a=<-22,3,11> +p=<-2248,1705,39>, v=<-320,240,10>, a=<19,-15,1> +p=<-1825,2384,950>, v=<-264,341,136>, a=<20,-23,-4> +p=<2159,583,-2049>, v=<306,85,-291>, a=<-17,2,20> +p=<752,-306,-2743>, v=<110,-44,-391>, a=<-7,3,28> +p=<-1600,733,2474>, v=<-228,102,353>, a=<16,-4,-29> +p=<-1931,-2210,-1867>, v=<-276,-309,-267>, a=<18,24,14> +p=<-1295,-2031,1686>, v=<-184,-292,239>, a=<12,21,-15> +p=<478,-2672,-94>, v=<69,-381,-17>, a=<-2,23,0> +p=<1317,662,2146>, v=<184,91,301>, a=<-16,-4,-19> +p=<761,-2068,1675>, v=<109,-295,240>, a=<-5,20,-13> +p=<3126,878,1183>, v=<444,125,167>, a=<-29,-5,-8> +p=<1005,-2563,-549>, v=<146,-368,-80>, a=<-15,25,4> +p=<2042,-1193,-2128>, v=<290,-166,-300>, a=<-17,15,22> +p=<200,-1578,2895>, v=<26,-223,413>, a=<-4,11,-28> +p=<-986,2686,-304>, v=<-138,378,-38>, a=<9,-26,5> +p=<2871,-1251,358>, v=<411,-175,52>, a=<-28,17,0> +p=<1868,319,-2475>, v=<267,45,-348>, a=<-18,-3,22> +p=<2451,19,-1262>, v=<352,-1,-183>, a=<-25,0,12> +p=<1585,2301,-869>, v=<231,330,-120>, a=<-10,-23,7> +p=<2502,1759,-696>, v=<357,257,-102>, a=<-24,-19,6> +p=<2305,537,-2463>, v=<332,77,-348>, a=<-22,-8,18> +p=<-255,2470,-1500>, v=<-35,349,-217>, a=<6,-22,12> +p=<-236,2477,-1290>, v=<-37,350,-184>, a=<6,-24,15> +p=<2401,258,1682>, v=<343,36,238>, a=<-21,-2,-16> +p=<-674,2633,130>, v=<-96,377,22>, a=<7,-32,0> +p=<-682,-183,-2591>, v=<-95,-27,-365>, a=<6,6,22> +p=<-153,2400,-2116>, v=<-24,340,-304>, a=<2,-25,20> +p=<-1243,2187,1831>, v=<-177,311,261>, a=<13,-22,-18> +p=<1115,-2968,-411>, v=<164,-423,-63>, a=<-5,31,5> +p=<2669,-425,-1805>, v=<381,-55,-256>, a=<-26,4,19> +p=<-1819,-1005,-1806>, v=<-259,-146,-254>, a=<13,9,22> +p=<2727,-746,-1095>, v=<388,-107,-161>, a=<-21,7,10> +p=<2988,-1385,-756>, v=<431,-194,-105>, a=<-31,12,9> +p=<1892,-843,-2112>, v=<270,-120,-295>, a=<-18,8,18> +p=<981,-1233,2354>, v=<140,-176,335>, a=<-7,11,-21> +p=<-798,910,2557>, v=<-114,134,367>, a=<9,-9,-28> +p=<1357,3162,599>, v=<193,457,83>, a=<-12,-31,-6> +p=<2670,1729,-42>, v=<383,245,-2>, a=<-29,-17,2> +p=<-1459,-1028,2060>, v=<-208,-142,297>, a=<17,8,-17> +p=<-166,-236,2935>, v=<-20,-33,417>, a=<-2,0,-29> +p=<3032,-500,391>, v=<440,-72,55>, a=<-35,10,1> +p=<1867,1954,117>, v=<266,282,16>, a=<-11,-15,1> +p=<165,1444,2170>, v=<20,206,312>, a=<-2,-10,-19> +p=<-2105,-2100,395>, v=<-303,-300,51>, a=<23,21,-3> +p=<-975,2566,-2097>, v=<-141,364,-304>, a=<5,-26,20> +p=<2688,-678,-926>, v=<383,-97,-136>, a=<-28,6,9> +p=<-331,-3031,-174>, v=<-43,-435,-21>, a=<4,33,4> +p=<-1036,-2037,-1769>, v=<-149,-290,-254>, a=<8,27,17> +p=<443,-1213,-2648>, v=<60,-173,-386>, a=<-8,14,26> +p=<-2666,220,1758>, v=<-380,31,253>, a=<27,1,-16> +p=<1168,2827,1304>, v=<169,403,184>, a=<-11,-27,-11> +p=<1237,645,2828>, v=<176,89,403>, a=<-11,-3,-27> +p=<-194,-718,2500>, v=<-26,-97,355>, a=<2,2,-25> +p=<-1738,-1623,1459>, v=<-246,-231,207>, a=<20,18,-14> +p=<607,-1729,-2554>, v=<87,-244,-363>, a=<-5,17,21> +p=<-772,2981,-1709>, v=<-108,429,-248>, a=<6,-29,13> +p=<-929,-935,2559>, v=<-131,-133,366>, a=<8,9,-27> +p=<1889,-2222,2>, v=<273,-315,-4>, a=<-23,24,2> +p=<2252,-1177,-1148>, v=<317,-163,-169>, a=<-22,7,14> +p=<898,1129,1677>, v=<128,160,240>, a=<-8,-11,-18> +p=<585,1776,-1605>, v=<86,257,-232>, a=<-3,-11,11> +p=<1329,-702,2447>, v=<188,-99,350>, a=<-20,5,-24> +p=<-740,-1556,-2238>, v=<-104,-219,-317>, a=<9,19,22> +p=<1221,2376,-501>, v=<176,343,-70>, a=<-13,-23,2> +p=<-18,-582,-2939>, v=<-1,-83,-416>, a=<0,11,31> +p=<328,-1362,2407>, v=<47,-192,345>, a=<-1,11,-24> +p=<2254,-795,-2176>, v=<319,-115,-306>, a=<-17,7,20> +p=<1945,2178,374>, v=<273,308,54>, a=<-22,-23,-3> +p=<-1255,1542,-2209>, v=<-182,220,-315>, a=<11,-15,23> +p=<-1029,1657,2328>, v=<-148,234,331>, a=<16,-16,-27> +p=<299,2821,-1374>, v=<44,402,-193>, a=<-7,-25,13> +p=<-2317,106,-1824>, v=<-331,20,-262>, a=<23,-1,13> +p=<784,-2450,-1388>, v=<116,-346,-195>, a=<-11,26,14> +p=<2738,-544,-356>, v=<393,-77,-49>, a=<-26,10,-3> +p=<1355,1483,2334>, v=<195,211,331>, a=<-12,-19,-17> +p=<2570,-849,-414>, v=<369,-117,-60>, a=<-21,9,9> +p=<313,-1203,-2974>, v=<41,-173,-422>, a=<-4,16,26> +p=<133,-3658,193>, v=<22,-524,27>, a=<-4,42,2> +p=<1293,-1644,2714>, v=<179,-232,383>, a=<-12,15,-33> +p=<152,1845,1804>, v=<24,263,261>, a=<-1,-14,-18> +p=<1059,2077,-1799>, v=<154,296,-251>, a=<-7,-19,13> +p=<-2954,-985,167>, v=<-418,-140,23>, a=<29,7,-3> diff --git a/2017/d21/ex1/ex1.py b/2017/d21/ex1/ex1.py new file mode 100755 index 0000000..b5bda88 --- /dev/null +++ b/2017/d21/ex1/ex1.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python + +import itertools +import sys +from collections.abc import Iterator + +# 2x2 *and* 3x3 grid +Grid = tuple[tuple[bool, ...], ...] +START = ".#./..#/###" + + +def solve(input: str) -> int: + def parse_pattern(input: str) -> Grid: + return tuple(tuple(c == "#" for c in line) for line in input.split("/")) + + def parse(input: str) -> dict[Grid, Grid]: + return { + start: end + for start, end in ( + map(parse_pattern, line.split(" => ")) for line in input.splitlines() + ) + } + + def permutations(grid: Grid) -> set[Grid]: + def iter_rotated(grid: Grid) -> Iterator[Grid]: + for _ in range(4): + yield grid + grid = tuple( + tuple(grid[len(grid) - y - 1][x] for y in range(len(grid[0]))) + for x in range(len(grid)) + ) + + def iter_flipped(grid: Grid) -> Iterator[Grid]: + yield grid + yield grid[::-1] + yield tuple(line[::-1] for line in grid) + + return { + flip for rotated in iter_rotated(grid) for flip in iter_flipped(rotated) + } + + def normalize_rules(raw_rules: dict[Grid, Grid]) -> dict[Grid, Grid]: + res: dict[Grid, Grid] = {} + for pattern, grid in raw_rules.items(): + for perm in permutations(pattern): + res[perm] = grid + return res + + def enhance(rules: dict[Grid, Grid], rounds: int) -> list[list[bool]]: + def step(grid: list[list[bool]]) -> list[list[bool]]: + is_even = len(grid) % 2 == 0 + step_size = 2 if is_even else 3 + next_size = len(grid) * (step_size + 1) // step_size + res = [[False for _ in range(next_size)] for _ in range(next_size)] + + for x, y in itertools.product(range(len(grid) // step_size), repeat=2): + elem = tuple( + tuple( + grid[x * step_size + dx][y * step_size + dy] + for dy in range(step_size) + ) + for dx in range(step_size) + ) + new_grid = rules[elem] + for dx, line in enumerate(new_grid): + for dy, p in enumerate(line): + res[x * len(new_grid) + dx][y * len(line) + dy] = p + + return res + + grid = [[p for p in line] for line in parse_pattern(START)] + for _ in range(rounds): + grid = step(grid) + return grid + + raw_rules = parse(input) + norm_rules = normalize_rules(raw_rules) + art = enhance(norm_rules, 5) + return sum(itertools.chain.from_iterable(art)) + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d21/ex1/input b/2017/d21/ex1/input new file mode 100644 index 0000000..4f409b0 --- /dev/null +++ b/2017/d21/ex1/input @@ -0,0 +1,108 @@ +../.. => #.#/#../... +#./.. => #.#/#.#/.#. +##/.. => #../.##/##. +.#/#. => ..#/..#/..# +##/#. => ##./.#./#.. +##/## => .../.#./.#. +.../.../... => ..#./##.#/#.##/##.# +#../.../... => #.##/..../##../###. +.#./.../... => ##.#/###./#.##/#.#. +##./.../... => ##.#/#.##/.#../##.# +#.#/.../... => ...#/..#./.#.#/.### +###/.../... => ..../#..#/#.##/##.. +.#./#../... => .#../.#.#/..#./.### +##./#../... => ..##/#.##/#.../#.#. +..#/#../... => .##./#.##/.#../##.. +#.#/#../... => #.../.##./...#/###. +.##/#../... => #.##/..##/.#.#/##.. +###/#../... => #..#/...#/..#./...# +.../.#./... => .###/.#../..#./#### +#../.#./... => ####/#.../.###/##.. +.#./.#./... => ####/#..#/####/#..# +##./.#./... => .#../..##/..##/#..# +#.#/.#./... => .#.#/#.##/#.#./.#.# +###/.#./... => #.##/#.../###./#..# +.#./##./... => ###./#.../..../.### +##./##./... => #.##/###./...#/###. +..#/##./... => .#.#/###./..#./#... +#.#/##./... => #.#./##../##../..## +.##/##./... => ..../..#./.##./.#.# +###/##./... => #.../.#../#.#./#..# +.../#.#/... => ##../#.##/.##./.##. +#../#.#/... => #.#./##.#/.###/.### +.#./#.#/... => ..../####/####/.#.# +##./#.#/... => #.##/.###/##../#... +#.#/#.#/... => ###./..##/#.#./#### +###/#.#/... => .##./..../###./.... +.../###/... => ###./.##./##../.### +#../###/... => .#../#.../###./...# +.#./###/... => #.#./#.#./####/###. +##./###/... => ...#/##../###./#.#. +#.#/###/... => .#.#/#.#./..#./.##. +###/###/... => ..../#.##/...#/##.. +..#/.../#.. => ...#/#.##/#..#/..## +#.#/.../#.. => ..#./##.#/.#.#/..## +.##/.../#.. => ..##/##../#.#./#.## +###/.../#.. => #.##/###./...#/.##. +.##/#../#.. => ##../#.##/##.#/##.. +###/#../#.. => #.##/##../.##./.#.# +..#/.#./#.. => #..#/##../.###/#.#. +#.#/.#./#.. => .###/#.##/#.#./#### +.##/.#./#.. => #.#./#.../#.##/...# +###/.#./#.. => .##./.#.#/#.#./.#.# +.##/##./#.. => .###/.#.#/...#/#.#. +###/##./#.. => .###/#.##/#.##/#.#. +#../..#/#.. => #.../##../.##./###. +.#./..#/#.. => #.../#.##/#.../###. +##./..#/#.. => ####/..../##.#/.### +#.#/..#/#.. => ..##/##.#/#.##/#..# +.##/..#/#.. => ..#./##.#/#.#./..## +###/..#/#.. => ..##/...#/#..#/#..# +#../#.#/#.. => #.../..../#.../#.## +.#./#.#/#.. => ##../####/.#.#/##.. +##./#.#/#.. => .#../..../#.../.##. +..#/#.#/#.. => .#../.#.#/.#.#/..#. +#.#/#.#/#.. => ..#./#.##/#.#./..## +.##/#.#/#.. => #.##/..##/...#/#### +###/#.#/#.. => .##./.#.#/###./#..# +#../.##/#.. => ..##/.###/.#../##.# +.#./.##/#.. => #.##/.##./.##./.### +##./.##/#.. => .##./.#../..../..## +#.#/.##/#.. => ..../#.#./##.#/###. +.##/.##/#.. => #..#/..../##.#/..#. +###/.##/#.. => ####/##.#/#..#/##.. +#../###/#.. => #.#./###./.###/#... +.#./###/#.. => ##.#/#..#/#.##/..#. +##./###/#.. => ..#./...#/..##/...# +..#/###/#.. => .#.#/..../..##/..## +#.#/###/#.. => #..#/..#./.#../..#. +.##/###/#.. => .#.#/..../#..#/...# +###/###/#.. => #.##/##../.#../.... +.#./#.#/.#. => ..../####/.###/.#.# +##./#.#/.#. => #.##/...#/####/#### +#.#/#.#/.#. => ..#./##../..../#... +###/#.#/.#. => ####/#.##/###./...# +.#./###/.#. => ...#/..#./...#/..#. +##./###/.#. => .##./#.../.#.#/.### +#.#/###/.#. => ..../..../.#.#/#.## +###/###/.#. => ..#./###./##.#/.... +#.#/..#/##. => .###/.#../..#./#### +###/..#/##. => #.##/..#./#..#/.... +.##/#.#/##. => #.../##../####/.##. +###/#.#/##. => ###./..#./..#./##.. +#.#/.##/##. => #.../##../##.#/#.## +###/.##/##. => ..#./#..#/#.##/#### +.##/###/##. => .#.#/.###/...#/.#.. +###/###/##. => ####/..../.#.#/...# +#.#/.../#.# => ##.#/#..#/.##./...# +###/.../#.# => #.#./.#../...#/...# +###/#../#.# => .#.#/.#../##../##.. +#.#/.#./#.# => ###./#.../####/.#.# +###/.#./#.# => ##../#.#./..##/##.# +###/##./#.# => ####/..../###./.##. +#.#/#.#/#.# => ...#/.##./##../.### +###/#.#/#.# => ..#./.##./##.#/.#.. +#.#/###/#.# => ...#/..../..#./...# +###/###/#.# => #.#./#.#./##../.... +###/#.#/### => #.../##.#/.#../..#. +###/###/### => ##../..#./##../..#. diff --git a/2017/d21/ex2/ex2.py b/2017/d21/ex2/ex2.py new file mode 100755 index 0000000..321a032 --- /dev/null +++ b/2017/d21/ex2/ex2.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python + +import itertools +import sys +from collections.abc import Iterator + +# 2x2 *and* 3x3 grid +Grid = tuple[tuple[bool, ...], ...] +START = ".#./..#/###" + + +def solve(input: str) -> int: + def parse_pattern(input: str) -> Grid: + return tuple(tuple(c == "#" for c in line) for line in input.split("/")) + + def parse(input: str) -> dict[Grid, Grid]: + return { + start: end + for start, end in ( + map(parse_pattern, line.split(" => ")) for line in input.splitlines() + ) + } + + def permutations(grid: Grid) -> set[Grid]: + def iter_rotated(grid: Grid) -> Iterator[Grid]: + for _ in range(4): + yield grid + grid = tuple( + tuple(grid[len(grid) - y - 1][x] for y in range(len(grid[0]))) + for x in range(len(grid)) + ) + + def iter_flipped(grid: Grid) -> Iterator[Grid]: + yield grid + yield grid[::-1] + yield tuple(line[::-1] for line in grid) + + return { + flip for rotated in iter_rotated(grid) for flip in iter_flipped(rotated) + } + + def normalize_rules(raw_rules: dict[Grid, Grid]) -> dict[Grid, Grid]: + res: dict[Grid, Grid] = {} + for pattern, grid in raw_rules.items(): + for perm in permutations(pattern): + res[perm] = grid + return res + + def enhance(rules: dict[Grid, Grid], rounds: int) -> list[list[bool]]: + def step(grid: list[list[bool]]) -> list[list[bool]]: + is_even = len(grid) % 2 == 0 + step_size = 2 if is_even else 3 + next_size = len(grid) * (step_size + 1) // step_size + res = [[False for _ in range(next_size)] for _ in range(next_size)] + + for x, y in itertools.product(range(len(grid) // step_size), repeat=2): + elem = tuple( + tuple( + grid[x * step_size + dx][y * step_size + dy] + for dy in range(step_size) + ) + for dx in range(step_size) + ) + new_grid = rules[elem] + for dx, line in enumerate(new_grid): + for dy, p in enumerate(line): + res[x * len(new_grid) + dx][y * len(line) + dy] = p + + return res + + grid = [[p for p in line] for line in parse_pattern(START)] + for _ in range(rounds): + grid = step(grid) + return grid + + raw_rules = parse(input) + norm_rules = normalize_rules(raw_rules) + art = enhance(norm_rules, 18) + return sum(itertools.chain.from_iterable(art)) + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d21/ex2/input b/2017/d21/ex2/input new file mode 100644 index 0000000..4f409b0 --- /dev/null +++ b/2017/d21/ex2/input @@ -0,0 +1,108 @@ +../.. => #.#/#../... +#./.. => #.#/#.#/.#. +##/.. => #../.##/##. +.#/#. => ..#/..#/..# +##/#. => ##./.#./#.. +##/## => .../.#./.#. +.../.../... => ..#./##.#/#.##/##.# +#../.../... => #.##/..../##../###. +.#./.../... => ##.#/###./#.##/#.#. +##./.../... => ##.#/#.##/.#../##.# +#.#/.../... => ...#/..#./.#.#/.### +###/.../... => ..../#..#/#.##/##.. +.#./#../... => .#../.#.#/..#./.### +##./#../... => ..##/#.##/#.../#.#. +..#/#../... => .##./#.##/.#../##.. +#.#/#../... => #.../.##./...#/###. +.##/#../... => #.##/..##/.#.#/##.. +###/#../... => #..#/...#/..#./...# +.../.#./... => .###/.#../..#./#### +#../.#./... => ####/#.../.###/##.. +.#./.#./... => ####/#..#/####/#..# +##./.#./... => .#../..##/..##/#..# +#.#/.#./... => .#.#/#.##/#.#./.#.# +###/.#./... => #.##/#.../###./#..# +.#./##./... => ###./#.../..../.### +##./##./... => #.##/###./...#/###. +..#/##./... => .#.#/###./..#./#... +#.#/##./... => #.#./##../##../..## +.##/##./... => ..../..#./.##./.#.# +###/##./... => #.../.#../#.#./#..# +.../#.#/... => ##../#.##/.##./.##. +#../#.#/... => #.#./##.#/.###/.### +.#./#.#/... => ..../####/####/.#.# +##./#.#/... => #.##/.###/##../#... +#.#/#.#/... => ###./..##/#.#./#### +###/#.#/... => .##./..../###./.... +.../###/... => ###./.##./##../.### +#../###/... => .#../#.../###./...# +.#./###/... => #.#./#.#./####/###. +##./###/... => ...#/##../###./#.#. +#.#/###/... => .#.#/#.#./..#./.##. +###/###/... => ..../#.##/...#/##.. +..#/.../#.. => ...#/#.##/#..#/..## +#.#/.../#.. => ..#./##.#/.#.#/..## +.##/.../#.. => ..##/##../#.#./#.## +###/.../#.. => #.##/###./...#/.##. +.##/#../#.. => ##../#.##/##.#/##.. +###/#../#.. => #.##/##../.##./.#.# +..#/.#./#.. => #..#/##../.###/#.#. +#.#/.#./#.. => .###/#.##/#.#./#### +.##/.#./#.. => #.#./#.../#.##/...# +###/.#./#.. => .##./.#.#/#.#./.#.# +.##/##./#.. => .###/.#.#/...#/#.#. +###/##./#.. => .###/#.##/#.##/#.#. +#../..#/#.. => #.../##../.##./###. +.#./..#/#.. => #.../#.##/#.../###. +##./..#/#.. => ####/..../##.#/.### +#.#/..#/#.. => ..##/##.#/#.##/#..# +.##/..#/#.. => ..#./##.#/#.#./..## +###/..#/#.. => ..##/...#/#..#/#..# +#../#.#/#.. => #.../..../#.../#.## +.#./#.#/#.. => ##../####/.#.#/##.. +##./#.#/#.. => .#../..../#.../.##. +..#/#.#/#.. => .#../.#.#/.#.#/..#. +#.#/#.#/#.. => ..#./#.##/#.#./..## +.##/#.#/#.. => #.##/..##/...#/#### +###/#.#/#.. => .##./.#.#/###./#..# +#../.##/#.. => ..##/.###/.#../##.# +.#./.##/#.. => #.##/.##./.##./.### +##./.##/#.. => .##./.#../..../..## +#.#/.##/#.. => ..../#.#./##.#/###. +.##/.##/#.. => #..#/..../##.#/..#. +###/.##/#.. => ####/##.#/#..#/##.. +#../###/#.. => #.#./###./.###/#... +.#./###/#.. => ##.#/#..#/#.##/..#. +##./###/#.. => ..#./...#/..##/...# +..#/###/#.. => .#.#/..../..##/..## +#.#/###/#.. => #..#/..#./.#../..#. +.##/###/#.. => .#.#/..../#..#/...# +###/###/#.. => #.##/##../.#../.... +.#./#.#/.#. => ..../####/.###/.#.# +##./#.#/.#. => #.##/...#/####/#### +#.#/#.#/.#. => ..#./##../..../#... +###/#.#/.#. => ####/#.##/###./...# +.#./###/.#. => ...#/..#./...#/..#. +##./###/.#. => .##./#.../.#.#/.### +#.#/###/.#. => ..../..../.#.#/#.## +###/###/.#. => ..#./###./##.#/.... +#.#/..#/##. => .###/.#../..#./#### +###/..#/##. => #.##/..#./#..#/.... +.##/#.#/##. => #.../##../####/.##. +###/#.#/##. => ###./..#./..#./##.. +#.#/.##/##. => #.../##../##.#/#.## +###/.##/##. => ..#./#..#/#.##/#### +.##/###/##. => .#.#/.###/...#/.#.. +###/###/##. => ####/..../.#.#/...# +#.#/.../#.# => ##.#/#..#/.##./...# +###/.../#.# => #.#./.#../...#/...# +###/#../#.# => .#.#/.#../##../##.. +#.#/.#./#.# => ###./#.../####/.#.# +###/.#./#.# => ##../#.#./..##/##.# +###/##./#.# => ####/..../###./.##. +#.#/#.#/#.# => ...#/.##./##../.### +###/#.#/#.# => ..#./.##./##.#/.#.. +#.#/###/#.# => ...#/..../..#./...# +###/###/#.# => #.#./#.#./##../.... +###/#.#/### => #.../##.#/.#../..#. +###/###/### => ##../..#./##../..#. diff --git a/2017/d22/ex1/ex1.py b/2017/d22/ex1/ex1.py new file mode 100755 index 0000000..3aab299 --- /dev/null +++ b/2017/d22/ex1/ex1.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python + +import dataclasses +import enum +import sys +from typing import NamedTuple + + +class Point(NamedTuple): + x: int + y: int + + +class Direction(enum.Enum): + UP = Point(-1, 0) + DOWN = Point(1, 0) + LEFT = Point(0, -1) + RIGHT = Point(0, 1) + + def left(self) -> "Direction": + x, y = self.value + return Direction(Point(-y, x)) + + def right(self) -> "Direction": + x, y = self.value + return Direction(Point(y, -x)) + + def apply(self, p: Point) -> Point: + dx, dy = self.value + return Point(p.x + dx, p.y + dy) + + +@dataclasses.dataclass +class Carrier: + pos: Point + dir: Direction + + def burst(self, infected: set[Point]) -> bool: + infect = False + if self.pos in infected: + self.dir = self.dir.right() + infected.remove(self.pos) + else: + self.dir = self.dir.left() + infected.add(self.pos) + infect = True + self.pos = self.dir.apply(self.pos) + return infect + + +def solve(input: str) -> int: + def parse(input: str) -> set[Point]: + return { + Point(x, y) + for x, line in enumerate(input.splitlines()) + for y, c in enumerate(line) + if c == "#" + } + + infected = parse(input) + middle = len(input.splitlines()) // 2 + carrier = Carrier(Point(middle, middle), Direction.UP) + total = 0 + + for _ in range(10000): + total += carrier.burst(infected) + return total + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d22/ex1/input b/2017/d22/ex1/input new file mode 100644 index 0000000..216f837 --- /dev/null +++ b/2017/d22/ex1/input @@ -0,0 +1,25 @@ +#..#...#.#.#..#.#...##.## +.....##.#....#.#......#.# +..#.###.#.#######.###.#.# +.......#.##.###.###..##.# +#....#...#.###....##..... +#.....##.#########..#.#.# +.####.##..#...###.##...#. +#....#..#.###.##.#..##.#. +#####.#.#..#.##..#...#### +##.#.#..#.#....###.###### +.##.#...#...##.#.##..#### +...#..##.#.....#.#..####. +#.##.###..#######.#..#.#. +##....##....##.#..#.##..# +##.#.#.#.##...##.....#... +.#####..#.#....#.#######. +####....###.###.#.#..#..# +.###...#.###..#..#.#####. +#.###..#.#######.#.#####. +.##.#.###.##.##.#.#...#.. +######.###.#.#.##.####..# +##..####.##..##.#...##... +...##.##...#..#..##.####. +#.....##.##.#..##.##....# +#.#..####.....#....#.###. diff --git a/2017/d22/ex2/ex2.py b/2017/d22/ex2/ex2.py new file mode 100755 index 0000000..b4e6a62 --- /dev/null +++ b/2017/d22/ex2/ex2.py @@ -0,0 +1,96 @@ +#!/usr/bin/env python + +import collections +import dataclasses +import enum +import sys +from typing import NamedTuple + + +class Point(NamedTuple): + x: int + y: int + + +class Direction(enum.Enum): + UP = Point(-1, 0) + DOWN = Point(1, 0) + LEFT = Point(0, -1) + RIGHT = Point(0, 1) + + def left(self) -> "Direction": + x, y = self.value + return Direction(Point(-y, x)) + + def right(self) -> "Direction": + x, y = self.value + return Direction(Point(y, -x)) + + def flip(self) -> "Direction": + x, y = self.value + return Direction(Point(-x, -y)) + + def apply(self, p: Point) -> Point: + dx, dy = self.value + return Point(p.x + dx, p.y + dy) + + +class State(enum.StrEnum): + CLEAN = "." + WEAKENED = "W" + FLAGGED = "F" + INFECTED = "#" + + +@dataclasses.dataclass +class Carrier: + pos: Point + dir: Direction + + def burst(self, infected: dict[Point, State]) -> bool: + infect = False + match infected[self.pos]: + case State.CLEAN: + self.dir = self.dir.left() + infected[self.pos] = State.WEAKENED + case State.WEAKENED: + infected[self.pos] = State.INFECTED + infect = True + case State.FLAGGED: + self.dir = self.dir.flip() + infected[self.pos] = State.CLEAN + case State.INFECTED: + self.dir = self.dir.right() + infected[self.pos] = State.FLAGGED + self.pos = self.dir.apply(self.pos) + return infect + + +def solve(input: str) -> int: + def parse(input: str) -> set[Point]: + return { + Point(x, y) + for x, line in enumerate(input.splitlines()) + for y, c in enumerate(line) + if c == "#" + } + + infected: dict[Point, State] = collections.defaultdict(lambda: State.CLEAN) + for p in parse(input): + infected[p] = State.INFECTED + middle = len(input.splitlines()) // 2 + carrier = Carrier(Point(middle, middle), Direction.UP) + total = 0 + + for _ in range(10000000): + total += carrier.burst(infected) + return total + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d22/ex2/input b/2017/d22/ex2/input new file mode 100644 index 0000000..216f837 --- /dev/null +++ b/2017/d22/ex2/input @@ -0,0 +1,25 @@ +#..#...#.#.#..#.#...##.## +.....##.#....#.#......#.# +..#.###.#.#######.###.#.# +.......#.##.###.###..##.# +#....#...#.###....##..... +#.....##.#########..#.#.# +.####.##..#...###.##...#. +#....#..#.###.##.#..##.#. +#####.#.#..#.##..#...#### +##.#.#..#.#....###.###### +.##.#...#...##.#.##..#### +...#..##.#.....#.#..####. +#.##.###..#######.#..#.#. +##....##....##.#..#.##..# +##.#.#.#.##...##.....#... +.#####..#.#....#.#######. +####....###.###.#.#..#..# +.###...#.###..#..#.#####. +#.###..#.#######.#.#####. +.##.#.###.##.##.#.#...#.. +######.###.#.#.##.####..# +##..####.##..##.#...##... +...##.##...#..#..##.####. +#.....##.##.#..##.##....# +#.#..####.....#....#.###. diff --git a/2017/d23/ex1/ex1.py b/2017/d23/ex1/ex1.py new file mode 100755 index 0000000..1e87b46 --- /dev/null +++ b/2017/d23/ex1/ex1.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python + +import enum +import sys +from typing import NamedTuple + + +class Op(enum.StrEnum): + SET = "set" + SUB = "sub" + MUL = "mul" + JNZ = "jnz" + + +class Instruction(NamedTuple): + op: Op + x: str + y: str + + @classmethod + def from_str(cls, input: str) -> "Instruction": + op, *rest = input.split() + return cls(Op(op), *rest) + + +def solve(input: str) -> int: + def parse(input: str) -> list[Instruction]: + return [Instruction.from_str(line) for line in input.splitlines()] + + def resolve(y: str | None, registers: dict[str, int]) -> int: + assert y is not None # Sanity check + try: + return int(y) + except ValueError: + return registers[y] + + instructions = parse(input) + registers = {chr(ord("a") + i): 0 for i in range(8)} + + ip = 0 + total_muls = 0 + while True: + if ip < 0 or ip >= len(instructions): + break + instr = instructions[ip] + ip += 1 + match instr.op: + case Op.SET: + registers[instr.x] = resolve(instr.y, registers) + case Op.SUB: + registers[instr.x] -= resolve(instr.y, registers) + case Op.MUL: + registers[instr.x] *= resolve(instr.y, registers) + total_muls += 1 + case Op.JNZ: + if resolve(instr.x, registers) != 0: + ip += resolve(instr.y, registers) - 1 # Account auto-increment + return total_muls + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d23/ex1/input b/2017/d23/ex1/input new file mode 100644 index 0000000..30fb446 --- /dev/null +++ b/2017/d23/ex1/input @@ -0,0 +1,32 @@ +set b 81 +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 diff --git a/2017/d23/ex2/ex2.py b/2017/d23/ex2/ex2.py new file mode 100755 index 0000000..cf18a89 --- /dev/null +++ b/2017/d23/ex2/ex2.py @@ -0,0 +1,55 @@ +#!/usr/bin/env python + +import enum +import math +import sys +from typing import NamedTuple + + +class Op(enum.StrEnum): + SET = "set" + SUB = "sub" + MUL = "mul" + JNZ = "jnz" + + +class Instruction(NamedTuple): + op: Op + x: str + y: str + + @classmethod + def from_str(cls, input: str) -> "Instruction": + op, *rest = input.split() + return cls(Op(op), *rest) + + +def solve(input: str) -> int: + def parse(input: str) -> list[Instruction]: + return [Instruction.from_str(line) for line in input.splitlines()] + + def is_prime(n: int) -> bool: + if n % 2 == 0: + return False + for i in range(3, math.isqrt(n), 2): + if n % i == 0: + return False + return True + + instructions = parse(input) + start = int(instructions[0].y) * 100 + 100000 + end = start + 17000 + + total = 0 + for n in range(start, end + 1, 17): + total += not is_prime(n) + return total + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d23/ex2/input b/2017/d23/ex2/input new file mode 100644 index 0000000..30fb446 --- /dev/null +++ b/2017/d23/ex2/input @@ -0,0 +1,32 @@ +set b 81 +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 diff --git a/2017/d24/ex1/ex1.py b/2017/d24/ex1/ex1.py new file mode 100755 index 0000000..82509fc --- /dev/null +++ b/2017/d24/ex1/ex1.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python + +import functools +import sys +from typing import NamedTuple + + +class Component(NamedTuple): + left: int + right: int + + @classmethod + def from_str(cls, input: str) -> "Component": + return cls(*map(int, input.split("/"))) + + def remaining_port(self, connection: int) -> int: + if connection == self.left: + return self.right + elif connection == self.right: + return self.left + assert False # Sanity check + + +def solve(input: str) -> int: + def parse(input: str) -> list[Component]: + return [Component.from_str(line) for line in input.splitlines()] + + @functools.cache + def strongest_bridge(start: int, components: frozenset[Component]) -> int: + candidates = {c for c in components if start in c} + if not candidates: + return 0 + return max( + sum(c) + strongest_bridge(c.remaining_port(start), components - {c}) + for c in candidates + ) + + components = parse(input) + assert len(set(components)) == len(components) # Sanity check + return strongest_bridge(0, frozenset(components)) + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d24/ex1/input b/2017/d24/ex1/input new file mode 100644 index 0000000..383dcb0 --- /dev/null +++ b/2017/d24/ex1/input @@ -0,0 +1,57 @@ +25/13 +4/43 +42/42 +39/40 +17/18 +30/7 +12/12 +32/28 +9/28 +1/1 +16/7 +47/43 +34/16 +39/36 +6/4 +3/2 +10/49 +46/50 +18/25 +2/23 +3/21 +5/24 +46/26 +50/19 +26/41 +1/50 +47/41 +39/50 +12/14 +11/19 +28/2 +38/47 +5/5 +38/34 +39/39 +17/34 +42/16 +32/23 +13/21 +28/6 +6/20 +1/30 +44/21 +11/28 +14/17 +33/33 +17/43 +31/13 +11/21 +31/39 +0/9 +13/50 +10/14 +16/10 +3/24 +7/0 +50/50 diff --git a/2017/d24/ex2/ex2.py b/2017/d24/ex2/ex2.py new file mode 100755 index 0000000..28540eb --- /dev/null +++ b/2017/d24/ex2/ex2.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python + +import itertools +import sys +from collections.abc import Iterator +from typing import NamedTuple + + +class Component(NamedTuple): + left: int + right: int + + @classmethod + def from_str(cls, input: str) -> "Component": + return cls(*map(int, input.split("/"))) + + def remaining_port(self, connection: int) -> int: + if connection == self.left: + return self.right + elif connection == self.right: + return self.left + assert False # Sanity check + + +class Bridge(NamedTuple): + components: tuple[Component, ...] + head: int + + @property + def length(self): + return len(self.components) + + @property + def strength(self): + return sum(itertools.chain.from_iterable(self.components)) + + def add(self, c: Component) -> "Bridge": + assert self.head in c # Sanity check + return Bridge(self.components + (c,), c.remaining_port(self.head)) + + +def solve(input: str) -> int: + def parse(input: str) -> list[Component]: + return [Component.from_str(line) for line in input.splitlines()] + + def longest_bridge(components: set[Component]) -> Bridge: + def build_bridges( + bridge: Bridge, components: set[Component] + ) -> Iterator[Bridge]: + candidates = {c for c in components if bridge.head in c} + if not candidates: + yield bridge + return + for c in candidates: + yield from build_bridges(bridge.add(c), components - {c}) + + return max( + build_bridges(Bridge((), 0), components), + key=lambda b: (b.length, b.strength), + ) + + components = parse(input) + assert len(set(components)) == len(components) # Sanity check + bridge = longest_bridge(set(components)) + return bridge.strength + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d24/ex2/input b/2017/d24/ex2/input new file mode 100644 index 0000000..383dcb0 --- /dev/null +++ b/2017/d24/ex2/input @@ -0,0 +1,57 @@ +25/13 +4/43 +42/42 +39/40 +17/18 +30/7 +12/12 +32/28 +9/28 +1/1 +16/7 +47/43 +34/16 +39/36 +6/4 +3/2 +10/49 +46/50 +18/25 +2/23 +3/21 +5/24 +46/26 +50/19 +26/41 +1/50 +47/41 +39/50 +12/14 +11/19 +28/2 +38/47 +5/5 +38/34 +39/39 +17/34 +42/16 +32/23 +13/21 +28/6 +6/20 +1/30 +44/21 +11/28 +14/17 +33/33 +17/43 +31/13 +11/21 +31/39 +0/9 +13/50 +10/14 +16/10 +3/24 +7/0 +50/50 diff --git a/2017/d25/ex1/ex1.py b/2017/d25/ex1/ex1.py new file mode 100755 index 0000000..b57dc3f --- /dev/null +++ b/2017/d25/ex1/ex1.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python + +import collections +import enum +import sys +from typing import NamedTuple + + +class Direction(enum.StrEnum): + LEFT = "left" + RIGHT = "right" + + def apply(self, pos: int) -> int: + return pos + 1 if self == Direction.RIGHT else pos - 1 + + +class Rules(NamedTuple): + zero_write: bool + zero_dir: Direction + zero_transition: str + + one_write: bool + one_dir: Direction + one_transition: str + + @classmethod + def from_str(cls, input: str) -> "Rules": + lines = input.splitlines() + return cls( + zero_write=bool(int(lines[1][-2])), + zero_dir=Direction(lines[2][:-1].split()[-1]), + zero_transition=lines[3][-2], + one_write=bool(int(lines[5][-2])), + one_dir=Direction(lines[6][:-1].split()[-1]), + one_transition=lines[7][-2], + ) + + def apply(self, tape: dict[int, bool], pos: int) -> tuple[str, int]: + if tape[pos]: + tape[pos] = self.one_write + return self.one_transition, self.one_dir.apply(pos) + else: + tape[pos] = self.zero_write + return self.zero_transition, self.zero_dir.apply(pos) + + +def solve(input: str) -> int: + def parse_rules(input: str) -> tuple[str, Rules]: + assert input.startswith("In state ") # Sanity check + state, lines = input.split("\n", 1) + return state[-2], Rules.from_str(lines) + + def parse(input: str) -> tuple[str, int, dict[str, Rules]]: + first, *rest = input.split("\n\n") + raw_state, raw_checksum = first.splitlines() + rules = {state: rules for state, rules in map(parse_rules, rest)} + return raw_state[-2], int(raw_checksum.split()[-2]), rules + + state, iterations, rules = parse(input) + pos = 0 + tape: dict[int, bool] = collections.defaultdict(bool) + for _ in range(iterations): + state, pos = rules[state].apply(tape, pos) + return sum(tape.values()) + + +def main() -> None: + input = sys.stdin.read() + print(solve(input)) + + +if __name__ == "__main__": + main() diff --git a/2017/d25/ex1/input b/2017/d25/ex1/input new file mode 100644 index 0000000..199164f --- /dev/null +++ b/2017/d25/ex1/input @@ -0,0 +1,62 @@ +Begin in state A. +Perform a diagnostic checksum after 12683008 steps. + +In state A: + If the current value is 0: + - Write the value 1. + - Move one slot to the right. + - Continue with state B. + If the current value is 1: + - Write the value 0. + - Move one slot to the left. + - Continue with state B. + +In state B: + If the current value is 0: + - Write the value 1. + - Move one slot to the left. + - Continue with state C. + If the current value is 1: + - Write the value 0. + - Move one slot to the right. + - Continue with state E. + +In state C: + If the current value is 0: + - Write the value 1. + - Move one slot to the right. + - Continue with state E. + If the current value is 1: + - Write the value 0. + - Move one slot to the left. + - Continue with state D. + +In state D: + If the current value is 0: + - Write the value 1. + - Move one slot to the left. + - Continue with state A. + If the current value is 1: + - Write the value 1. + - Move one slot to the left. + - Continue with state A. + +In state E: + If the current value is 0: + - Write the value 0. + - Move one slot to the right. + - Continue with state A. + If the current value is 1: + - Write the value 0. + - Move one slot to the right. + - Continue with state F. + +In state F: + If the current value is 0: + - Write the value 1. + - Move one slot to the right. + - Continue with state E. + If the current value is 1: + - Write the value 1. + - Move one slot to the right. + - Continue with state A. diff --git a/2017/d25/ex2/ex2.py b/2017/d25/ex2/ex2.py new file mode 100755 index 0000000..918e0ec --- /dev/null +++ b/2017/d25/ex2/ex2.py @@ -0,0 +1,9 @@ +#!/usr/bin/env python + + +def main() -> None: + print("There is no part two...") + + +if __name__ == "__main__": + main() diff --git a/2017/d25/ex2/input b/2017/d25/ex2/input new file mode 100644 index 0000000..199164f --- /dev/null +++ b/2017/d25/ex2/input @@ -0,0 +1,62 @@ +Begin in state A. +Perform a diagnostic checksum after 12683008 steps. + +In state A: + If the current value is 0: + - Write the value 1. + - Move one slot to the right. + - Continue with state B. + If the current value is 1: + - Write the value 0. + - Move one slot to the left. + - Continue with state B. + +In state B: + If the current value is 0: + - Write the value 1. + - Move one slot to the left. + - Continue with state C. + If the current value is 1: + - Write the value 0. + - Move one slot to the right. + - Continue with state E. + +In state C: + If the current value is 0: + - Write the value 1. + - Move one slot to the right. + - Continue with state E. + If the current value is 1: + - Write the value 0. + - Move one slot to the left. + - Continue with state D. + +In state D: + If the current value is 0: + - Write the value 1. + - Move one slot to the left. + - Continue with state A. + If the current value is 1: + - Write the value 1. + - Move one slot to the left. + - Continue with state A. + +In state E: + If the current value is 0: + - Write the value 0. + - Move one slot to the right. + - Continue with state A. + If the current value is 1: + - Write the value 0. + - Move one slot to the right. + - Continue with state F. + +In state F: + If the current value is 0: + - Write the value 1. + - Move one slot to the right. + - Continue with state E. + If the current value is 1: + - Write the value 1. + - Move one slot to the right. + - Continue with state A.