diff --git a/aoc/src/dev/ctsk/aoc/Main.scala b/aoc/src/dev/ctsk/aoc/Main.scala index 81de216..2e3441a 100644 --- a/aoc/src/dev/ctsk/aoc/Main.scala +++ b/aoc/src/dev/ctsk/aoc/Main.scala @@ -23,7 +23,8 @@ val solvers = Map[Int, Solver]( 18 -> Day18, 19 -> Day19, 20 -> Day20, - 21 -> Day21 + 21 -> Day21, + 22 -> Day22 ) def runSolver(solver: Solver, input: os.Path): Unit = diff --git a/aoc/src/dev/ctsk/aoc/days/Day22.scala b/aoc/src/dev/ctsk/aoc/days/Day22.scala new file mode 100644 index 0000000..9a5bcd7 --- /dev/null +++ b/aoc/src/dev/ctsk/aoc/days/Day22.scala @@ -0,0 +1,60 @@ +package dev.ctsk.aoc.days + +import dev.ctsk.aoc.* +import scala.collection.mutable + +object Day22 extends Solver(22): + inline def hash(n: Long): Long = + var secret = n + secret ^= (secret << 6) + secret &= 0xffffff + secret ^= (secret >> 5) + secret &= 0xffffff + secret ^= (secret << 11) + secret &= 0xffffff + secret + + def hash(n: Long, count: Int): Long = + Iterator.iterate(n)(hash).drop(count).next() + + def part1(initial: Seq[Long]): Long = initial.map(hash(_, 2000)).sum + + def part2(initial: Seq[Long]): Long = + inline def update(hash: Int, next: Int): Int = + ((hash << 5) & 0xfffff) | (next + 10) + + val maxHash = Seq(9, 9, 9, 9).fold(0)(update) + val bananas = Array.fill(maxHash)(0) + val seen = mutable.BitSet(maxHash) + + initial.foreach { value => + seen.clear() + val it = Iterator.iterate(value)(hash).map(_.toInt % 10) + var last = it.next() + var window = 0 + + for v <- it.take(3) do + val diff = v - last + last = v + window = update(window, diff) + + for v <- it.take(2000 - 3) do + val diff = v - last + last = v + window = update(window, diff) + if !seen(window) then + seen += window + bananas(window) += v + } + + bananas.max + + override def run(input: os.ReadablePath): (Timings, Solution) = + val initial = os.read.lines(input).map(_.toLong) + val (p1_time, p1_solution) = timed { part1(initial) } + val (p2_time, p2_solution) = timed { part2(initial) } + + ( + Timings(0, p1_time, p2_time), + Solution(Long.box(p1_solution), Long.box(p2_solution)) + ) diff --git a/data/22.ans b/data/22.ans new file mode 100644 index 0000000..7941bb9 --- /dev/null +++ b/data/22.ans @@ -0,0 +1,2 @@ +16894083306 +1925 diff --git a/data/22.in b/data/22.in new file mode 100644 index 0000000..e45a70f --- /dev/null +++ b/data/22.in @@ -0,0 +1,2002 @@ +7621263 +7784226 +9825144 +14702071 +3454535 +2506409 +2426453 +1005230 +2954287 +4780000 +3308848 +16403508 +6745337 +4472406 +4985125 +3884685 +14490487 +15096007 +464514 +6171407 +12049787 +14187871 +5965737 +3031881 +5358561 +3127316 +2674148 +4545846 +13251740 +3297121 +3549313 +11524427 +11371463 +13706949 +6386176 +8029189 +7047751 +9576700 +5254721 +298828 +15534155 +2449356 +15388425 +12609834 +10551253 +12459389 +12398925 +9494329 +3272367 +6674055 +1765638 +2499984 +4638589 +6044195 +12582503 +9075466 +14718537 +4038511 +14369146 +7839817 +15052202 +10937500 +14265403 +9888035 +5985697 +15406965 +12923510 +3839460 +14777516 +13573098 +5227919 +1222978 +14128349 +14866394 +8711304 +6526422 +14238345 +4977755 +14408048 +3967107 +10155796 +8246801 +7022722 +3002724 +3612758 +10776774 +5746166 +16371864 +15979433 +2658434 +721306 +275645 +4086264 +9647280 +14265853 +6431652 +10143807 +10345116 +11870177 +6033577 +8379544 +11656332 +2061684 +5848037 +15147888 +12663852 +1384062 +14915719 +9658812 +12567228 +10656654 +1964959 +479188 +2943323 +14320834 +16164330 +635982 +2859400 +4982157 +4292448 +12926595 +14686783 +3411061 +12619948 +3107960 +9624492 +3942490 +893487 +13309861 +6683253 +4604786 +13531057 +13416110 +1457843 +12233399 +13912221 +1847082 +1936037 +14932472 +1184824 +3697089 +6867902 +2741565 +15457630 +8086351 +15310689 +5382844 +7216882 +3329881 +4685048 +1845464 +5877605 +1221124 +1813070 +11365681 +2780102 +16060848 +3479372 +282648 +5396236 +11491795 +16264184 +11728385 +5451377 +4800747 +6742423 +15297271 +14740841 +10818146 +12488266 +16723253 +4741086 +16404970 +8164353 +1536096 +12170820 +10899502 +5880081 +5440777 +3647879 +5855223 +12254113 +12127281 +6283976 +3948184 +16446322 +13754344 +2488730 +756250 +12298270 +1309675 +6178936 +7693027 +10983107 +11503496 +10891324 +11101320 +13402755 +14186459 +2379122 +2150978 +9943222 +2382503 +15778739 +13657581 +13788628 +766443 +7528587 +8391811 +16270390 +2200161 +6481595 +12617743 +1817526 +13164255 +1775963 +11515018 +8124919 +14033825 +13580766 +13279869 +6666425 +4168242 +13046195 +2025254 +688907 +7885982 +5283351 +9790929 +7216508 +1425494 +5615507 +4319327 +6365570 +10133997 +3327106 +15699259 +5397337 +8394393 +15428663 +9651939 +7183462 +15204892 +15287412 +6898635 +9151677 +7619409 +11184680 +683171 +15713822 +13367890 +11755204 +16419402 +10603228 +1946802 +5104133 +13097788 +7892355 +3426806 +7873150 +4631046 +5166068 +6037474 +8049385 +9439831 +11512754 +8795856 +5006577 +7041115 +10153661 +10960296 +15989020 +6948227 +13521390 +7648934 +8776763 +5901939 +6803772 +5657945 +14865150 +7765693 +4635785 +5035734 +16206140 +9635832 +13871781 +852565 +14152145 +5837365 +14188874 +1889753 +5778229 +10525488 +5413232 +13069241 +16218457 +10088301 +16142627 +681532 +3830994 +5602379 +7737432 +12378520 +15173357 +9700178 +9041594 +15173121 +5834751 +10788172 +3784293 +425576 +12582398 +14620265 +6659241 +4798698 +400201 +6163296 +616376 +16123616 +4484511 +399784 +3241944 +15615904 +12581135 +4106755 +14067257 +13749778 +1124385 +2888740 +15700978 +14805312 +16533096 +16434135 +7783138 +5693160 +4864840 +14011160 +4903241 +585793 +15555821 +9832561 +9814465 +11737036 +8895780 +5330307 +4597029 +9025325 +1892422 +15375896 +2774121 +5062838 +6870820 +4281300 +8773353 +2727221 +3442112 +14839225 +7254020 +11497313 +4464227 +490458 +16127470 +15361544 +2228667 +11517687 +6438299 +2640076 +14818753 +15962256 +7566735 +8799234 +1129521 +9738671 +5620955 +6544105 +949210 +2143445 +3038796 +5420824 +6703925 +5452242 +3476206 +11854992 +15653974 +8998838 +9421929 +8830603 +1392548 +15393259 +3270815 +8744332 +1737133 +10317928 +13456894 +138970 +15896028 +10545195 +13472887 +12815344 +15124974 +10405765 +10830826 +14397677 +15714762 +3553635 +10831602 +4136826 +10282619 +5759661 +10455677 +11391739 +16091918 +4476085 +15038598 +16459577 +6857839 +9723693 +11716703 +5515035 +6855565 +2474608 +3457696 +16195884 +13287566 +5062587 +5477268 +14208782 +15732792 +4667353 +8447563 +14065453 +10426227 +227563 +13684232 +2836524 +2595153 +16677204 +8103068 +8185799 +526310 +14753659 +7584914 +15199736 +4404483 +15373241 +6942373 +11933002 +2396927 +6253326 +13210843 +16579937 +11762831 +10093879 +9862157 +9613513 +5516055 +9762670 +10475537 +3978770 +15204830 +14515620 +725240 +5653068 +1292303 +7755264 +5710293 +10611433 +368840 +6241682 +14787961 +6994660 +5577989 +15931504 +10294354 +11335172 +9389269 +2700037 +8403493 +2226408 +5603576 +10290500 +3914723 +7641174 +6713804 +13660709 +11497224 +8909331 +6734191 +14163564 +1517112 +2674781 +5495504 +7837644 +1895320 +2706109 +4180904 +13404518 +11598440 +16197325 +12419427 +5047119 +10833884 +347373 +10493533 +3883029 +2203862 +5264347 +13710106 +9544779 +10993772 +12012927 +16149430 +768236 +14351193 +13529839 +6146625 +16210160 +14100608 +4888866 +13187165 +1666182 +14274454 +6372977 +6247244 +1345675 +2164394 +13565527 +5139029 +12994108 +3331822 +6357112 +15083097 +2344378 +14221943 +11334978 +9568153 +4760810 +11725050 +12519682 +8855946 +13357856 +12559004 +344445 +16161295 +2005106 +2156271 +12422550 +16613005 +8807674 +5194968 +8304044 +9843664 +3309586 +3928048 +14997973 +3226393 +5532012 +8974909 +8354829 +5383275 +2299198 +4650903 +9743355 +12958122 +2588895 +12637194 +8254146 +238868 +12731908 +8919493 +10517442 +16719182 +11771742 +11003581 +2737679 +2439003 +10029481 +1701901 +4472230 +6418630 +13209392 +12587668 +13139529 +14399346 +2003335 +8785580 +13563922 +14280403 +3882155 +6359581 +3617461 +620684 +13688799 +13254781 +6239069 +16510704 +4149890 +9386248 +11238921 +4362087 +13886883 +13359833 +1241378 +10581832 +13811067 +6203112 +10628315 +6513798 +8441833 +12387263 +3631851 +1475132 +15347169 +14940934 +15624615 +3001647 +11609368 +13035072 +1858478 +8926006 +8101009 +9816062 +5006776 +2310061 +13416806 +15401626 +3345165 +238630 +6174967 +8777550 +9087403 +8666354 +6052307 +5163229 +10007780 +10170978 +11400424 +1721976 +12669890 +10993428 +15553584 +136866 +932634 +16056138 +14361248 +12366073 +14063052 +9003457 +6273617 +16339360 +14308134 +6168172 +14567629 +8625065 +16105431 +9309992 +812553 +1354410 +4953187 +16177273 +1994755 +15871938 +10883180 +15810927 +6183686 +13735401 +11988868 +9537496 +6077547 +14658864 +6446739 +3563062 +4664115 +3782350 +7416653 +9888034 +12396058 +15672672 +14449999 +3561280 +7961009 +2318242 +5178864 +9303896 +3510740 +3688744 +5174242 +4821189 +1417225 +6641180 +13995548 +4978963 +682933 +8988170 +7688581 +14619509 +3723441 +9687024 +11217453 +12419461 +16004222 +2066539 +5570254 +10503629 +5429638 +5082053 +1939329 +13067670 +3420663 +12534269 +260756 +15846825 +7594058 +13995124 +6942576 +2433760 +5874235 +16043249 +4615033 +3592387 +12327632 +4345341 +10711765 +12026850 +1864005 +9809457 +2448086 +10981387 +1416169 +7753008 +14057660 +305712 +5013415 +11899462 +543070 +1527677 +11785648 +3501148 +8564755 +10976486 +2689204 +2124305 +7903499 +1810798 +11102553 +11608318 +4163576 +358204 +13149712 +7783955 +1901503 +7897580 +7947274 +6318054 +14730632 +1245292 +15322603 +9721945 +16548139 +11220016 +2088953 +6176413 +5341625 +7984085 +8354005 +843467 +14883411 +7178677 +4376650 +4444838 +12246329 +13667727 +8641406 +6668550 +16528488 +2498558 +2307554 +3848281 +13966277 +10366273 +4837436 +6710881 +13162530 +13776794 +14467780 +15420643 +6245381 +7360147 +568256 +10400351 +14771824 +16190569 +16304391 +3926090 +2079826 +15266805 +14010305 +9842466 +15140514 +7670974 +12585496 +12498406 +4100221 +1773071 +5443087 +1652506 +10085855 +979543 +14070352 +11397936 +15192055 +14116781 +1981915 +10217631 +14818060 +9278917 +11711620 +3581540 +14235506 +2378601 +1016983 +3856272 +6663666 +1137228 +15978666 +4194265 +9960538 +12785117 +7426881 +6507191 +16047070 +1000900 +8085549 +4704885 +14779454 +6943929 +14489739 +6052881 +3555174 +2243979 +16398862 +4268339 +906641 +11227251 +5289882 +9669806 +7928998 +6321937 +3582057 +7221543 +13843140 +642036 +15020762 +149069 +16350876 +6156301 +8749189 +12497123 +7484481 +484088 +4854190 +1990249 +6270451 +8959972 +4453884 +8726447 +11102505 +2227580 +3442522 +7993304 +8377577 +11467089 +12695841 +4360322 +12765808 +16370693 +9261327 +10426806 +7184272 +14616790 +15751239 +15447588 +7442239 +11267584 +11575399 +11205565 +12374828 +12665351 +8368874 +4409192 +15996180 +10371349 +407350 +1204662 +2716390 +12727094 +4953467 +11228130 +13828531 +10208692 +10688773 +485688 +11998092 +2194575 +2902986 +12006167 +15747151 +1557157 +779803 +5891670 +12786594 +15916337 +12263358 +8907129 +14739179 +12762856 +15799147 +15717750 +5609593 +13708878 +9326958 +4423736 +14242934 +12027576 +1622593 +11108840 +8662158 +9470428 +6561089 +4437561 +12102555 +4439536 +10811923 +2411135 +13133539 +15941606 +4971549 +14506547 +4432315 +8322987 +423490 +13788876 +6852257 +13497099 +5714268 +7810901 +13520152 +8075364 +6166843 +13318441 +7313830 +3439157 +7311754 +1277792 +5415071 +8832355 +12019143 +15504188 +565327 +15174411 +1979545 +12742307 +15816542 +11989440 +12132066 +6478893 +4566065 +2020926 +9813405 +1755083 +16239891 +5351125 +5004807 +16531747 +15940353 +15381546 +3115446 +4277991 +5829844 +1938258 +14683959 +9896526 +5454435 +10618333 +7253813 +7695511 +11944532 +305634 +2281902 +7899157 +1809626 +5368859 +4603303 +7771079 +4517307 +9282950 +11778952 +12301726 +11662242 +5184341 +11224796 +13919730 +9993602 +15875985 +6123082 +13756254 +14988446 +9562422 +12165252 +3726151 +1504617 +8712326 +5523872 +8959443 +917287 +1357247 +10626431 +6534568 +6384872 +1995418 +11557159 +7532067 +2018790 +1836940 +4883839 +3266283 +14230312 +2411065 +16374184 +3095483 +11833224 +10262597 +2582803 +13104199 +1010175 +7165516 +9822628 +12236709 +13900665 +6136782 +16373695 +522852 +10613980 +15816594 +6543478 +719812 +12051311 +8983100 +6972723 +8058593 +3095601 +14711760 +4323079 +291218 +13245933 +13994522 +16233027 +5148128 +4307284 +608057 +3476566 +7495071 +9597334 +1449493 +15222207 +3466080 +11584068 +16495546 +15740863 +11444850 +2188403 +4857486 +10594488 +12743148 +3194978 +10947476 +2615891 +7167736 +5930484 +16620836 +11274601 +10258811 +2777228 +1368571 +7188519 +12609073 +5023206 +9725379 +2387776 +8200944 +12005022 +7739927 +15221228 +5117768 +9229855 +11507266 +7062078 +8607286 +11653581 +5909028 +14007992 +9721529 +9678858 +12948249 +5410619 +1249856 +11064037 +14824962 +15256907 +8344254 +14349038 +318789 +5671466 +3717128 +14579925 +12925450 +1266621 +10376870 +9579270 +7226072 +10835717 +14412490 +3857300 +6835298 +9614315 +473666 +9846093 +2754895 +9312620 +14436751 +7786706 +3406005 +8221302 +6091800 +8630038 +4982318 +8696486 +14341976 +13814135 +11265913 +10653121 +7831178 +10073163 +7872503 +10251531 +12687585 +14293600 +5660596 +11246010 +14064020 +6040181 +13199108 +4594565 +14704747 +14777967 +12566387 +10482899 +7208018 +14594657 +4315980 +6908732 +2351473 +5825351 +6210754 +6232586 +6046466 +15144321 +16255402 +9325831 +325554 +181716 +15953536 +10629963 +12734367 +1118189 +15331496 +8254404 +14257807 +13403900 +7297476 +16621347 +5565639 +8090385 +15471195 +16575536 +8963854 +603276 +249399 +15080451 +936995 +12345581 +14564965 +10439252 +14474371 +5326290 +4008221 +3717893 +6320874 +15342345 +11760794 +4640822 +12114239 +13352669 +9241694 +15375239 +3068089 +1805287 +2311780 +346323 +10251832 +14291177 +7754849 +9683057 +1316451 +13847844 +5067365 +2300431 +6107669 +11657710 +2671872 +593809 +15461361 +6780946 +10017645 +11618222 +9579909 +829645 +13949785 +2144989 +286320 +7604726 +5181765 +13420789 +13167694 +5422865 +7655393 +12579578 +15386559 +5443765 +4745064 +13183506 +10505227 +9710806 +15642977 +8835561 +363535 +9383973 +2771756 +15202785 +12514039 +13174451 +208715 +4582441 +7819831 +1334203 +2404460 +13728813 +768689 +14924093 +2582301 +2876992 +12277132 +2743259 +3424568 +16089094 +8875127 +8720655 +16072235 +14732271 +16062827 +254334 +3572392 +4002134 +2420141 +1585632 +5844620 +2274812 +15474721 +919152 +15267396 +13698103 +486697 +10093204 +12057488 +4688617 +16535640 +14885845 +2434342 +12193854 +475952 +4970449 +2654059 +2381431 +2715066 +7070797 +1414996 +13588815 +12322699 +16407050 +2077052 +16372557 +5337844 +3564106 +7274336 +2480908 +15000227 +14141320 +16196081 +13455775 +12498119 +786180 +12408795 +7484302 +14897166 +1820257 +14054670 +5449017 +5472077 +3369364 +15095215 +180596 +14183039 +1375710 +321005 +13513916 +1923112 +13339043 +2189271 +13496557 +2583161 +13476427 +689667 +12788598 +10893760 +6073411 +3637913 +15461072 +2704063 +9830835 +2083883 +13688491 +15988024 +8777023 +534979 +2072684 +10172130 +8319867 +7672723 +7607982 +881232 +11887270 +8229614 +7562784 +7924193 +3002457 +583748 +4676507 +14859745 +7867315 +4017768 +1635927 +373826 +16665516 +8219811 +5256485 +12566795 +978924 +5483198 +2477584 +6886029 +16001703 +6602930 +6462518 +6558940 +13842075 +392318 +16210816 +8564386 +9398610 +15475022 +1424606 +13938571 +16337524 +12523824 +15101680 +7727046 +4251861 +12940112 +14865996 +4727287 +2185352 +12823079 +7390583 +3067614 +15070738 +6495176 +1142342 +6276500 +6399329 +15565089 +13655204 +3886526 +4537091 +5399587 +8838384 +1152124 +7818855 +4574793 +14058935 +5415422 +5259489 +11351702 +8942916 +6778560 +12196189 +11664559 +1861260 +6387002 +12328063 +15514753 +3489294 +13715889 +14282533 +4984757 +4701639 +3780141 +2904555 +9262632 +544469 +15740747 +6195860 +2204041 +15554408 +14063508 +15531967 +491663 +4813693 +8260969 +2867077 +6035502 +10135132 +12593985 +6895143 +10259384 +440595 +10231285 +9210352 +13847588 +1011502 +2175312 +13068567 +5865755 +9237892 +13052598 +7786554 +15315266 +6641515 +2979041 +12837032 +5916568 +11090873 +10361082 +618371 +10491840 +12551388 +13996366 +650788 +5173189 +12156119 +16253612 +10994727 +6115589 +5783349 +15387710 +14581671 +9511108 +9656091 +2075683 +6908973 +13330764 +5881410 +11342478 +10186735 +13622154 +10437138 +6709052 +13794535 +8961175 +12318287 +4292457 +8430397 +10631126 +15984543 +3939827 +8638586 +1241883 +5983168 +9754259 +10397132 +11557792 +4688036 +6469680 +10644359 +10413708 +15179420 +986172 +9442274 +6339413 +6671265 +3578339 +9193146 +169848 +923138 +12801624 +13080297 +16690860 +11223863 +14229552 +10879860 +11644709 +14187331 +2839774 +10204823 +8819538 +3496409 +9629118 +13647436 +8622090 +15780781 +13213664 +1187997 +15668305 +14622609 +16060399 +8539560 +4172905 +6090653 +293857 +16342226 +178788 +2864695 +3133460 +3098149 +9814041 +9387276 +16422495 +14821227 +2402072 +12306410 +7587170 +4397580 +7184398 +7508759 +7699953 +14212637 +8997371 +16290613 +9250240 +10654863 +8886179 +6452145 +12978933 +2986177 +8518828 +7120823 +9202973 +5360911 +15384894 +13404178 +1580834 +13392234 +4636684 +13397409 +14957708 +9927198 +4484428 +16217096 +13566986 +1942374 +15454833 +7799287 +10144694 +13780861 +10125363 +10273717 +6963667 +11074601 +8619023 +12505311 +11890921 +13499867 +7910699 +8722158 +14813499 +6614185 +8096883 +1484524 +14458197 +6743681 +7596462 +947390 +10632490 +12659980 +10891612 +2077096 +14824642 +680112 +10812005 +7530810 +1296867 +4343879 +1232045 +16455512 +16474442 +9443824 +5525567 +2045760 +215333 +13924487 +15379679 +13004088 +10349923 +13747713 +6291879 +12353334 +10089528 +11872514 +7399589 +14508838 +3917766 +4689595 +10248558 +12600168 +16029256 +4136202 +10718240 +16677629 +10854012 +376708 +6027897 +1845796 +5346052 +10534907 +2130789 +5804437 +7698341 +7367592 +13913268 +6440237 +6891232 +3708142 +15782821 +10444469 +10213433 +16120396 +140643 +4685219 +13748213 +11739319 +13308358 +778453 +5202522 +4300340 +12132945 +5114620 +1048541 +4324384 +4231855 +7006479 +7986808 +6736661 +10474735 +14783265 +10303618 +6225897 +16092956 +502557 +4086756 +13415868 +6754294 +9288032 +8898373 +16559998 +15819336 +14701753 +6717193 +8968122 +9252738 +13400375 +13632364 +4205288 +1517614 +14630718 +5188842 +4278994 +9150798 +3518880 +10511939 +1377264 +675252 +16535020 +7638299 +14523377 +11900937 +15514881 +5084375 +11425258 +8397456 +359076 +13423843 +8810707 +13675095 +3791180 +2278598 +15364921 +12266028 +9925234 +948138 +11274038 +7807879 +12024692 +5975798 +6774506 +12240466 +2847449 +3355233 +6107054 +14942613 +4813012 +14562494 +4856958 +3924989 +6838299 +913690 +4059636 +12845424 +16443554 +2194771 +7840589 +1806340 +15989883 +16631659 +1737700 +13611043 +4531975 +16425714 +3274372 +2803451 +14657462 +13770202 +4761564 +15613156 +12761854 +8849586 +15369791 +12153108 +2121131 +6672369 +10281671 +9420180 +4495249 +10494823 +8688044 +7686215 +5659256 +13647913 +2114947 +9682112 +4810898 +5824900 +14599625 +3695753 +14023155 +15622238 +3588329 +1064367 +5366382 +9301862 +4638624 +9983861 +3647454 +5920493 +9119531 +8644739 +5415985 +11949816 +15842455 +13639180 +542117 +7651896 +7936199 +16631301 +4426332 +4746006 +8795832 +8699141 +4305421 +11838886 +7087818 +11524116 +7538851 +3674274 +4337281 +11540817 +13225650 +1885410 +4747175 +2748766 +6047803 +13191344 +4908835 +10849336 +15957665 +12229494 +9037641 +6779988 +417729 +4219068 +6471110 +10211284 +4106491 +3815535 +9459383 +4003579 +10355052 +16539469 +522165 +12987957 +12208630 +8720195 +3205878 +7433876 +14644112 +7480573 +894718 +5200627 +6949908 +3950735 +8185438 +3005365 +16027429 +6638405 +7647356 +13569168 +8241905 +15550193 +7713592 +14120152 +1169235 +4393989 +6480326 +2771031 +290949 +322965 +1913283 +10797806 +10781886 +11628075 +14080263 +10182946 +10632500 +15581107 +5482353 +6785277 +2594450 +759144 +738344 +911038 +3209859 +5646743 +12660880 +2712929 +10461945 +3630180 +569446 +6435134 +10840023 +1518965 +15401243 +3334317 +13907995 +2925134 +8963760 +8507672 +10125337 +4081566 +10034414 +14709700 +12068408 +7505486 +13264097 +7469625 +13604495 +11118426 +10582816 +11285553 +15991550 +1830054 +9406278 +8846847 +7600342 +9818872 +3785652 +3615559 +13213113 +2132744 +5400938 +3937611 +12397392 +2717530 +14615143 +2286107 +3535737 +6699770 +3057846 +10819971 +4039910 +1014938 +2802899 +11035107 +4946367 +8839880 +15304386 +14964941 +11349614 +4227826 +11740572 +10210754 +16272867 +763604 +1551607 +2453330 +7322028 +6136993 +11223542 +9621646 +15531703 +16703186 +3475035 +15137995 +14132008 +7389930 +10191402 +8281760 +3489168 +11783101 +7104547 +8399669 +6087121 +8044004 +3471712 +13091127 +3918678 +14499076 +7394542 +7489770 +4302520 +15450172 +2813042 +7177852 +5139876 +11613398 +12659248 +7747050 +14573256 +1130916 +7293686 +3458730 +5087149 +3747062 +11729613 +9245105 +12380116 +7375881 +6066493 +4600953 +5114345 +12377862 +4603221 +5338189 +11999697 +8350031 +11871633 +15508544 +1413945 +4613304 +1132521 +4229916 +2852009 +2042028 +13094491 +3545841 +14882197 +15214020 +4544310 +4632290 +11170413 +2253919 +4872828 +6884203 +13789153 +4021028