heh
| -rw-r--r-- | Cargo.toml | 2 | ||||
| -rw-r--r-- | src/inp.txt | 2000 | ||||
| -rw-r--r-- | src/main.rs | 168 | ||||
| -rw-r--r-- | src/util.rs | 4 |
4 files changed, 1112 insertions, 1062 deletions
@@ -10,7 +10,7 @@ atools = "0.1.5" hinted = "0.0.1" itertools = "0.12.0" memchr = "2.6.4" -radsort = "0.1.1" +# radsort = "0.1.1" rustc-hash = { version = "2.1.0", features = ["nightly"] } [profile.release] lto = true diff --git a/src/inp.txt b/src/inp.txt index 86c469c..cd46e29 100644 --- a/src/inp.txt +++ b/src/inp.txt @@ -1,1000 +1,1000 @@ -53906 14872 -35867 86182 -61313 43656 -23620 85315 -96434 90834 -70853 80045 -81024 46279 -74096 30947 -95143 21374 -58372 72621 -31935 12389 -49854 67579 -86609 43656 -89364 63407 -74266 14457 -52098 88395 -96964 96234 -49393 18203 -50534 68865 -15769 46056 -80451 31396 -74551 38740 -91700 86211 -93090 21692 -17501 34796 -16736 15045 -46056 37224 -75968 93912 -97701 75324 -28685 71207 -51195 28531 -74109 81902 -61906 30947 -61901 26456 -27949 31935 -80781 31935 -45869 63848 -76250 91948 -92161 88896 -92901 95050 -84135 56554 -36445 85108 -91602 50652 -14229 42099 -26675 53544 -31839 80370 -79535 80370 -36655 21828 -68093 10740 -49052 30403 -38777 87413 -10824 94461 -38968 80370 -63083 81902 -95411 55634 -69727 81902 -93596 70536 -52663 31396 -65999 68564 -59890 40680 -66226 43656 -94707 13595 -13899 79022 -25283 66901 -79946 33564 -80152 25915 -78359 38273 -28675 78207 -51401 24017 -21022 36263 -96272 97201 -22693 27307 -21648 97487 -46178 97979 -17466 60051 -82661 25915 -39775 93045 -48681 60562 -47199 86686 -30660 85874 -18285 69937 -55428 50228 -98906 13151 -86638 57318 -48728 66727 -78268 80222 -32191 18625 -75544 96995 -38692 27814 -51182 72597 -24564 14872 -78193 43656 -14830 98087 -51013 91047 -40389 62018 -80648 34735 -25915 48415 -75278 30947 -73740 76891 -47851 63741 -30743 93960 -30074 81716 -47127 31935 -66658 14609 -81404 13612 -78838 34796 -98988 56858 -61023 95843 -44069 79751 -58419 22373 -88253 33943 -10357 68564 -65647 75968 -56636 49814 -96378 30947 -61167 62569 -34557 37250 -64400 55670 -51614 31935 -12364 73721 -71834 63350 -11214 15293 -84197 67580 -46279 19369 -85435 25099 -87320 40454 -28341 16142 -65983 71345 -94333 79356 -66873 33981 -50771 31396 -91221 54646 -63742 34796 -99770 46279 -37731 80045 -20432 21157 -39263 76136 -99080 56687 -29242 32173 -93843 46279 -53850 18085 -68835 75005 -43354 40124 -48317 29974 -89326 97201 -75434 22373 -70473 25915 -63394 48255 -38016 68564 -78812 80045 -93261 58244 -20014 64971 -11924 11780 -21157 53840 -24802 89474 -55997 38754 -87219 25915 -20988 14872 -39639 28428 -29464 51586 -61672 78802 -96734 65594 -55764 14925 -52658 49815 -66306 81902 -19417 81326 -20305 17693 -33337 15419 -58435 11780 -88271 55426 -72760 70448 -62171 41784 -35420 75968 -85791 80045 -86874 28578 -47942 65464 -65982 43656 -54647 80045 -76794 72117 -71733 56858 -99560 97201 -57741 48255 -19684 38234 -82201 34796 -56598 81902 -78671 30403 -57520 81902 -28794 80045 -70718 36673 -12894 89585 -80420 88896 -75179 80045 -37527 94333 -68865 89708 -54484 70184 -22482 90992 -28787 99580 -23380 50228 -24819 34018 -23039 26417 -34777 30403 -38089 98258 -40091 90301 -65391 81902 -64984 88288 -47803 19170 -54239 23050 -89439 35940 -64104 15601 -42956 50228 -60123 42357 -62887 87025 -50719 56858 -60551 40959 -32730 73652 -80253 80045 -31948 19369 -33170 19369 -43380 88896 -66465 54668 -68963 25915 -74433 40124 -42272 11349 -45882 51505 -62636 26196 -97266 11220 -23083 96587 -27358 76569 -44481 81623 -11314 30728 -64712 57329 -95360 81902 -43100 83387 -22699 72297 -95680 57279 -12170 30947 -51297 59853 -48255 49975 -23355 34796 -55264 96834 -43234 95736 -58663 66937 -24467 93318 -31569 39898 -91720 37056 -17395 97253 -87456 68460 -61344 13591 -50316 50228 -50313 82900 -33328 41831 -70391 98955 -40124 13612 -80337 21838 -66151 17628 -14932 57871 -34464 48255 -18164 70338 -84969 14872 -30898 68564 -76526 11873 -41007 43656 -46997 52069 -74614 79205 -97267 80045 -13525 56858 -83587 23900 -70678 51307 -96613 20308 -39592 31396 -44365 91747 -44840 87970 -99891 90134 -58567 33972 -58851 43402 -87728 30403 -84786 37227 -13329 32507 -93229 90123 -43915 54511 -83982 27814 -19567 88896 -33979 87294 -40170 43656 -97852 48739 -45928 94736 -74935 28466 -97730 84011 -74826 95244 -68208 24359 -53130 92198 -41725 78978 -57089 11780 -98073 35872 -23652 11780 -97201 41849 -87155 71818 -88640 79810 -37745 21157 -14056 18175 -95658 56858 -48755 94333 -13619 45286 -81792 43656 -78244 31396 -30595 45955 -84035 95996 -60013 20192 -30544 13612 -94649 59748 -12343 75968 -37130 68564 -89486 25915 -30879 45350 -82252 76332 -72035 81326 -96757 39307 -12935 22093 -76836 96648 -13035 65492 -64394 56858 -68916 43656 -81474 31396 -90650 28126 -56290 94702 -35758 56672 -58825 41199 -55904 89015 -39969 10888 -45804 80699 -39063 33732 -71312 14949 -98164 36727 -83970 87031 -63860 15740 -19008 80045 -36342 59349 -75519 71974 -70509 49833 -15393 80714 -98995 85760 -80265 80370 -95001 42793 -28863 71880 -65186 59896 -91417 37319 -18213 74991 -46598 73652 -17350 56836 -77732 24742 -43239 96665 -91884 73652 -98023 17915 -30603 81326 -50132 72240 -14657 26301 -89888 46056 -29239 11140 -33269 80370 -86498 43609 -32323 18944 -87234 14483 -91312 84354 -55972 28052 -95671 44209 -47556 94712 -64231 92523 -40010 52869 -78889 65874 -65672 11780 -66829 27274 -58976 23077 -52684 99212 -12106 78809 -40894 79813 -73516 30403 -98758 90245 -78558 81135 -91842 43656 -36111 56858 -81902 57457 -57016 15315 -62322 31642 -12386 91620 -46583 57818 -16653 33234 -90664 13612 -99386 20422 -53504 20328 -88729 68564 -33262 89807 -22996 31396 -49944 21157 -71217 57474 -89409 93464 -81592 54135 -98029 75431 -54437 89337 -73652 85178 -44888 25915 -16495 94354 -20340 30974 -69933 86157 -23100 19122 -27337 71603 -81726 94579 -36381 80370 -13641 39385 -93685 32550 -73502 76018 -95815 49303 -26455 31396 -89509 94333 -43369 60492 -78840 66925 -84665 19369 -27145 30682 -20548 34796 -51087 84227 -24544 89081 -72048 57058 -70432 19369 -66825 40124 -30189 35430 -87176 89952 -69550 68440 -52304 27404 -22031 76800 -41939 80370 -30725 67957 -71537 22373 -53526 66477 -65213 20836 -51028 68564 -87427 46945 -18856 88896 -12027 68564 -28641 39589 -49464 72751 -15977 74910 -58898 75990 -39039 62184 -67691 57314 -60850 49736 -13012 48255 -84069 97201 -32568 68865 -96125 34796 -25181 74948 -73744 43656 -56977 21157 -80745 22716 -68012 34796 -47755 48255 -78533 29915 -23621 68865 -11353 43088 -84311 18978 -88935 20794 -54337 87927 -62396 46248 -83685 15158 -13519 40474 -89345 94333 -91712 56672 -54787 22373 -41442 19369 -57095 49689 -73305 68074 -40222 34796 -18020 22841 -62794 75878 -26368 14901 -11475 40124 -75682 74145 -75582 80370 -97642 80045 -43518 31396 -61262 14872 -65073 35575 -64250 41578 -41393 43656 -43735 59876 -52143 68865 -20553 52835 -88338 81503 -92669 68564 -97752 18898 -30830 94320 -13583 13612 -34097 54600 -95952 66295 -20902 68564 -35750 86876 -79359 57300 -19583 43538 -77422 21157 -63966 88896 -25403 57385 -71523 94333 -93579 11780 -35074 68865 -75840 48255 -44626 47096 -72438 60433 -54577 68564 -66690 56858 -41197 40124 -13612 30497 -25465 86662 -55920 78165 -89969 67123 -58286 70389 -43656 97260 -82249 43755 -30657 96171 -39157 31396 -18894 32478 -11955 10307 -43927 43656 -16920 50228 -29478 94333 -77022 17632 -33574 30653 -52142 59421 -43400 58568 -20918 21157 -59754 48255 -54975 74539 -45684 99214 -70895 33500 -68461 80541 -96575 26109 -39266 97201 -85211 31396 -62831 13612 -58008 89741 -52256 30403 -67407 31396 -11485 36725 -73476 43656 -28411 20566 -58997 24742 -50228 94333 -22731 49787 -60317 31396 -50387 56858 -47125 76520 -32596 40699 -86041 60374 -17153 93396 -47001 97796 -95064 33317 -60020 31715 -97079 13537 -95911 97201 -42771 30403 -31218 94333 -58019 68797 -27090 34796 -42716 89943 -13624 67333 -14872 41803 -15763 99088 -59386 71716 -29342 81287 -85955 37265 -92842 20523 -84757 75968 -76051 41922 -27595 46689 -74249 81347 -76224 97201 -46211 43561 -16434 31396 -95096 74640 -65042 56672 -89918 56858 -57601 94333 -45468 11780 -38812 25915 -51266 55991 -90185 75968 -75344 13612 -68758 50890 -54439 97201 -49138 21157 -72447 14872 -24656 40124 -94875 22613 -22373 43361 -44518 10761 -43686 60879 -32501 92097 -42849 13612 -96366 97201 -97664 18585 -75951 45638 -87742 55727 -26127 90094 -49148 29249 -44880 27199 -48351 34429 -49769 19369 -53310 31313 -97615 97700 -44217 70925 -35613 84873 -37774 33414 -37902 67163 -20513 31396 -22058 11456 -69695 43656 -12676 43656 -78546 44430 -93366 88781 -43779 79593 -42156 94062 -26825 30947 -61551 58309 -79992 80045 -70690 92191 -60303 33345 -47232 40844 -27958 75524 -65137 43403 -81422 88896 -90350 36543 -82498 21157 -34184 84567 -49629 78699 -52046 74192 -68564 51586 -74624 88896 -84055 35652 -78176 24112 -19369 81326 -29606 25074 -56381 25915 -41549 94333 -98646 77958 -10620 49796 -71804 80045 -70094 21157 -22047 43771 -26955 75968 -20916 46087 -70578 37746 -31396 85745 -38677 76047 -51586 80370 -33206 98673 -40909 76255 -86670 80370 -71335 29711 -90443 51586 -76017 23086 -64608 80370 -46749 24742 -89544 43543 -41857 46279 -42787 58205 -73907 67100 -62371 14872 -24918 98011 -51056 79598 -39721 34796 -67175 25915 -30403 36271 -64135 11780 -76994 78902 -66535 15092 -59032 94333 -75831 31184 -30096 11447 -23350 36783 -59712 31994 -38953 28778 -60226 50228 -82255 72338 -36348 68865 -76999 31396 -10164 31710 -15946 18029 -77511 30248 -95601 35450 -18152 49627 -32771 25915 -20404 31396 -61545 46279 -34285 87463 -84576 40124 -51878 51586 -88769 21515 -63200 81326 -68855 28497 -65595 53032 -48751 33285 -60205 88896 -96460 11367 -89979 80045 -11820 22373 -83877 11780 -20276 40124 -19438 81902 -94604 22373 -14247 67536 -89516 18681 -44165 80045 -58766 24742 -11456 26306 -11021 89613 -55218 59490 -74173 22743 -46876 80459 -63558 31935 -64004 24611 -72949 68564 -57103 62092 -95565 68564 -16875 38769 -81532 62587 -15150 22210 -74559 88896 -62813 61861 -29326 13612 -81512 68564 -49315 98827 -76486 25915 -42556 26135 -72818 52964 -24550 43656 -64689 70406 -73254 19265 -93699 68564 -53060 87046 -93009 81902 -39670 67615 -61036 67631 -45671 40413 -41312 80045 -49132 81902 -38018 91922 -71072 75073 -22869 27664 -55057 27814 -24941 27959 -84686 71679 -28947 74369 -25665 57496 -78778 23305 -14626 64462 -37342 43855 -59900 22416 -43285 98392 -92065 90613 -20557 68564 -45377 56858 -14449 55097 -97504 57790 -53508 80370 -39463 40124 -40767 68564 -64115 84078 -57015 38612 -10790 11780 -39059 48255 -97687 23054 -80185 40124 -42697 21344 -84512 30568 -88890 60974 -26625 25773 -23057 60654 -86691 40392 -19977 27723 -20885 35230 -82396 92827 -95747 20497 -70767 19369 -36646 58544 -55189 97285 -88283 66161 -61823 88896 -81975 98911 -96120 58310 -27584 13612 -29777 93381 -83851 81326 -68499 14896 -71570 80045 -83910 33934 -72510 19369 -29704 53243 -58042 94333 -10666 66744 -25477 38332 -46516 71338 -11780 81760 -60016 44454 -76061 88896 -45171 42137 -16022 31396 -43064 80370 -74174 94333 -75767 10987 -94834 41861 -43884 25498 -73079 82486 -49817 93178 -84945 88121 -37442 68004 -75204 52912 -88344 57580 -78701 55148 -79748 40124 -74272 34796 -32505 73879 -74004 40075 -97970 88796 -43969 81902 -34338 27951 -56706 51586 -70683 13612 -51351 41678 -15913 56236 -34587 11780 -27138 92114 -81477 85239 -37366 34453 -15828 68865 -29715 56858 -97538 80370 -16406 55594 -68956 18077 -21846 88896 -76758 36425 -59057 25915 -43840 82650 -67201 41066 -49427 70257 -41187 14872 -36754 24495 -23374 47449 -39822 68865 -66021 70536 -42652 43243 -24842 88896 -24280 24742 -88867 28631 -89241 86694 -23591 62627 -59260 48813 -50605 28489 -24330 84536 -25882 80024 -35776 62926 -54141 50228 -75680 40124 -84399 31530 -78265 80370 -87750 13922 -36091 75968 -27814 53359 -63430 34796 -63140 85215 -81319 68564 -89693 56300 -44939 86165 -78937 88896 -34287 57052 -60288 22373 -39738 97201 -66981 15143 -93466 85978 -43980 23335 -50378 24498 -65798 80045 -33048 70536 -74858 51594 -41614 26882 -78108 87082 -95851 39538 -55294 27347 -91809 51930 -18352 94333 -92466 41921 -20367 84778 -94765 21872 -70536 59326 -83561 73432 -80370 31935 -70474 44396 -96303 44391 -12398 89041 -23108 25947 -53083 21157 -99161 24742 -85566 15007 -32257 68564 -46065 50230 -63630 14872 -42636 97201 -94467 24904 -62773 20111 -56672 21157 -25886 30403 -13184 92058 -24742 94333 -69268 31396 -22434 77346 -12984 76178 -27117 43656 -10754 57124 -24873 75979 -39306 25915 -68234 84487 -17427 40124 -97952 20994 -33373 94333 -76327 14493 -45608 30947 -48367 22373 -54606 71965 -24726 25915 -10736 35060 -13367 53242 -95178 56815 -27296 56858 -68391 64705 -98563 38903 -20841 80370 -20931 11515 -60534 73652 -44041 90593 -39264 69166 -12510 77382 -65091 14872 -73605 78383 -43630 50005 -80045 78823 -17857 66318 -71065 13612 -67686 73652 -40016 11780 -96408 29692 -34507 81902 -10576 22373 -62967 92940 -68474 80370 -67663 49384 -27217 70536 -45444 94221 -16316 80370 -53563 68564 -76310 56858 -56858 69426 -96287 30104 -80543 29117 -82061 84323 -44833 20029 -58023 41150 -93209 56858 -19697 60022 -53393 23230 -97156 56858 -13069 63002 -72142 31122 -57137 49844 -48483 38592 -72970 69357 -93043 25915 -56792 15463 -73491 80370 -95205 30947 -84502 92854 -50655 31935 -81326 86245 -30947 21547 -81476 73108 -54995 86542 -88684 80659 -16695 77477 -67522 17661 -14444 24717 -48169 93182 -77304 62773 -10022 22838 -85352 68865 -88896 34807 -80571 21157 -75090 87473 -45429 57148 -38945 91244 -70349 21157 -13113 56858 -34796 40124 -32195 49176 -28292 57181 -14969 84572 +16 19 21 24 21 +15 18 19 22 24 25 25 +80 81 83 84 87 89 93 +6 7 8 9 10 13 18 +60 62 61 64 66 67 +76 79 81 84 82 80 +70 73 72 74 74 +67 68 71 74 73 77 +56 57 60 59 61 64 67 74 +37 38 39 40 40 43 +90 92 95 95 96 97 94 +80 83 86 86 86 +44 47 49 49 51 54 58 +69 71 74 74 81 +66 68 72 75 77 +34 35 39 41 38 +58 60 63 67 70 72 72 +43 46 47 51 52 53 56 60 +35 36 37 41 44 50 +63 64 67 69 71 72 78 80 +19 22 23 30 28 +20 21 24 30 30 +75 78 80 83 90 91 95 +16 17 20 22 23 29 31 36 +22 21 24 26 28 +87 84 87 88 86 +48 46 48 51 51 +40 37 40 43 44 48 +77 75 78 79 81 84 86 91 +43 41 40 42 44 +32 30 31 32 35 32 29 +87 84 81 83 83 +43 41 44 47 48 45 49 +49 48 51 53 54 57 54 61 +68 66 69 69 72 75 77 +9 7 8 10 10 12 11 +77 74 77 77 77 +5 2 4 4 8 +34 33 36 36 42 +11 9 13 15 18 21 +22 21 22 23 27 24 +68 67 70 74 77 80 82 82 +87 86 87 91 95 +26 23 27 28 30 35 +23 20 21 28 31 +85 83 89 92 95 96 94 +32 31 38 40 40 +40 38 40 41 43 49 51 55 +22 19 21 23 29 35 +86 86 89 91 94 96 98 +72 72 73 75 77 78 76 +42 42 45 48 49 49 +41 41 43 46 48 49 53 +35 35 37 39 41 43 48 +85 85 86 83 86 87 88 91 +20 20 19 20 21 20 +13 13 14 13 15 18 18 +48 48 50 48 50 54 +26 26 23 25 30 +62 62 64 66 66 67 +31 31 32 34 35 35 38 37 +11 11 14 14 14 +6 6 9 12 12 13 14 18 +5 5 5 7 9 14 +87 87 91 92 95 96 99 +61 61 65 67 64 +77 77 78 82 85 85 +48 48 52 53 57 +69 69 70 74 81 +29 29 30 32 35 37 44 46 +52 52 54 56 57 63 64 62 +42 42 45 47 48 51 57 57 +57 57 60 65 69 +28 28 33 34 36 38 44 +41 45 48 50 52 55 58 +79 83 84 85 86 83 +69 73 74 77 79 81 81 +14 18 21 22 24 28 +26 30 33 36 43 +8 12 13 12 14 16 17 +84 88 91 92 89 92 94 92 +30 34 32 34 37 37 +3 7 5 6 9 10 14 +31 35 37 35 36 39 45 +59 63 65 66 67 67 68 +13 17 18 21 21 18 +72 76 78 79 82 82 82 +4 8 9 9 10 13 14 18 +42 46 49 49 52 57 +17 21 24 28 29 +64 68 69 73 75 78 77 +57 61 63 67 67 +11 15 19 22 26 +78 82 83 87 94 +34 38 45 47 48 49 52 +44 48 55 56 55 +45 49 52 57 59 60 63 63 +48 52 55 62 66 +14 18 20 27 34 +9 15 18 20 23 25 +4 10 11 12 14 17 18 16 +4 10 12 13 15 17 17 +18 23 24 25 27 31 +27 33 35 37 40 42 47 +16 22 24 21 22 25 27 +42 49 52 49 47 +39 44 45 43 44 46 49 49 +29 36 39 42 45 46 43 47 +37 42 43 42 45 48 53 +54 60 63 63 65 +66 71 73 76 76 79 77 +56 62 62 64 66 66 +69 76 79 82 83 83 87 +77 84 84 87 93 +76 81 85 87 89 91 94 +70 77 81 82 85 87 89 87 +14 20 22 26 28 28 +56 61 65 68 72 +78 85 86 90 95 +22 29 30 36 39 40 42 44 +18 25 27 28 35 38 39 38 +15 21 24 25 27 34 34 +21 26 27 33 36 40 +42 48 49 51 52 57 64 +97 96 94 91 88 89 +74 71 68 67 66 66 +67 64 61 58 57 53 +63 61 60 57 54 52 51 44 +41 40 37 35 34 35 33 +53 50 52 51 52 +31 28 25 24 23 20 22 22 +25 24 27 25 24 21 18 14 +82 80 78 81 78 76 70 +36 33 32 31 31 30 +66 65 65 64 63 61 59 61 +82 79 79 76 75 72 72 +94 92 90 90 87 85 81 +22 19 19 18 13 +39 38 35 34 31 29 25 24 +72 70 67 63 62 59 58 59 +28 26 23 19 19 +24 22 20 16 13 10 9 5 +63 62 58 57 52 +27 25 23 21 16 14 13 11 +76 74 72 65 64 65 +25 23 17 14 14 +78 77 76 69 68 67 64 60 +78 76 70 68 66 65 63 58 +63 66 64 63 62 61 60 57 +61 63 60 57 54 53 56 +90 92 89 88 85 83 82 82 +41 42 39 38 36 35 33 29 +15 17 15 12 11 9 3 +77 79 78 77 80 79 76 +43 46 44 45 44 41 42 +27 30 33 32 32 +18 19 16 13 16 12 +16 17 14 12 10 8 11 6 +77 80 80 78 75 +31 34 34 32 34 +3 6 5 5 2 2 +76 78 75 72 69 69 65 +43 45 43 43 41 35 +36 39 38 35 33 29 28 +81 84 81 77 75 78 +40 42 38 36 33 32 29 29 +29 31 29 28 25 24 20 16 +80 82 79 76 75 71 69 63 +49 52 50 47 46 41 39 +78 79 78 77 72 69 66 67 +12 13 11 5 5 +12 15 14 9 8 7 6 2 +44 46 45 43 38 36 30 +61 61 58 56 53 52 50 47 +35 35 32 31 28 30 +46 46 44 42 42 +80 80 77 76 72 +63 63 60 59 56 55 49 +77 77 80 78 75 73 +52 52 51 52 53 +12 12 11 9 10 10 +60 60 63 61 58 54 +67 67 69 67 62 +95 95 93 93 92 91 +53 53 52 52 51 48 51 +67 67 67 66 63 63 +11 11 10 7 7 3 +26 26 23 21 20 20 13 +80 80 78 74 73 72 70 67 +54 54 53 49 52 +63 63 62 59 55 53 53 +61 61 57 55 51 +69 69 68 66 62 55 +85 85 82 75 74 73 72 +47 47 42 40 39 37 34 36 +60 60 59 58 55 52 47 47 +77 77 75 69 68 64 +53 53 52 45 44 43 36 +43 39 36 33 30 29 26 23 +65 61 60 57 54 56 +55 51 48 47 45 42 42 +52 48 47 45 43 41 37 +29 25 24 23 22 17 +38 34 37 35 32 29 28 26 +24 20 19 17 15 14 17 20 +33 29 28 25 26 26 +38 34 35 32 31 27 +33 29 27 24 23 24 23 17 +36 32 32 31 29 26 +13 9 8 5 3 1 1 4 +6 2 1 1 1 +78 74 73 72 72 70 69 65 +44 40 40 37 30 +41 37 33 30 28 +88 84 83 79 78 75 73 74 +12 8 4 2 1 1 +65 61 57 54 50 +85 81 77 74 68 +76 72 66 64 62 +97 93 90 87 81 84 +64 60 53 51 48 48 +56 52 50 45 43 39 +56 52 49 43 40 39 36 30 +60 53 51 50 48 +36 31 29 26 25 24 26 +55 50 48 47 44 42 41 41 +90 85 83 81 77 +89 82 80 77 70 +56 49 52 49 47 +9 3 5 3 6 +9 4 5 4 4 +18 12 14 12 8 +66 59 58 56 53 54 49 +97 90 88 87 84 82 82 80 +60 55 53 52 52 54 +12 5 5 4 4 +26 19 19 16 15 11 +68 62 60 57 56 56 54 47 +59 52 48 46 45 42 +21 16 12 9 12 +99 92 91 88 84 81 81 +58 52 49 45 43 42 38 +48 41 38 36 35 34 30 23 +31 26 24 18 15 13 +18 13 11 6 8 +99 93 88 85 84 84 +85 78 75 73 68 64 +86 81 75 72 66 +5 9 7 9 6 +22 26 29 32 29 31 34 34 +22 29 30 32 34 39 45 +52 45 43 41 40 37 32 34 +30 32 34 39 43 +11 16 18 22 22 +68 72 75 76 79 82 86 85 +69 74 76 80 84 +65 65 63 61 57 55 53 48 +26 25 20 17 15 12 9 +27 29 28 23 21 16 +49 53 54 57 59 62 66 +72 72 73 80 82 85 +44 47 49 50 54 55 57 57 +20 19 17 19 21 +18 18 22 24 26 29 31 32 +48 52 54 54 56 56 +72 76 79 78 84 +64 60 57 53 48 +48 44 42 40 37 33 32 35 +52 52 48 45 44 41 38 40 +70 76 78 80 80 87 +55 54 52 48 44 +39 38 32 31 30 28 22 +8 8 5 1 1 +43 48 50 53 57 +29 32 29 27 28 26 27 +44 49 51 53 60 61 65 +16 17 10 8 8 +36 31 28 25 22 20 20 17 +61 54 51 44 42 39 35 +96 90 88 84 83 80 79 +55 58 57 53 50 50 +41 46 48 50 48 54 +7 11 12 14 14 17 23 +79 82 81 77 74 77 +34 28 24 21 22 +77 81 84 86 87 90 94 94 +67 74 77 79 80 83 87 90 +94 90 89 84 80 +65 64 63 60 60 +40 44 47 48 52 53 55 +35 35 34 33 32 29 27 29 +75 82 85 88 90 89 88 +92 88 88 87 86 83 80 +99 92 91 86 84 +11 9 6 2 5 +57 57 50 48 44 +21 18 19 23 28 +30 33 31 31 30 27 23 +22 22 22 19 14 +61 57 54 54 52 45 +81 81 84 82 80 +93 93 90 88 91 90 87 83 +29 36 40 41 47 +84 83 84 86 86 88 +33 37 38 45 52 +56 60 64 65 66 67 71 +98 98 97 96 96 94 94 +96 89 86 84 77 74 68 +51 45 44 43 36 36 +66 63 70 73 79 +84 79 76 74 71 71 70 70 +27 23 22 19 14 13 10 5 +91 84 83 82 80 76 +13 14 17 20 21 26 26 +96 97 96 93 89 88 86 +39 45 46 43 44 45 +87 80 76 75 72 72 +86 88 89 90 92 93 92 91 +45 45 48 50 57 54 +65 63 65 67 70 67 +38 34 32 32 30 27 25 21 +17 21 23 20 22 23 26 28 +65 66 71 74 75 +6 6 9 12 15 18 22 +76 78 76 78 80 81 88 +32 25 24 22 21 21 +49 50 52 54 54 56 59 59 +16 13 16 19 20 27 29 +71 71 73 71 70 +75 69 66 66 65 58 +58 55 57 60 61 64 66 73 +52 53 53 51 48 47 44 +28 21 19 17 15 11 7 +57 60 61 64 61 63 65 69 +8 5 8 9 10 14 +65 58 56 56 53 51 54 +68 67 69 76 80 +21 21 21 18 17 14 12 8 +67 66 68 66 63 60 54 +26 27 25 20 19 17 14 16 +31 30 33 34 34 +53 55 59 62 60 +96 92 95 93 90 89 83 +13 18 20 23 26 25 29 +36 36 36 35 36 +61 61 58 56 52 49 46 +38 35 38 41 38 40 39 +11 14 13 10 8 2 +11 14 15 21 18 +50 53 53 51 48 47 47 +27 25 23 25 23 26 +48 48 45 44 45 42 45 +66 62 61 59 54 51 53 +6 6 8 5 7 8 9 14 +67 67 65 68 69 72 72 +66 64 65 66 73 70 +94 92 94 95 97 99 +90 89 86 85 84 82 82 78 +77 77 81 84 87 87 +31 36 38 36 39 41 42 42 +73 69 68 67 68 66 66 +14 12 11 10 7 4 6 6 +29 25 23 22 19 17 16 10 +80 81 80 78 79 79 +9 7 7 9 10 7 +88 84 81 79 79 79 +27 28 29 32 33 35 38 42 +13 11 8 8 6 5 8 +30 37 44 47 48 +53 54 61 62 65 68 74 +54 54 51 44 41 38 35 35 +38 38 35 30 28 25 28 +83 90 93 96 94 +70 74 75 77 80 81 82 +71 74 71 70 68 67 68 +35 35 33 36 39 41 45 +32 29 27 23 23 +45 49 51 53 56 61 61 +20 20 18 19 13 +64 60 58 55 52 +2 2 2 5 6 10 +68 69 67 65 63 63 +67 71 74 76 79 79 +42 37 34 32 31 29 28 26 +24 28 31 35 37 40 42 49 +79 77 80 80 80 +58 51 50 50 47 46 42 +23 28 35 37 40 43 43 +26 30 31 33 32 35 39 +53 55 58 58 62 +88 82 80 78 75 77 75 +70 68 69 70 70 72 79 +27 29 31 31 34 36 38 39 +3 4 5 6 7 9 9 15 +46 45 41 38 37 31 +51 52 52 55 56 59 56 +69 68 69 73 73 +78 84 86 86 88 89 93 +14 7 9 8 6 3 6 +28 26 24 22 19 16 15 11 +86 86 81 78 75 74 +50 43 39 37 35 30 +54 60 64 65 66 63 +54 54 51 48 45 +74 74 74 77 80 81 82 81 +21 21 18 14 11 9 5 +49 54 55 57 57 +79 78 77 75 74 71 70 64 +15 15 18 20 22 +98 91 90 89 87 86 89 83 +95 91 90 86 83 +69 67 71 73 76 80 +57 57 55 52 52 +74 74 75 78 82 79 +47 43 45 43 41 40 38 39 +70 74 76 78 79 79 83 +88 88 90 93 94 93 +83 83 85 86 86 +55 56 57 58 62 64 67 68 +86 86 91 94 94 +75 76 77 74 77 80 83 86 +51 58 58 61 64 67 68 68 +67 63 62 61 59 56 54 50 +97 91 89 88 87 86 79 +54 47 45 48 47 44 42 38 +22 19 22 19 20 22 26 +29 26 24 23 20 13 11 11 +3 3 4 6 10 16 +52 56 57 62 66 +94 96 96 93 88 +70 70 70 73 76 79 79 +36 35 38 37 36 33 31 +31 31 32 35 36 41 +17 14 12 11 8 6 9 5 +96 92 91 84 81 81 +76 72 68 66 65 65 +1 4 6 7 11 12 16 +57 52 51 50 52 51 51 +1 5 6 7 9 12 15 14 +66 66 69 68 70 +47 43 42 35 33 +59 57 59 64 65 67 67 +19 19 19 21 24 26 28 +51 51 49 47 40 +52 50 47 47 47 +92 89 89 86 81 +34 30 33 32 29 25 +6 10 13 14 15 20 +51 47 46 44 40 37 36 32 +62 58 58 56 53 50 52 +26 26 24 23 20 19 15 +36 34 33 32 25 24 23 26 +53 54 55 56 56 +29 29 30 27 25 25 +70 75 77 79 85 +18 18 16 16 13 10 +80 85 87 90 91 94 +56 59 56 56 54 52 55 +22 18 20 18 17 16 +12 10 11 14 18 20 21 22 +94 96 93 86 85 83 +54 56 54 52 51 53 51 49 +72 75 71 69 66 64 58 +41 45 46 47 54 56 59 +71 71 75 77 81 +14 17 16 13 15 11 +4 4 9 10 12 16 +71 72 73 76 79 76 +67 69 66 67 65 58 +32 34 31 30 29 28 25 23 +38 35 35 33 30 +48 49 52 55 58 59 62 67 +45 51 52 52 54 +28 34 36 38 38 36 +12 15 11 9 5 +36 33 36 37 41 43 46 43 +91 90 86 83 80 77 +48 55 61 63 64 66 65 +55 55 56 56 62 +64 64 59 58 57 56 50 +16 13 11 10 7 5 8 +26 26 31 32 34 41 +58 57 50 48 46 42 +23 19 18 16 17 +15 18 21 24 27 29 32 +63 60 57 55 54 52 51 +84 82 80 77 76 75 +40 42 44 46 48 51 53 +91 89 86 84 81 +37 40 41 42 45 46 49 52 +90 87 85 84 83 81 78 76 +9 10 11 13 14 16 +35 34 31 28 26 24 22 21 +96 95 93 90 87 86 +45 46 49 52 53 55 57 +54 56 58 61 62 +44 47 48 50 53 +79 81 82 83 86 87 +15 17 18 19 22 25 26 27 +26 29 30 33 35 +90 89 87 86 85 83 80 +79 80 82 83 84 +42 45 47 49 50 +89 88 87 86 83 82 80 +22 23 24 26 28 +51 48 46 43 40 37 36 +1 3 5 7 8 10 12 +87 84 83 81 80 78 77 76 +76 74 71 69 66 63 61 +20 21 23 26 29 31 33 34 +48 47 45 42 41 40 39 +56 53 52 51 48 45 42 39 +31 32 34 36 39 41 +40 37 35 33 30 27 25 22 +76 74 73 70 68 66 +67 64 62 60 59 +35 34 31 28 25 22 +93 91 90 88 85 83 81 +7 10 11 14 16 17 20 +37 35 34 31 28 +58 59 60 63 64 66 68 +13 12 11 9 7 5 4 1 +80 77 74 73 71 68 65 63 +93 91 89 88 87 84 81 79 +87 84 81 78 77 75 +70 72 75 78 80 82 83 86 +69 67 65 63 60 59 56 53 +23 20 17 16 15 +64 65 68 70 71 72 +79 80 81 84 86 +15 18 21 23 25 27 +39 36 35 33 30 27 24 22 +54 53 51 50 47 +68 67 65 63 61 59 +99 97 95 93 92 91 88 +71 68 65 63 61 59 +66 64 63 60 58 57 +51 53 56 58 61 63 +84 87 89 91 92 95 +30 31 34 37 38 39 +57 58 59 61 63 66 +62 64 65 68 70 71 72 73 +23 21 20 17 15 14 12 11 +53 56 58 60 62 63 64 +76 74 72 70 68 66 64 61 +88 85 84 83 80 78 +41 38 37 34 33 31 29 +33 35 37 39 42 45 +34 32 29 26 24 +95 93 90 87 84 82 79 78 +21 24 25 28 31 +83 86 88 91 94 96 98 +83 81 79 78 77 74 71 69 +84 83 80 79 76 75 74 +35 32 31 28 26 23 22 20 +48 46 44 41 38 37 +89 91 93 94 97 99 +14 16 17 18 20 +23 22 19 16 13 10 +78 80 81 82 84 85 88 +25 23 22 21 20 +33 32 29 28 26 24 21 19 +80 78 76 73 72 69 +82 81 79 78 76 73 +54 51 48 45 44 +34 32 29 27 24 21 19 16 +70 69 66 63 61 58 55 52 +29 26 24 21 18 15 13 12 +81 84 86 87 88 91 93 94 +85 82 79 76 73 70 68 67 +82 81 80 77 76 75 72 +42 39 38 36 35 +71 74 77 80 81 83 +32 35 36 37 40 +59 57 54 53 52 +36 33 31 30 27 25 23 +89 86 83 81 79 76 74 73 +76 77 80 83 86 88 +72 70 69 66 65 +27 25 24 21 19 16 +57 60 63 66 69 70 73 75 +34 35 36 38 40 43 46 +26 28 29 32 35 37 38 41 +14 12 9 7 5 +11 14 17 18 21 24 +47 45 42 39 36 33 +52 55 58 59 60 63 +83 81 80 78 76 74 71 70 +10 11 13 15 16 17 20 22 +67 66 63 61 58 55 +83 86 89 91 93 +78 81 84 87 89 +51 49 46 45 42 40 38 +69 66 63 62 61 60 58 +69 70 72 75 78 80 83 +26 29 30 33 34 35 +48 45 43 41 38 +76 73 70 69 67 66 +67 70 73 76 78 81 +48 46 43 41 38 36 +77 75 73 70 69 +4 6 9 10 12 14 17 20 +21 23 24 27 29 30 31 +77 75 74 73 70 69 66 +18 17 16 14 12 +46 44 41 39 38 +29 26 25 24 21 19 +5 7 9 10 11 12 14 15 +67 64 63 60 57 55 54 +26 29 30 31 33 36 38 +27 29 30 32 35 +27 25 23 22 20 19 16 14 +51 53 55 58 59 60 +22 19 17 16 15 12 11 +29 26 23 22 19 16 14 12 +5 7 9 10 13 +51 52 55 56 57 58 59 +46 49 50 53 54 57 58 +48 47 46 45 43 42 40 37 +57 59 61 63 66 69 +60 58 55 53 51 48 47 +89 88 86 85 82 80 79 +47 45 42 41 38 36 34 +93 92 89 86 85 83 +46 49 52 54 55 57 58 60 +47 49 51 54 57 58 61 62 +35 38 41 42 45 48 49 +45 47 49 52 55 58 +60 57 55 52 51 49 47 44 +62 61 58 56 55 53 50 47 +49 47 44 43 40 39 38 37 +56 53 50 49 48 46 44 41 +42 41 39 37 34 33 +57 55 52 50 47 45 +86 83 81 78 75 73 70 +13 12 9 8 7 4 +4 5 6 8 11 13 16 +25 23 22 19 17 16 14 +85 88 89 90 91 92 93 96 +89 88 85 84 81 79 78 +37 39 42 43 46 49 50 +78 76 73 71 68 67 66 +44 45 48 49 51 54 57 +61 60 58 56 55 54 52 50 +13 16 19 20 23 24 +50 47 44 43 41 +21 23 24 27 28 31 34 +22 25 28 31 32 +25 26 29 31 33 35 +87 89 91 93 95 98 +16 17 20 21 23 24 +71 72 75 78 80 81 +79 82 84 85 88 +69 66 63 60 59 57 54 53 +42 40 39 37 34 33 30 +62 64 67 68 70 71 74 +22 24 27 30 33 34 35 +13 11 10 8 7 5 +98 97 94 92 91 90 +24 27 30 32 34 36 38 40 +7 10 11 12 14 15 18 +75 76 79 80 83 86 89 90 +17 14 12 11 8 7 +60 61 62 64 65 66 68 +67 68 71 72 74 +50 53 54 55 56 58 +68 65 64 61 60 58 55 54 +85 84 83 82 79 +54 57 58 60 61 +70 71 74 76 78 81 84 86 +28 27 26 23 22 21 +88 90 91 93 96 99 +39 38 37 36 33 31 30 +41 43 44 46 47 +70 68 65 63 60 59 58 55 +61 60 59 57 55 53 52 49 +54 52 51 50 47 45 44 +11 14 15 18 19 20 21 +76 73 70 68 65 64 61 +45 46 49 52 53 54 +51 50 47 44 41 +27 29 30 33 36 38 39 +27 25 22 21 20 +56 57 58 60 63 65 66 67 +8 6 5 3 1 +51 49 46 45 42 39 38 36 +75 73 71 68 65 +77 78 81 82 83 +74 72 69 68 65 63 61 +19 21 24 25 27 +24 26 28 29 32 33 36 39 +57 56 55 52 49 +63 62 59 57 56 53 +44 47 49 51 53 54 55 +26 25 22 19 16 +78 76 73 71 68 66 +74 72 69 68 66 63 60 +32 33 35 36 37 39 40 41 +24 26 28 29 32 35 +65 63 62 61 60 59 56 54 +53 50 48 47 46 43 +61 58 56 55 53 52 51 49 +48 46 45 43 40 38 +15 12 11 8 6 5 4 +31 28 26 23 22 +54 55 56 58 60 62 63 66 +65 67 69 72 74 76 +46 49 52 54 56 +35 34 32 29 26 +12 11 9 6 4 +19 18 16 13 10 9 +35 32 31 30 29 +51 53 55 56 58 60 62 +23 20 19 16 14 11 +14 17 18 19 21 23 +3 4 7 9 10 13 +37 35 32 31 28 26 24 22 +17 20 21 23 24 27 +37 40 42 44 47 48 51 52 +77 76 73 71 70 69 66 +91 90 88 87 86 85 82 80 +71 68 65 62 59 58 57 +6 8 10 11 13 16 17 +28 29 31 34 37 39 41 44 +2 5 8 9 10 13 15 +67 65 63 62 59 56 53 51 +5 6 9 10 13 16 19 21 +84 86 87 90 91 93 95 97 +46 47 49 52 54 +74 72 71 70 69 +8 9 11 14 17 19 20 23 +28 25 22 19 18 16 15 +29 30 32 33 34 36 37 40 +73 74 75 77 79 82 +37 36 35 34 32 30 27 +15 16 17 18 20 +71 70 69 66 65 63 61 +26 24 21 18 15 +66 69 72 75 78 +94 91 90 89 87 86 +46 48 49 51 52 55 58 +27 24 22 19 17 16 13 +65 66 68 71 73 76 79 +59 58 56 54 53 51 +35 36 39 40 41 43 45 +22 25 27 29 31 34 36 39 +33 35 36 37 38 +88 87 86 84 81 79 +43 40 38 35 32 30 27 +34 36 39 40 43 45 47 +27 26 24 23 21 18 15 14 +56 55 54 52 49 48 45 43 +26 27 30 33 36 39 +87 90 92 93 94 97 98 99 +67 66 63 62 60 58 55 +86 84 81 80 77 75 73 +64 61 58 57 55 +64 65 67 70 72 73 +86 89 92 94 96 99 +50 47 46 44 42 39 37 36 +77 80 82 85 87 89 +69 66 65 63 60 +33 36 37 39 41 43 45 46 +73 74 75 78 81 82 +52 49 48 45 42 41 38 35 +23 20 19 18 17 +34 36 37 38 41 44 +52 54 56 57 60 62 64 67 +15 18 19 20 23 25 +13 12 11 8 6 3 +15 16 18 21 24 26 27 +64 66 69 72 73 76 79 80 +40 41 43 45 46 48 50 52 +24 26 29 31 33 34 36 +52 50 48 46 44 41 40 37 +24 21 18 15 12 11 +77 80 81 82 84 85 87 88 +59 56 55 54 53 +51 50 47 45 42 40 +66 69 70 73 75 77 79 80 +43 46 49 50 51 +62 64 67 69 71 73 75 +66 68 71 74 76 78 79 80 +14 12 9 7 4 +26 29 31 33 36 39 +70 71 74 76 77 +82 83 86 89 91 93 95 +55 52 51 49 48 +18 17 16 13 11 +26 28 29 32 35 36 39 +34 37 38 41 43 44 47 48 +61 64 65 68 69 71 73 +84 86 88 90 93 +52 55 56 59 61 64 65 68 +16 18 21 23 26 28 30 32 +9 12 13 16 18 +20 21 23 26 28 29 30 33 +89 88 85 84 83 80 78 76 +71 70 67 65 62 +36 34 32 29 27 25 +86 84 82 81 78 77 +36 39 40 43 45 47 48 +80 77 76 73 72 71 +24 21 20 19 17 14 12 9 +39 37 35 34 33 30 27 +44 47 50 51 53 56 58 61 +66 64 62 59 58 56 53 50 +62 60 58 56 55 52 +67 69 72 75 77 +62 64 66 67 68 69 70 73 +41 43 45 48 51 +40 42 43 45 47 +33 35 37 38 40 41 +17 18 20 23 24 25 28 30 +16 17 19 21 23 +57 59 61 64 66 68 69 72 +99 96 94 93 90 +76 77 80 81 82 83 85 +21 19 17 15 12 11 +65 68 71 73 76 79 +7 10 11 14 17 20 21 +80 79 76 73 70 +76 79 81 83 84 87 89 +82 81 79 76 75 +50 47 45 44 43 42 40 +97 95 93 91 89 86 83 +88 89 91 93 95 96 +13 11 9 7 6 3 2 +74 76 79 82 85 87 90 93 +93 90 88 87 85 +51 49 46 44 43 40 39 +6 7 10 13 16 17 20 +77 75 73 70 69 66 64 63 +30 33 34 35 38 +49 51 52 54 56 +22 24 25 28 30 +18 19 22 24 27 30 33 35 +83 84 87 89 92 +32 35 36 37 40 43 +18 17 16 14 13 10 9 +53 51 49 46 45 42 +64 65 68 70 72 +72 69 68 65 64 +55 53 50 49 46 43 42 39 +53 52 50 48 45 42 39 +71 73 75 78 81 +83 85 86 89 91 94 +84 85 87 89 92 93 +27 24 23 22 19 18 +19 22 24 26 27 +58 57 56 55 52 49 47 +80 79 76 75 74 +89 86 83 80 77 74 +18 20 21 22 25 +30 29 27 26 24 +79 80 81 82 83 86 88 +83 81 78 77 76 73 71 +7 8 11 13 16 +28 27 26 25 22 +27 30 31 32 34 37 +87 86 83 81 80 79 78 75 +19 21 23 26 27 30 32 +38 40 43 45 48 51 52 55 +1 2 3 5 6 8 10 +24 21 19 16 14 +61 59 56 54 52 51 49 48 +39 37 34 32 30 27 24 +41 43 44 45 47 +86 85 84 81 80 79 76 74 +38 41 44 45 46 49 51 +50 53 54 57 58 59 62 65 +88 89 90 91 94 95 98 99 +73 76 78 81 83 85 +34 35 36 39 41 42 +26 29 30 33 34 +49 46 44 41 40 +66 69 70 73 75 76 77 78 +31 34 37 38 39 41 +58 60 63 65 66 68 +75 73 72 71 70 69 66 63 +68 71 73 76 79 81 +50 52 55 56 57 58 61 64 +98 95 94 93 90 +40 37 34 32 30 +73 76 77 80 81 84 85 +65 64 63 61 59 58 +52 53 55 57 58 60 61 63 +66 69 72 73 74 77 +77 76 73 71 68 67 66 63 +20 17 15 14 12 10 8 +69 67 65 63 62 61 59 56 +89 86 84 82 80 +46 47 48 51 53 54 56 +72 69 68 65 64 61 59 56 +33 35 37 40 43 46 48 +62 60 58 56 55 54 53 50 +99 97 96 93 92 90 88 +39 42 45 47 48 51 +74 75 76 79 81 82 83 86 +64 66 67 69 72 +38 35 34 33 30 +19 16 14 11 9 7 6 5 +66 65 62 60 57 55 +34 32 31 30 27 +76 75 74 73 71 +29 30 33 34 36 38 +33 36 39 41 44 +25 26 28 29 31 33 36 +13 11 8 7 6 4 +94 92 89 86 84 82 +54 51 50 49 46 44 43 41 +2 3 5 8 11 12 15 +30 31 34 36 38 +20 23 26 29 30 32 35 36 +61 64 65 68 71 +51 54 57 60 63 +21 22 23 26 27 30 33 35 +17 20 22 25 28 29 +44 42 39 36 34 31 30 29 +27 24 21 20 19 17 +32 30 29 28 26 24 21 19 +44 45 48 50 53 54 56 +89 86 83 81 80 78 75 72 +70 67 64 63 62 60 +52 53 54 57 59 +27 29 32 33 36 39 40 42 +32 34 35 36 39 42 45 48 +61 64 66 68 71 72 74 +33 30 28 27 24 23 20 +31 29 27 24 21 19 +21 20 19 17 15 12 +42 44 47 50 53 55 56 +77 79 80 83 86 87 88 91 +37 36 33 31 30 28 27 24 +13 16 19 22 25 26 29 +35 34 33 32 29 27 25 +50 52 53 56 57 59 +77 74 72 70 69 68 65 +88 91 92 93 96 +76 78 81 82 83 +64 66 68 69 70 73 74 75 +68 67 66 65 62 60 58 +57 56 55 52 50 48 46 +61 59 58 56 53 +15 12 9 6 5 3 +70 68 66 64 61 60 57 54 +75 78 81 83 84 85 87 +24 26 27 29 30 31 34 36 +53 56 59 60 63 66 +1 3 5 7 8 9 +89 87 84 82 79 78 76 75 +30 27 25 22 21 +37 36 34 31 30 29 +19 18 15 12 11 8 7 6 +60 58 55 54 52 50 48 +7 8 9 12 15 17 +89 90 93 94 96 +27 24 23 22 21 19 17 16 +22 20 19 18 15 14 12 +85 86 88 90 92 95 96 +38 39 40 42 45 +24 25 28 31 33 34 +70 69 68 67 65 63 62 +15 13 12 9 7 4 2 +49 48 45 42 41 +57 60 62 63 66 68 +31 34 37 38 40 +27 28 29 30 33 36 +36 34 31 30 29 28 27 +53 51 49 46 43 +95 92 90 88 85 83 +74 73 72 70 67 64 +23 20 17 16 14 13 +95 92 89 87 85 82 81 79 +36 35 34 32 31 30 29 +50 52 54 57 60 63 64 +58 61 62 63 64 65 68 70 +39 40 42 43 45 48 51 +85 84 81 79 77 74 +45 46 47 49 52 +15 16 17 20 21 22 +86 83 80 78 76 73 70 68 +51 54 57 59 62 +71 73 76 77 79 80 +68 69 72 74 77 78 79 81 +13 11 8 6 5 3 +50 52 53 56 57 59 60 +60 62 64 66 69 +80 83 84 86 88 +8 10 11 14 16 +43 46 47 50 53 56 +55 54 51 50 48 45 43 +66 68 71 74 75 +84 86 87 88 90 93 +38 37 36 33 30 27 26 +29 31 34 37 39 +12 10 9 6 4 +72 69 67 65 63 62 +23 25 26 29 30 32 +70 71 74 77 80 81 84 87 diff --git a/src/main.rs b/src/main.rs index 1e553a3..27253fd 100644 --- a/src/main.rs +++ b/src/main.rs @@ -27,72 +27,122 @@ extern crate test; pub mod util; use atools::prelude::*; -use hinted::HintExt; +// use hinted::HintExt; pub use util::prelude::*; -fn p1(i: &str) -> impl Display { - static mut a: [i32; 1000] = [0; 1000]; - static mut b: [i32; 1000] = [0; 1000]; - let i = i.as_bytes(); - unsafe { - for n in 0..1000 { - let i = C! { &i[n * 14..] }; - let n1 = reading::八( - u64::from_le_bytes(util::nail(C! { &i[..8] })) << 24 | (0x3030303030303030 & !24), - ) as i32; - let n2 = reading::八(u64::from_le_bytes(util::nail(C! { &i[5..]}))) as i32; - - *a.get_unchecked_mut(n) = n1; - *b.get_unchecked_mut(n) = n2; +// 3rd iteration https://godbolt.org/z/bz8qraE56 +fn check(x: &[i8]) -> bool { + let mut array = [0i8; 7]; + let mut set = 0xffu8; + let n = x.array_windows::<2>().map(|[a, b]| a - b).ν(&mut array); + let array = &array[..n]; + match array[0] { + i8::MIN..=-1 => { + array + .iter() + .zip(0..8u8) + .map(|(x, index)| !(-3..=-1).contains(x) as u8 * (1 << index)) + .for_each(|x| set &= !x); + } + 1.. => { + array + .iter() + .zip(0..8u8) + .map(|(x, index)| !(1..=3).contains(x) as u8 * (1 << index)) + .for_each(|x| set &= !x); } - radsort::sort(&mut a); - radsort::sort(&mut b); - a.iter() - .copied() - .zip(b) - .map(|(x, y)| (x - y).abs()) - .sum::<i32>() + 0 => return false, } + set.count_zeros() == 0 } pub fn run(i: &str) -> impl Display { - static mut a: [u32; 1000] = [0; 1000]; - static mut map: [u32; 100000] = [0; 100000]; - let i = i.as_bytes(); - - unsafe { - let x = C! { &i[..14] }; - let (x, y) = (reading::all(&x[0..5]), reading::all::<u32>(&x[8..13])); - *a.get_unchecked_mut(0) = x; - *map.get_unchecked_mut(y as usize) += 1; + let mut items = [0; 8]; + i.行() + .filter(|x| { + let mut len = 0; + let mut s = 0; + for &b in *x { + match b { + b' ' => { + C! { items[len] = s as i8 }; + len += 1; + s = 0; + } + b => s = s * 10 + (b - b'0'), + } + } + C! { items[len] = s as i8 }; + let slice = C! { &items[..len + 1] }; + check(slice) + // (0..items.len()).any(|n| { + // let mut items = items.clone(); + // items.remove(n); + // check2(&items) + // }) + }) + .count() +} - for n in 1..1000 { - let x = util::reading::八( - u64::from_le_bytes(util::nail::<8>(i.get_unchecked(n * 14 - 3..))) - & 0xffffffffff000000, - ); - let y = util::reading::八(u64::from_le_bytes(util::nail::<8>( - i.get_unchecked(n * 14 + 5..), - ))); - *a.get_unchecked_mut(n) = x as u32; - *map.get_unchecked_mut(y as usize) += 1; +fn check_pof(x: &[i8]) -> Result<(), u8> { + let state = match x.first_chunk::<2>().map(|[a, b]| a.cmp(b)).ψ() { + Equal => return Err(0), + Greater => false, + Less => true, + }; + // windows at home 😔 + for i in 1..x.len() as u8 - 1 { + let [a, b] = util::nail(C! { &x[i as usize..=i as usize ] }); + match state { + true if !(1..=3).contains(&(b - a)) => return Err(i), + false if !(1..=3).contains(&(a - b)) => return Err(i), + _ => (), } - a.iter() - .copied() - .map(|x| x * map.get_unchecked(x as usize)) - .sum::<u32>() } + Ok(()) +} +#[no_mangle] +pub fn p2(i: &str) -> impl Display { + let mut items = [0; 8]; - // let (mut a, b) = i - // .行() - // .map(|x| x.κ::<u32>().carr().tuple()) - // .collect::<(Vec<_>, Vec<u32>)>(); - // let mut map = HashMap::<u32, u32>::default(); - // for elem in b { - // map.entry(elem).and_modify(|x| *x += 1).or_insert(1); - // } - // a.sort_unstable(); - // a.iter().map(|x| x * map.get(x).unwrap_or(&0)).sum::<u32>() + i.行() + .filter(|x| { + let mut len = 0; + let mut s = 0; + for &b in *x { + match b { + b' ' => { + C! { items[len] = s as i8 }; + len += 1; + s = 0; + } + b => { + s = s * 10 + (b - b'0'); + } + } + } + C! { items[len] = s as i8 }; + let slice = C! { &items[..len + 1] }; + match check_pof(slice) { + Ok(()) => true, + Err(i) => { + let i = i as usize; + let mut place = [0i8; 7]; + macro_rules! rmv { + ($i:expr, $si: expr) => {{ + place[..$i].copy_from_slice(&slice[..$i]); + let put = &slice[$si..]; + place[$i..$i + put.len()].copy_from_slice(put); + &place[..slice.len() - 1] + }}; + } + check(rmv!(i, i + 1)) // [1, 2, >i<, 4, 5] + || check(rmv!(i + 1, i + 2)) // [1, 2, i, >4<, 5] + || (i > 0 && check(rmv!(i - 1, i))) // [1, >2<, i, 4, 5] + } + } + }) + .count() } fn main() { @@ -102,9 +152,9 @@ fn main() { // s.push_str(i); // } // std::fs::write("src/inp.txt", s); - println!("{}", p1(i)); - // println!("{}", experiment(i)); + // println!("{}", p1(i)); println!("{}", run(i)); + println!("{}", p2(i)); } #[bench] @@ -114,7 +164,7 @@ fn bench(b: &mut test::Bencher) { } #[bench] -fn bench2(b: &mut test::Bencher) { +fn p21(b: &mut test::Bencher) { let i = boxd(include_str!("inp.txt").trim()); - b.iter(|| p1(i)); + b.iter(|| p2(i)); } diff --git a/src/util.rs b/src/util.rs index ad87491..8222f75 100644 --- a/src/util.rs +++ b/src/util.rs @@ -894,8 +894,8 @@ macro_rules! ι { ι!(u64); ι!(usize); -pub fn nail<const N: usize>(x: &[u8]) -> [u8; N] { - unsafe { (x.as_ptr() as *const [u8; N]).read() } +pub fn nail<const N: usize, T: Copy>(x: &[T]) -> [T; N] { + unsafe { (x.as_ptr() as *const [T; N]).read() } } pub mod reading { |