diff --git a/2022/input/20/input b/2022/input/20/input new file mode 100644 index 0000000..c08c8d7 --- /dev/null +++ b/2022/input/20/input @@ -0,0 +1,5000 @@ +-2446 +159 +2372 +-8651 +-1988 +2932 +-6794 +6255 +8896 +7445 +-2274 +-3523 +5933 +-8573 +3774 +-7920 +-7899 +-165 +-53 +-7363 +-5893 +3575 +8365 +9750 +9921 +2970 +631 +-8572 +-6953 +-1868 +2414 +-7779 +1692 +-3938 +3797 +8689 +322 +-1501 +-1910 +-7579 +3450 +6574 +-4961 +-9201 +-691 +5708 +-3956 +-7050 +1148 +-1386 +-5679 +604 +5563 +7102 +-7938 +5337 +-6760 +-3292 +9899 +-8499 +-8209 +-4835 +-9059 +2042 +7522 +315 +8997 +-4628 +-654 +-4643 +-2837 +-9922 +-7063 +-4770 +-6779 +-2043 +122 +-7732 +-2877 +4715 +-8784 +-2740 +-2142 +2490 +9119 +-9032 +-167 +-1582 +788 +-270 +9789 +-8193 +-2966 +4041 +6424 +3575 +-1960 +8347 +-8491 +1922 +-7991 +-6318 +-4658 +-3917 +8413 +8347 +-1894 +5542 +-2947 +6978 +3446 +2610 +798 +5610 +8778 +1708 +6822 +7457 +-7899 +6669 +-4440 +7135 +-9641 +9375 +9119 +6602 +2165 +-3230 +-5312 +-4088 +-5554 +6487 +-2988 +-8649 +-4577 +-5842 +8835 +4801 +-9942 +7935 +-3949 +2188 +4009 +4464 +-6825 +-604 +-5765 +9242 +9674 +3401 +7243 +-6442 +7474 +-8838 +-6302 +7922 +4440 +7879 +-6026 +3134 +-8167 +-2934 +9387 +3219 +-9903 +-5749 +7315 +-4844 +1165 +5747 +-4334 +5138 +5224 +3116 +4126 +5309 +-4929 +-8092 +-9641 +1138 +9844 +-2392 +-4221 +4566 +-5922 +-3246 +-1148 +9017 +7279 +4774 +-9827 +-2131 +9107 +-6342 +8695 +-4824 +2111 +-1825 +-4478 +-7330 +6757 +-3078 +-3930 +6512 +-126 +1238 +966 +-8357 +-3304 +3798 +-3248 +-6887 +8503 +6330 +8709 +7242 +-7696 +-2198 +9556 +-4221 +-5138 +-9577 +-7718 +9618 +-2208 +-1977 +-9437 +-5420 +-2558 +1685 +9457 +4057 +312 +-2323 +-280 +8470 +-6388 +-7773 +2679 +8838 +-2240 +-7056 +-8861 +-1254 +8671 +4528 +-7737 +-9638 +-9864 +6498 +2633 +-1547 +7457 +-5615 +4869 +5138 +-4335 +7474 +1865 +3693 +2989 +4784 +-1364 +7954 +-9714 +-6643 +-2739 +-9156 +-9965 +-9929 +-4938 +7134 +5172 +2498 +3172 +-8543 +-8047 +8973 +2948 +5819 +-2730 +1437 +8125 +-3484 +7439 +-9924 +-3222 +4782 +2416 +8039 +-5392 +-5635 +1840 +1750 +-8942 +7483 +-2921 +-3699 +5782 +-3551 +4993 +4525 +8106 +-6302 +3179 +-2063 +-3216 +-9393 +961 +-257 +-2867 +-3631 +-9744 +-3457 +-7246 +-1243 +-8953 +-1413 +2893 +-3943 +2906 +641 +-5522 +9306 +3509 +6807 +1342 +-8092 +-6361 +3299 +2596 +-6269 +-3345 +-9759 +2515 +1731 +-8678 +-5094 +156 +-123 +3173 +-4058 +-6415 +-2176 +168 +-9381 +-3288 +-1649 +2976 +1118 +-3343 +5470 +1975 +-4384 +-3576 +-3283 +-7391 +-4704 +-9630 +6855 +-9635 +-4743 +-3409 +-4901 +7186 +1046 +-5077 +-5610 +9681 +4743 +-7577 +-1413 +-7260 +-862 +6479 +7321 +8192 +5452 +-2090 +-1611 +-3250 +4028 +9966 +-1790 +-3923 +-4589 +-6685 +2443 +9615 +6873 +2490 +1945 +2063 +9295 +-5615 +-9849 +-1500 +7963 +-6996 +-7722 +2296 +9068 +4835 +-6887 +-4221 +1552 +4552 +-5985 +4089 +2994 +5825 +-8263 +8478 +-1927 +4058 +7785 +8842 +7464 +-4775 +7661 +5747 +6030 +1665 +-9735 +1869 +-808 +-8058 +-5008 +-885 +-7085 +-6789 +-946 +-3938 +-8669 +-2874 +-2848 +7168 +6576 +5270 +4495 +-9001 +7424 +8765 +-4270 +2612 +7657 +-7430 +3520 +9326 +8612 +-8360 +8052 +3219 +2373 +-9066 +-7817 +9966 +6558 +-4737 +3417 +1317 +-1426 +6555 +-2233 +6424 +7333 +4378 +2668 +-2047 +6262 +6349 +-9896 +-7953 +-9061 +-627 +1508 +-9999 +-901 +4943 +2351 +6039 +-3270 +8373 +4681 +5606 +9834 +-530 +-7516 +-7588 +5553 +-6980 +-81 +252 +-1235 +7571 +755 +-4946 +-4067 +4317 +4344 +5662 +-627 +-9241 +-8867 +-1136 +5574 +9980 +3465 +-3845 +5223 +5221 +3016 +-6077 +1914 +7135 +3029 +-1949 +4552 +1214 +5287 +-1996 +-2710 +6812 +-5107 +-5069 +3395 +8919 +3690 +212 +9843 +-787 +8578 +-7795 +9372 +4840 +9435 +-1085 +5784 +7033 +-2205 +1560 +5211 +2475 +5764 +3797 +-4020 +-4687 +-3586 +4866 +-563 +-6976 +9743 +-4268 +-1866 +-2189 +-5839 +-4155 +-9077 +264 +131 +9889 +-9831 +3712 +4830 +2259 +-9267 +-7789 +1618 +9018 +437 +-9148 +-5773 +3355 +8130 +3052 +-8792 +2948 +1193 +-8520 +4398 +-8869 +6508 +-9651 +-4678 +-9072 +4463 +7746 +-8936 +-3456 +-6652 +1751 +2118 +-5647 +2167 +-5696 +-1219 +2160 +2867 +-5430 +-3049 +-815 +-1504 +-2966 +9137 +-4203 +2490 +-5841 +-5808 +8681 +3503 +-116 +4129 +3530 +2449 +-3673 +954 +-4784 +2928 +5111 +-3108 +-9236 +750 +-2573 +7771 +-9033 +6192 +-3745 +-6477 +9222 +-3011 +3480 +-5392 +-8786 +3675 +8428 +873 +-4187 +4740 +190 +180 +-7491 +9992 +7030 +4869 +-2396 +374 +-7899 +-5907 +2483 +-9776 +-4442 +-2152 +-352 +-9228 +4372 +7568 +-2775 +-279 +-77 +1591 +-6877 +-8928 +-8733 +-8360 +5252 +8388 +-3523 +-9304 +3729 +-8385 +8679 +-724 +-6255 +9172 +4403 +-9965 +-8621 +-3339 +2840 +-352 +1610 +-1841 +-4180 +5844 +-8174 +8237 +6444 +-7733 +1688 +-5595 +-1840 +-7594 +9902 +-2944 +5308 +-6975 +-1047 +1135 +-7835 +-60 +-5757 +1706 +-2987 +-7955 +8025 +-4994 +6543 +-4095 +4523 +-9421 +2416 +-6442 +3111 +-3170 +4558 +-7565 +3938 +4636 +1671 +4173 +-7092 +713 +7736 +-5078 +1009 +-3382 +7882 +4849 +3730 +665 +-9197 +2023 +4941 +-444 +-827 +3431 +9010 +1560 +9814 +-334 +-3938 +3275 +2765 +2352 +7623 +5880 +-9188 +-7727 +-7842 +-5970 +7935 +-4470 +4280 +7911 +-2581 +4904 +6994 +1325 +1565 +-4411 +-9754 +1979 +-6343 +-9635 +-1611 +3691 +-7549 +7025 +-7759 +-776 +9650 +7840 +-9179 +-8626 +-2873 +3338 +3123 +-8995 +5657 +-3512 +-8395 +1107 +-1674 +-9924 +-8482 +3139 +-4642 +12 +-2643 +9170 +8289 +9935 +-2056 +-2660 +-75 +-1879 +1848 +8182 +-366 +-9670 +-5119 +-5674 +-8050 +-5461 +-2311 +-8334 +4415 +-7630 +-5371 +-4707 +4458 +9905 +1552 +-7475 +4747 +6840 +5464 +4085 +-7797 +-965 +7630 +-9794 +-6140 +9303 +4085 +5827 +-8762 +-4794 +3969 +8820 +-3554 +8381 +-2947 +-2436 +3652 +8877 +-726 +9712 +-6775 +7927 +20 +-955 +6922 +4935 +-726 +-8091 +6969 +-683 +625 +7789 +-3229 +-9197 +2442 +6857 +-7662 +6925 +7996 +-6151 +-7523 +2387 +9524 +-7447 +1031 +-9626 +4205 +4774 +9184 +8778 +-5627 +3369 +403 +8618 +8214 +6074 +8183 +6255 +3314 +-2597 +5485 +-1867 +-4612 +6763 +402 +8523 +-3656 +1614 +2383 +2574 +-6292 +9512 +9621 +-9001 +6639 +-4226 +5197 +-617 +-4578 +-9971 +-6713 +-4279 +9225 +-5593 +-9473 +-4088 +8599 +6709 +-724 +1418 +-6072 +1119 +5998 +-7759 +-5601 +2758 +-9237 +674 +8645 +-9039 +2583 +-2780 +-1158 +-5302 +987 +-4141 +8576 +-4228 +-2925 +6551 +-3357 +3532 +-6289 +-2208 +-3247 +-2149 +5698 +5155 +-7266 +-8432 +1625 +4984 +-2545 +4729 +9608 +710 +-4545 +-618 +-813 +7283 +241 +-1728 +-6520 +-9533 +2898 +-725 +2198 +8638 +1289 +159 +5138 +-627 +4470 +-7715 +7733 +-2861 +8995 +8608 +-5512 +8347 +-9922 +-3934 +-8786 +-6011 +2853 +6778 +5612 +627 +-4491 +-7290 +6656 +-4116 +-8762 +3985 +6235 +-4775 +-8225 +-6629 +-6388 +-5476 +-5590 +3596 +6293 +4507 +-861 +6238 +1094 +9328 +1560 +-3641 +9428 +-6171 +-4392 +-7147 +-7063 +6870 +-8530 +1386 +9992 +-3538 +-5985 +-6043 +-6549 +1177 +-6309 +4028 +3702 +-6398 +9674 +7041 +1644 +8762 +-8621 +8220 +6875 +-7686 +9323 +4173 +276 +-5785 +5645 +-5546 +9236 +-5893 +3566 +-2142 +5773 +-4965 +-4268 +-1879 +-1981 +8237 +7621 +-8065 +9457 +-4392 +7226 +-3969 +6262 +-7561 +-9469 +-2189 +6296 +-6361 +-8121 +-9411 +5057 +7454 +-1553 +-5962 +-577 +-4045 +-9001 +-8607 +2978 +-9982 +2397 +-3557 +-3208 +-405 +-7540 +2898 +8751 +-2851 +2296 +4859 +953 +1679 +9517 +-6027 +9233 +-667 +-9164 +8459 +-979 +7840 +-3307 +5609 +-5034 +4591 +-1721 +4061 +7329 +-9658 +8765 +-437 +-5838 +8986 +3298 +-1001 +-1300 +3531 +2286 +7959 +6445 +-5725 +838 +-4401 +2163 +8801 +3396 +9452 +-1322 +8059 +9517 +2687 +9195 +-444 +2307 +-8815 +-2351 +-5839 +-3611 +-4279 +3732 +-2214 +6579 +-1480 +3404 +-9059 +-2963 +8289 +5528 +8295 +-6635 +-2309 +955 +-6051 +47 +-4198 +7754 +-8204 +-7658 +-73 +-8544 +-9286 +-4487 +1214 +4194 +5298 +-4767 +1026 +-9233 +-1042 +-5321 +5688 +7692 +47 +1513 +3210 +2688 +-7357 +-943 +-1711 +4783 +1792 +-8074 +7771 +-3702 +4127 +6915 +4201 +-6014 +1168 +4484 +-1682 +-744 +5608 +7789 +7185 +1360 +2960 +-206 +-4628 +-4247 +-5155 +-4516 +-736 +143 +6123 +1217 +4993 +-6944 +-633 +8275 +-8091 +-6899 +-5404 +1633 +-9863 +8573 +1907 +-1594 +4719 +-7482 +-9143 +-2989 +-1542 +-740 +127 +-3584 +8877 +-7594 +9889 +5254 +9921 +-998 +-9017 +989 +-8419 +-2690 +5697 +-9544 +-6583 +6229 +-6024 +6096 +5603 +5705 +-5775 +4378 +407 +-3881 +-7050 +-3930 +226 +755 +-9042 +9953 +6178 +122 +1506 +-3609 +-5859 +-3162 +-7691 +-5698 +-436 +-4335 +-6224 +5705 +-260 +6712 +2007 +6721 +7046 +-7194 +820 +-8109 +-2289 +-5878 +-2581 +-8815 +-5570 +-156 +-2075 +-9940 +-7573 +-303 +2945 +1325 +765 +-5636 +-808 +2095 +8553 +5165 +-5582 +7516 +3343 +9167 +-5069 +8492 +-7809 +8486 +-2756 +-6458 +-8141 +-6172 +-4503 +1138 +-5321 +-554 +-5981 +-4478 +-482 +-3009 +-2759 +-908 +1762 +9092 +2922 +8604 +5436 +-5970 +-5499 +9551 +-2583 +-7086 +-4248 +-8111 +-5557 +-355 +-4966 +-465 +-2669 +-3188 +-2048 +2955 +-2571 +4716 +-212 +-9610 +-8633 +-7623 +-4435 +8494 +5822 +3215 +3182 +-6249 +-5114 +4022 +-5658 +-5438 +3012 +-7080 +-1800 +9059 +-726 +6887 +-7679 +4174 +-3976 +-7279 +9263 +-901 +-4946 +2427 +5914 +2867 +-815 +-2879 +-7579 +-5148 +4624 +-1224 +5305 +-9437 +2531 +-4147 +7104 +1674 +2167 +-1224 +-2667 +9127 +6457 +-4408 +-2206 +2139 +2974 +7637 +7682 +2369 +597 +6955 +6431 +7193 +-5727 +5931 +-252 +-9350 +-6490 +-5443 +-5884 +-7841 +-7715 +3512 +-7525 +1540 +-5284 +-4640 +-5558 +-1650 +-3848 +-5740 +4021 +7319 +-4733 +-9391 +-9518 +9677 +6275 +-4584 +-1980 +3411 +-3246 +-3306 +-5558 +37 +-7415 +-5138 +6162 +8950 +497 +-2362 +-1071 +1402 +-2634 +2974 +5574 +-6050 +-6176 +3647 +7578 +-9577 +-6944 +-1324 +-5536 +-5524 +6174 +-3817 +3321 +-9626 +-5262 +4057 +5609 +9848 +-2463 +9573 +5493 +6607 +3110 +2959 +-2948 +-9776 +6884 +5909 +-2958 +-6638 +1484 +-1870 +-1198 +-352 +1560 +5187 +3774 +-7109 +-1426 +-870 +-3414 +-9294 +5240 +2007 +6680 +-7994 +5891 +5445 +7956 +-9702 +6178 +3632 +1632 +9406 +-6384 +-9582 +-5358 +-2987 +1199 +867 +9435 +-6302 +114 +-3431 +-3730 +-8999 +-1530 +-579 +323 +3042 +6255 +-8250 +-6969 +3181 +4019 +-9700 +-6783 +-5392 +8114 +4717 +7483 +4068 +5214 +5273 +-5035 +7648 +-9314 +1835 +2578 +1364 +3456 +-3964 +6614 +-9012 +-9172 +-5921 +-636 +7168 +-4515 +540 +-9575 +-798 +437 +-1854 +4517 +3487 +-3582 +2079 +3797 +-7167 +1172 +-2169 +-7980 +7169 +267 +-8059 +8809 +3745 +-7594 +-4589 +-3047 +-9490 +-9461 +7806 +2571 +-1445 +-1201 +3111 +-2808 +6142 +-999 +-2132 +-2746 +1837 +-8990 +-2056 +-2597 +9581 +12 +-8453 +9500 +4524 +-5414 +2444 +9243 +1486 +-1198 +-7863 +-6934 +94 +2948 +-6404 +-6172 +-6834 +2416 +1224 +-7444 +-2286 +2380 +-8216 +-6526 +-6040 +5208 +-231 +-1598 +5952 +6073 +-6944 +-8494 +-5036 +2201 +-5148 +4595 +6074 +2923 +7967 +3251 +862 +9618 +2572 +2543 +2447 +-1594 +-7519 +8624 +-1721 +7598 +742 +-7256 +-8771 +-5006 +3070 +-1831 +-5044 +3231 +-8520 +-6495 +-4846 +-3330 +-450 +6646 +5254 +6979 +9755 +159 +352 +-9197 +8997 +1858 +-7805 +4269 +-7773 +-1094 +6382 +8704 +4886 +-1603 +-5130 +-8502 +-7830 +-4510 +5359 +-5825 +-824 +-2286 +8000 +-6430 +-6362 +1049 +5553 +-1647 +1790 +2199 +-3368 +5815 +-6514 +-1027 +-6080 +8275 +248 +-7902 +554 +-998 +3951 +3219 +-4897 +2589 +9226 +-9545 +-2014 +2125 +6895 +-7444 +-9658 +-332 +4255 +8271 +1630 +-7286 +6244 +-3182 +8208 +-2149 +-564 +176 +2259 +7034 +-3646 +-2404 +-9826 +6277 +-3387 +-9103 +6074 +-6172 +830 +9624 +3787 +-7225 +-5525 +-7233 +5493 +-9576 +-197 +246 +1270 +-8724 +-1185 +-5562 +9698 +-2993 +-9585 +-7253 +4458 +7745 +47 +101 +-6238 +1224 +-9167 +-4833 +-1100 +3421 +13 +-412 +-8337 +-2581 +1975 +7264 +-8928 +2612 +-6575 +3175 +5601 +-7447 +-1710 +9303 +-1485 +5947 +0 +-1774 +7141 +-3269 +-4140 +718 +-6026 +8146 +-4756 +9102 +-1542 +-5658 +-8860 +-8474 +-1169 +-3225 +-8717 +7490 +-1662 +-4650 +-9241 +-9207 +4601 +-1634 +-1892 +5125 +2373 +1541 +-7011 +754 +-8932 +-7080 +-4335 +-9039 +4378 +-7049 +3264 +101 +8343 +594 +-720 +323 +-2362 +-7382 +-619 +4906 +-9868 +-1864 +-7194 +4057 +-4370 +5037 +-1325 +-682 +-4123 +-8493 +-7338 +-1480 +7289 +-636 +-3223 +-1998 +3119 +493 +323 +7708 +-5235 +8883 +-2996 +35 +-426 +2181 +-9081 +2238 +9346 +-6720 +-6677 +8586 +-6860 +8363 +7935 +3152 +-2611 +8334 +-1410 +6211 +-1730 +-361 +-5095 +7640 +9518 +15 +-9746 +-9179 +4439 +3027 +1714 +-107 +-908 +-61 +6583 +-7283 +-7081 +-7631 +8937 +5080 +-9162 +-6210 +5204 +-9399 +3718 +-2214 +-2297 +-1325 +2707 +-6205 +7561 +-9130 +-3916 +-6343 +-1360 +7289 +-3441 +5549 +-7090 +3723 +-9406 +2567 +-3741 +6532 +-9319 +2877 +3340 +7065 +-2063 +8261 +6856 +2761 +4849 +-5045 +-3097 +-2014 +-7288 +2662 +1665 +-5696 +9560 +-3288 +-7131 +4491 +7384 +-1926 +-4737 +2381 +-5381 +4680 +9786 +8485 +-6238 +3096 +4963 +1665 +7104 +-7947 +-5996 +2126 +-2006 +1138 +-270 +-9983 +7506 +-2548 +-2877 +-2006 +3729 +-7264 +-5903 +3835 +8295 +2841 +6391 +-9797 +-1389 +6900 +1383 +7753 +1977 +-4844 +6042 +4969 +-8059 +5011 +-5564 +4085 +6583 +4538 +-4589 +-7225 +1813 +-8869 +-9583 +-2702 +-5170 +1602 +-3220 +-9377 +6039 +8878 +6427 +1644 +-8226 +-5893 +-1061 +-7372 +-6792 +2999 +-7897 +-4821 +5489 +-7225 +6599 +2974 +-472 +-4647 +-7825 +954 +-9076 +-7225 +-5168 +7598 +1973 +2687 +-7687 +-1997 +4976 +2205 +-8010 +-172 +6686 +4717 +-4362 +7528 +-3112 +-5374 +3009 +-2430 +5018 +-2198 +4293 +359 +-548 +-8263 +-8611 +-3843 +6301 +8739 +1172 +-6820 +-3402 +-2052 +-4141 +-6272 +-1335 +8683 +7491 +1645 +7564 +-4430 +-8024 +-554 +1526 +-6366 +1127 +1935 +4988 +5659 +7724 +-7672 +-3758 +-2755 +-247 +9523 +2824 +-5056 +-2492 +-9615 +-9084 +2586 +2898 +6484 +-3898 +-3696 +-9625 +157 +2166 +6574 +3692 +8883 +-1904 +2015 +-126 +-1191 +-5732 +-3270 +-5321 +1747 +5336 +-1221 +-9745 +-744 +6506 +-5892 +-7278 +-9143 +1608 +2212 +3313 +-2826 +-2525 +-3377 +-5499 +553 +6939 +-991 +4502 +-4123 +-9767 +9216 +-3357 +-7938 +7716 +-3200 +3246 +9393 +2257 +7640 +-3715 +7166 +-2410 +-3722 +-2250 +1006 +5 +861 +4654 +-3051 +-8685 +3118 +-4066 +-7305 +3640 +5609 +4034 +8363 +8891 +5447 +-789 +-1324 +7050 +-9269 +7226 +-2166 +2368 +-1072 +8695 +-4284 +-726 +3135 +-2759 +2006 +1792 +9973 +-5727 +6371 +4605 +3262 +-515 +3547 +8574 +-9186 +8533 +-1249 +-8441 +9433 +-8102 +4018 +-3721 +-2636 +-204 +2095 +7343 +1708 +-6335 +4125 +6427 +4791 +-143 +-5674 +-3657 +6610 +1300 +4608 +-5701 +-9441 +-8375 +-8510 +3452 +-6775 +1562 +4836 +-9578 +8601 +-8624 +5543 +-8347 +-2774 +4681 +873 +-9001 +5998 +9801 +2414 +7443 +4440 +-8551 +-2050 +2367 +8517 +-698 +244 +-8916 +-4737 +3351 +-8434 +2239 +6691 +9213 +-2570 +-6223 +1113 +9015 +-1299 +6736 +-2246 +-7059 +8492 +4915 +-3498 +-3659 +-8365 +-6427 +-3301 +6012 +5270 +6498 +6271 +1751 +6939 +2674 +6854 +6342 +-1362 +-3605 +-6969 +953 +-1547 +7867 +7452 +-9267 +-2657 +6449 +7175 +9657 +-6144 +-736 +1045 +-1609 +3804 +-3943 +-9777 +129 +-4683 +-9909 +-2380 +-3530 +6540 +-8655 +7781 +2894 +4709 +-3576 +-8772 +836 +5880 +9531 +8781 +3763 +1837 +-3663 +8876 +3024 +2612 +5947 +3343 +5646 +1402 +9550 +2353 +5931 +-5609 +4501 +5281 +248 +-4650 +3330 +5342 +2409 +4367 +5015 +7171 +8986 +-2977 +-553 +-3872 +6281 +3298 +3735 +-7985 +4137 +5999 +1514 +-2901 +-6262 +6706 +8883 +2439 +8502 +-3090 +-7453 +7880 +-5627 +8078 +4459 +-2789 +861 +6981 +-6015 +-7344 +-9755 +-2783 +3572 +-8321 +6982 +7384 +7578 +-7028 +-2965 +-2656 +-4732 +1049 +-444 +-4411 +6427 +-4404 +1253 +7962 +3530 +3491 +4057 +-4056 +6775 +-5952 +-6024 +-5852 +2689 +-2754 +-5545 +3962 +-9522 +2312 +-3389 +7135 +-5994 +2939 +8632 +1249 +3668 +3730 +7867 +5825 +-5167 +-7741 +5849 +-257 +-4088 +-3362 +8041 +6427 +-8434 +2006 +-531 +-8203 +8859 +-1919 +-6604 +1523 +-5035 +-5921 +-8059 +6551 +-1439 +-1117 +8340 +8601 +8402 +3833 +1049 +5665 +7391 +8894 +3676 +-238 +3070 +-4683 +-4966 +3219 +-8545 +-2598 +-8437 +-7301 +-9520 +4378 +-9776 +1246 +-6063 +-4996 +2761 +-3898 +4832 +-4217 +-4477 +-1048 +6349 +-5186 +8939 +2571 +8730 +-8754 +5199 +175 +1590 +-1994 +6944 +4904 +-5007 +-5773 +-1999 +-3968 +-1325 +-6673 +-5526 +6009 +2610 +-9518 +-9909 +-6069 +-7059 +-1738 +-7160 +-5486 +6944 +-3722 +-7839 +-6080 +5592 +5671 +-9201 +-9859 +833 +-3015 +-3991 +1363 +30 +6691 +-2766 +2802 +1481 +8342 +-3862 +6607 +-2663 +7321 +-7247 +-5846 +7911 +-6816 +-1608 +-8764 +-7722 +3389 +1389 +9589 +-5639 +-3046 +-726 +-4326 +2197 +-9472 +-3270 +5793 +-8510 +-8705 +9500 +-2217 +8609 +-1300 +9932 +-2401 +-1211 +8608 +4298 +-8041 +9541 +604 +7277 +1614 +-6508 +3338 +-1864 +-2198 +-1439 +6616 +9739 +961 +-1012 +-3905 +-5845 +-3612 +-8528 +500 +5212 +-5229 +-8226 +7974 +-4443 +-1711 +-2944 +-6431 +3954 +-8775 +-3171 +625 +-2463 +8402 +2929 +-6043 +-4966 +3878 +-7225 +-3996 +5771 +-9179 +5279 +-5555 +-3418 +-1324 +-2691 +-6767 +6642 +6494 +-8123 +-2233 +-4844 +961 +-5949 +-1850 +-5861 +-230 +9378 +1292 +-2702 +3421 +7022 +-4828 +-8315 +3969 +-303 +-7572 +1762 +5978 +-3427 +-5465 +-3155 +-6545 +8039 +5407 +-4335 +5553 +5031 +6782 +3251 +-9343 +-1620 +7743 +-7209 +2167 +36 +-4289 +-3890 +9225 +-5095 +7360 +6491 +-6952 +6498 +-7363 +1195 +9085 +4749 +-4220 +-8746 +7623 +2698 +-4123 +-9422 +-4855 +1088 +-5538 +3402 +775 +-571 +-8301 +-6442 +-5651 +-3693 +7844 +-4206 +9414 +-6992 +-4215 +-433 +5470 +-7691 +4099 +-6825 +-3603 +-8666 +-9992 +-6508 +6574 +-9463 +759 +3191 +222 +-284 +8360 +-7214 +-9441 +-6247 +-6379 +4702 +-1884 +9219 +-5177 +-7891 +-7120 +-5555 +-1012 +-5766 +-9264 +-4677 +-3843 +-2301 +-6366 +-7899 +6444 +9374 +-7384 +8234 +-2974 +498 +8883 +-9052 +8131 +-2827 +-7302 +-5137 +9491 +8852 +-3971 +7169 +-1360 +2862 +768 +-2943 +1214 +-4901 +712 +600 +2583 +-1848 +8783 +-4733 +-696 +-3905 +1344 +-2600 +-236 +-9156 +6609 +-8356 +8893 +158 +-7798 +-3611 +2354 +4637 +2555 +7142 +9789 +9482 +-8445 +4759 +-9098 +3985 +-9220 +6405 +-361 +176 +-5187 +29 +2125 +-5608 +4707 +-7435 +-8054 +739 +-7929 +6921 +8280 +-7783 +6857 +4099 +5917 +-8578 +-732 +-3354 +-8869 +-4854 +7759 +-3537 +-7395 +-8451 +-76 +3994 +-4855 +1756 +6517 +-9184 +-4437 +9243 +-9554 +9691 +7713 +4694 +1006 +-4961 +2126 +5613 +6687 +7692 +-2971 +8028 +3532 +-8503 +2955 +-744 +-1717 +-2680 +9610 +-8503 +-3722 +-2936 +-5283 +8650 +4334 +6625 +2906 +7891 +4445 +8341 +-5856 +4752 +2610 +9517 +2816 +-5555 +-6742 +-4027 +744 +5445 +-5755 +-3324 +5027 +2816 +5619 +-5800 +8788 +-9497 +5957 +803 +-6093 +6228 +5973 +4034 +1230 +-7658 +2393 +-7147 +-6373 +5024 +2729 +-8049 +-5774 +2974 +-9456 +-6283 +-9708 +-5229 +-4844 +-9929 +4830 +-3277 +-9128 +7472 +6820 +-5170 +-3932 +-1927 +4748 +2924 +6732 +-2790 +9476 +-2911 +4102 +-8575 +-3840 +849 +-7171 +6597 +717 +5504 +8131 +-8291 +7483 +-7899 +254 +-7350 +-7963 +1165 +-93 +6512 +3523 +1780 +2541 +-9711 +3025 +-9479 +-6497 +-3106 +-9742 +-3363 +-5434 +226 +6456 +2259 +-8375 +-5868 +-6100 +6939 +945 +3450 +9315 +449 +-5873 +143 +-1960 +-1327 +1877 +2840 +3560 +9523 +9801 +-912 +7880 +8025 +-6506 +695 +-6706 +-5545 +-5595 +8762 +-9463 +6299 +-1418 +812 +2885 +-3752 +-2471 +8997 +3339 +2361 +-7512 +1127 +3754 +-2374 +2668 +3314 +-4124 +881 +993 +-7447 +8912 +-7007 +9177 +-9874 +-3008 +-708 +-9606 +-1697 +-1867 +-6154 +4941 +9484 +2989 +-3576 +-9325 +-1148 +5645 +5764 +-4355 +1974 +9613 +759 +-6270 +-7974 +3691 +4173 +-9962 +-1251 +-5380 +-9223 +1269 +9859 +-5228 +9255 +6725 +3763 +745 +3325 +2072 +-3516 +-6431 +-3008 +-1626 +-5194 +5550 +-6969 +-9516 +6000 +2125 +5633 +-9228 +-5509 +-4059 +3466 +754 +-4907 +-6910 +3042 +9865 +-7167 +2925 +-7842 +-1071 +402 +4450 +9161 +-4440 +-7044 +-2981 +-9795 +259 +-7974 +1345 +-4066 +9789 +7719 +4926 +-3380 +-1896 +1717 +-5503 +8502 +-2254 +-1686 +7288 +-7784 +514 +4491 +8544 +-2729 +-7873 +4458 +9710 +8809 +-60 +-9030 +8289 +4228 +-724 +-4180 +7985 +-8710 +2046 +-9468 +9341 +-9733 +1883 +-1221 +-8074 +6230 +7755 +3348 +1889 +9043 +-3340 +2381 +-7773 +2668 +-257 +9482 +-8257 +9440 +-9319 +-1237 +1015 +2288 +-3584 +-2313 +-776 +-7086 +-2921 +4069 +-8209 +-1158 +8234 +7190 +-2608 +-1670 +5947 +-7759 +9527 +-3538 +2838 +2955 +5196 +-56 +-9949 +6586 +3648 +7746 +2609 +-1032 +7771 +-9515 +1270 +8672 +5469 +8567 +-5033 +-7673 +2994 +3241 +-1790 +-5497 +-8999 +8363 +-5278 +4346 +2281 +1422 +4298 +2104 +-5114 +-553 +9913 +-5689 +4360 +-7561 +-212 +-6716 +2187 +2165 +-3644 +-5284 +5300 +-548 +3650 +-9548 +5688 +7869 +-378 +-4123 +6186 +3298 +-3589 +-7623 +263 +2761 +-8034 +8029 +-1290 +7193 +5015 +-4335 +3946 +-7810 +3821 +-6490 +-5198 +-8291 +9502 +7594 +6763 +303 +-6024 +6006 +-429 +-5380 +-271 +-6309 +-2045 +1211 +3399 +-2826 +-7839 +-8262 +-8934 +4791 +-6513 +595 +-6111 +-2118 +9529 +-6819 +-3741 +-5040 +6773 +8801 +-2877 +-5381 +-4334 +-1755 +7148 +-6335 +952 +6368 +7713 +-8091 +2960 +6957 +-6904 +-7691 +-7996 +4634 +-3840 +1446 +235 +-2675 +4762 +-8234 +-620 +-2225 +5866 +-3173 +-3650 +-6706 +-4436 +2271 +-4862 +2745 +961 +-1112 +-6699 +-6779 +-1317 +-1250 +-1611 +-9356 +-4455 +3288 +-3554 +3634 +-3644 +-8687 +5817 +7644 +1644 +619 +1781 +-4821 +-218 +8360 +-4448 +4352 +-7795 +-6638 +1642 +-4105 +-1311 +-3441 +971 +-9891 +6568 +9655 +1750 +-3324 +4348 +-7825 +-945 +-6467 +3032 +8188 +274 +7423 +5129 +-5270 +-5888 +1718 +8514 +-7007 +-7472 +3924 +-6701 +3959 +-737 +-7797 +-7891 +-8130 +5102 +-7519 +2154 +6567 +-1324 +-7930 +-5004 +8182 +7277 +-7890 +7022 +-2296 +2610 +4127 +3375 +5978 +-3569 +-2184 +-1451 +4934 +-4955 +4212 +1660 +2639 +1560 +-6848 +5212 +-5995 +6913 +-3908 +-7397 +9755 +7753 +-6282 +9386 +6523 +222 +1814 +9639 +-548 +-5392 +3657 +-1949 +7254 +-2348 +-8924 +-4673 +5620 +8883 +8220 +8052 +1788 +2765 +6542 +-3942 +-7839 +-725 +9085 +-6774 +3910 +-1485 +-7561 +8275 +-902 +4373 +3081 +-3007 +6850 +-1819 +-9163 +631 +-3421 +9306 +-8122 +4075 +-8092 +8545 +-4628 +-7103 +-3051 +1960 +5709 +9058 +-6793 +-4616 +-433 +-2469 +-4710 +4836 +-9715 +-595 +2945 +-6716 +9825 +-7629 +-4931 +3179 +1024 +7096 +-1311 +5208 +9895 +3767 +-1012 +4601 +-3981 +-3644 +-694 +-8648 +-4213 +-8162 +-1342 +-9896 +9839 +7255 +1602 +6487 +-7009 +-1109 +-7198 +-2851 +7598 +8692 +8959 +-5192 +9921 +1171 +9073 +2867 +1144 +4869 +4117 +1804 +-9652 +-4392 +-122 +8125 +4560 +-2910 +5617 +6902 +-9994 +3936 +4988 +-7018 +-8032 +-9473 +5377 +7659 +-5337 +3450 +-5933 +9216 +3601 +-1137 +-1693 +-5077 +5593 +-6302 +-701 +1495 +-143 +775 +5758 +9015 +-677 +-1646 +-1862 +5836 +-422 +8695 +1630 +3911 +669 +-6343 +8608 +-73 +-4901 +9105 +5374 +2765 +-4430 +7057 +-3688 +-7218 +2222 +2305 +7080 +8088 +1076 +-3047 +4076 +-4639 +2153 +3943 +-1246 +286 +-8048 +-5655 +1837 +-8546 +-5636 +-7247 +3832 +-7929 +-4503 +8820 +-6690 +9724 +-275 +3575 +-1688 +4755 +-8941 +1440 +-635 +1671 +-1394 +8852 +-7225 +-9854 +-5006 +7880 +-1078 +-3921 +-3729 +-1949 +-8010 +-4426 +-1542 +-7001 +7558 +-4584 +6856 +500 +-1272 +3915 +7489 +5769 +-7400 +-7650 +-4869 +7264 +-3389 +2465 +-9691 +3998 +-2013 +-7625 +-4088 +-8961 +5563 +-7839 +-5151 +-895 +-6247 +-8726 +6265 +-2271 +1199 +1975 +457 +-4213 +-9798 +1762 +-9469 +-5879 +3081 +9921 +-4798 +3345 +-6819 +-6224 +-6487 +-2188 +-6140 +1479 +-7902 +-8762 +6662 +4682 +-9027 +2174 +1228 +4022 +323 +8959 +-1536 +-4479 +7713 +2830 +-944 +-4769 +-5235 +-2933 +-4487 +-9822 +1794 +-298 +1697 +-8234 +8214 +-7899 +4683 +-3715 +1902 +5610 +-7093 +7490 +-3584 +7442 +6461 +1405 +1767 +4104 +4828 +2968 +4694 +-8262 +-7097 +1522 +16 +7135 +3066 +-6335 +-7471 +4057 +5877 +-1367 +5061 +8214 +-6379 +-2577 +2166 +-8690 +-9447 +4887 +5627 +-9776 +244 +-7658 +-8565 +9052 +6721 +-695 +-3653 +6457 +6457 +-2172 +7495 +-7471 +-7825 +1831 +-5540 +1846 +-2656 +4442 +5557 +7832 +-3598 +-8248 +-8710 +4782 +-1611 +-3934 +-9732 +6646 +4286 +-2251 +-5883 +-2291 +8060 +-1896 +604 +-998 +9225 +-7344 +2715 +-5595 +9223 +-4925 +-254 +4032 +-4411 +-9017 +-5723 +1266 +733 +1945 +2126 +1127 +5688 +133 +9523 +1423 +-9143 +-1171 +5330 +-7396 +-7924 +-4140 +8039 +-3097 +-4974 +9189 +3557 +8258 +-9335 +9092 +-9502 +2335 +-7260 +6407 +-4334 +-1488 +8119 +-1543 +-4299 +-6629 +3359 +2410 +-4122 +6497 +9656 +6349 +-376 +-7530 +9442 +7347 +-7317 +3730 +-3029 +9636 +2486 +6272 +-2571 +8709 +-4059 +-7292 +8431 +8419 +4391 +3832 +-8619 +399 +-9545 +-3524 +6716 +-6243 +-2267 +-548 +5931 +-3421 +-1938 +7343 +1590 +9058 +4910 +5789 +9491 +-4869 +-5443 +-60 +7824 +7462 +-1547 +-3143 +8751 +1665 +7692 +-8784 +5662 +-4577 +1489 +-2597 +3119 +9998 +-9059 +7550 +-6013 +-7792 +5197 +-4465 +8996 +-8049 +5762 +-6388 +-9870 +2720 +-5595 +7087 +-2179 +594 +-247 +2373 +-5530 +9080 +-914 +7193 +-9972 +-8263 +-1555 +4009 +3118 +-6838 +-8399 +3915 +8250 +249 +-5281 +-971 +-1894 +2125 +-9777 +-4494 +3391 +-7727 +-1686 +-7108 +-7410 +-9098 +-5148 +-7975 +9372 +-7873 +6762 +-7509 +-5878 +-5185 +7459 +-2811 +4694 +953 +6149 +8268 +7205 +-3824 +9119 +5894 +3025 +8861 +-1069 +-2063 +1602 +7158 +2595 +-7828 +-8503 +-4025 +-8073 +-4532 +7708 +-363 +6856 +4415 +6280 +-1950 +3466 +7134 +4759 +-6154 +5485 +-3347 +431 +4405 +-1864 +9382 +3014 +-1106 +3443 +-8196 +-3842 +-2526 +-4083 +-5102 +-1046 +1429 +2736 +-3235 +5027 +5697 +-5723 +8229 +-7687 +862 +-3809 +-9405 +-9036 +-3938 +5407 +452 +1933 +-6111 +8388 +4378 +3503 +4258 +8591 +2913 +3680 +-8452 +2877 +3666 +5471 +9205 +6408 +7169 +-7135 +-5405 +-5587 +7948 +-1130 +-8874 +3175 +4489 +-3122 +8878 +-2118 +1452 +4720 +-7787 +2688 +9913 +-5990 +4694 +-4334 +-7167 +-3474 +-2876 +8278 +9968 +-2756 +394 +2574 +-1213 +3246 +-517 +-3222 +-317 +1913 +-4993 +-9560 +9362 +4555 +3501 +5262 +6078 +-3708 +-9792 +-4596 +-5921 +-8487 +8208 +6411 +1433 +-9012 +-6024 +8442 +-5443 +3900 +-3840 +740 +3915 +5105 +6882 +3642 +4720 +-3063 +-8503 +6150 +2812 +-310 +-4454 +3575 +3988 +1590 +3123 +-6246 +-3260 +2924 +-9164 +4415 +8604 +-8617 +-2840 +-7774 +4124 +-1509 +-5363 +-6225 +5392 +-8607 +7637 +2586 +-926 +7682 +-3170 +-3246 +-9227 +7084 +3299 +7412 +341 +-5298 +-6562 +-76 +11 +-5562 +2198 +-8609 +-7253 +1932 +-4750 +-257 +-8678 +-6213 +-2014 +-8869 +2118 +-9414 +179 +4621 +5015 +4930 +4470 +8820 +-4732 +794 +1387 +-3438 +7614 +3313 +-9984 +-4896 +5308 +7342 +-4756 +-3894 +2314 +133 +9491 +9387 +-5690 +-6402 +-3063 +9786 +-9854 +5276 +8821 +116 +4922 +284 +7621 +-5035 +-2078 +-4844 +-7699 +5407 +6266 +7343 +-7292 +5144 +-8250 +5038 +9681 +-8796 +-4286 +-8422 +6448 +-4882 +-6570 +8824 +7871 +6315 +7801 +-9811 +8751 +1075 +-8784 +8684 +-1718 +-639 +6977 +1837 +8000 +-2990 +-4973 +2302 +4344 +-6492 +-3598 +6457 +-9981 +2668 +-756 +-5815 +-6775 +-9343 +127 +-7128 +542 +1594 +8578 +-9984 +6550 +-6043 +-4822 +-6175 +7140 +-5526 +-6297 +2885 +-1707 +-6207 +9789 +9741 +8025 +-9948 +-9304 +-1428 +8165 +-6631 +-1700 +8959 +3646 +-6887 +3566 +4206 +7996 +2586 +2877 +-9959 +4690 +1118 +8476 +7033 +-2526 +-5004 +3900 +-8895 +-6860 +5593 +-4513 +-5449 +-41 +6262 +3339 +5940 +-4743 +-7218 +137 +2586 +-6132 +5396 +-5284 +7404 +873 +-3120 +-9960 +-4213 +7840 +-3777 +6544 +7443 +-6752 +-8942 +-2940 +-1037 +1930 +-5169 +-4996 +6382 +4808 +2259 +6304 +5208 +-3377 +1869 +7062 +5098 +-2465 +9586 +4674 +-591 +8869 +7609 +-5254 +-1523 +-44 +-6241 +-9727 +1602 +-2217 +8478 +1512 +-8277 +-9924 +2084 +-5513 +-3255 +-8046 +6295 +3646 +-4756 +-5939 +-4539 +-4795 +7880 +-1623 +8353 +-5698 +9077 +-6514 +-8986 +1751 +4774 +728 +5334 +6498 +-6024 +-2254 +9901 +2510 +1632 +8129 +1751 +6243 +4217 +-5467 +6856 +-174 +6512 +-8877 +-6373 +-6699 +-7827 +-395 +6353 +4866 +754 +-6486 +-3049 +-2861 +-1493 +5037 +7436 +3835 +-9343 +-4209 +-3052 +-1134 +3813 +-3193 +-6993 +2024 +-5413 +-2050 +-5852 +-9102 +-2989 +-3908 +6641 +4831 +-6804 +1266 +-9455 +-8509 +8370 +-5702 +9638 +2308 +1512 +1238 +2829 +-5395 +8803 +5108 +-5076 +-8062 +-7229 +9865 +5863 +-1148 +6164 +-5170 +1567 +-2380 +7235 +1059 +-7491 +8039 +-5989 +4029 +-3119 +-8797 +7581 +-6052 +-3079 +-1235 +-9643 +-1069 +-845 +7805 +2989 +8604 +8525 +8227 +5991 +-156 +7177 +-8669 +22 +1496 +-2947 +-6476 +6517 +5998 +-6394 +2409 +7608 +-2245 +-3605 +-6362 +301 +-1542 +-4503 +3070 +4749 +5319 +-8203 +803 +6969 +7374 +-7980 +6929 +-9874 +-6567 +-5716 +-5281 +8006 +4233 +-7691 +-5312 +-9711 +4379 +-6811 +602 +-9538 +8886 +-837 +1091 +-4855 +-3076 +-1027 +2290 +-9228 +8177 +3480 +-6241 +4057 +1338 +-7357 +-9469 +1933 +-7844 +-7696 +-3719 +-3182 +5223 +8146 +-5555 +1589 +5410 +4832 +-6830 +-3981 +7838 +5614 +3234 +-5878 +4450 +1756 +9918 +728 +-6297 +-6456 +-5148 +-6816 +1379 +4887 +-7369 +4933 +349 +-7318 +-2675 +593 +4133 +8710 +639 +8144 +-5756 +9216 +2205 +8245 +-8762 +-7307 +4670 +5454 +-5734 +5309 +6322 +1217 +157 +493 +6168 +2442 +-3288 +-3250 +-6212 +-9957 +6612 +-1799 +-3741 +2876 +1858 +7682 +4793 +-6143 +-2814 +-3892 +-4038 +-5700 +-1719 +2344 +4458 +-8182 +7141 +-3515 +2382 +-1052 +7436 +-1025 +-60 +1076 +37 +-2338 +884 +3110 +6230 +4117 +584 +4859 +233 +-3129 +-4014 +-6877 +9827 +2354 +-7110 +-8476 +6763 +2590 +6230 +1113 +-8999 +201 +-9437 +-9420 +7742 +6583 +1360 +-9815 +4808 +3973 +1233 +-7967 +3096 +1645 +286 +3801 +501 +5688 +5303 +-1397 +6610 +1846 +1402 +9119 +4929 +8924 +5432 +5447 +6944 +-1831 +755 +-2938 +6346 +4256 +-9224 +-1467 +-1052 +-1904 +3063 +-59 +1740 +1944 +-3177 +6362 +3120 +-5698 +-7517 +2028 +-5004 +2984 +-231 +1321 +9556 +247 +7435 +8025 +715 +-479 +8824 +-2685 +-1071 +457 +-8782 +9448 +-8003 +8374 +-5555 +-8244 +6658 +212 +-9064 +1755 +7640 +2954 +-4140 +-5046 +-3438 +-4491 +717 +323 +7175 +-7217 +-4239 +-4089 +9740 +6856 +476 +4101 +4117 +4174 +-9204 +-2397 +8252 +9650 +1626 +-2911 +2178 +323 +8880 +-75 +7402 +-8845 +6186 +-7875 +9975 +-8297 +7821 +-5089 +-7658 +-3133 +-1326 +7823 +-4289 +587 +604 +3152 +2104 +-1394 +-4363 +-2938 +5963 +2339 +7169 +-9177 +-2006 +7724 +-8436 +2174 +2555 +-4247 +-7073 +8043 +8241 +8725 +-5119 +-9746 +717 +-7907 +-8277 +1577 +-482 +2609 +895 +-5610 +-7899 +-1220 +-1370 +-5602 +5658 +-8072 +-1992 +-2876 +-958 +8796 +-4710 +-8334 +6186 +6726 +2187 +-8062 +-7868 +-4551 +-3733 +-7980 +-3387 +8729 +-8025 +9483 +6406 +-962 +1295 +-7194 +-6068 +-9903 +6002 +4872 +-5576 +234 +-4346 +8987 +2543 +-3641 +6368 +7821 +211 +4742 +631 +7238 +8478 +-3369 +-5394 +-8207 +6602 +2007 +9825 +755 +7812 +-5308 +-3644 +-217 +2571 +-26 +-1509 +8214 +-7316 +3564 +-9197 +-5121 +8395 +5011 +5298 +-7835 +-3993 +1649 +-7444 +-1512 +1033 +-2648 +-4286 +-5856 +-3685 +-4504 +9267 +5024 +3299 +-9638 +1284 +-6476 +-8396 +-8025 +3556 +-6310 +-9398 +6940 +-1342 +-9643 +-4220 +-7666 +-5427 +6796 +-5966 +-6778 +7046 +-3739 +-946 +3105 +-7028 +3470 +-2911 +-3988 +3547 +-8129 +-7404 +-5526 +-3108 +-8060 +1266 +4119 +-7047 +-6366 +-9187 +5105 +8197 +-531 +7384 +4843 +9387 +8055 +-5424 +-5938 +227 +7992 +2580 +-958 +-3008 +-6013 +8950 +6071 +1465 +-6863 +-5879 +5139 +-1609 +-1211 +1623 +-9184 +-8690 +9066 +-7542 +-2852 +6498 +220 +-7718 +-5628 +1230 +-5777 +9650 +728 +6434 +4463 +3600 +-933 +-5873 +8128 +-3155 +-3134 +-4606 +-4014 +-1632 +-9531 +2974 +-5791 +-1425 +-5027 +4833 +-6830 +2452 +7321 +9372 +3116 +-5486 +-3578 +3568 +-7789 +1770 +5057 +-8385 +9339 +8045 +-6953 +8672 +4569 +1604 +-3683 +6927 +4969 +-7968 +6227 +9386 +-848 +6743 +3184 +987 +4176 +1399 +-9708 +-8565 +2007 +-6868 +-9538 +5867 +-376 +5688 +-885 +-3557 +-891 +8280 +5027 +-9127 +3104 +5410 +6981 +8454 +-2206 +-2797 +9548 +2679 +3999 +1756 +-7357 +-4743 +-1863 +7087 +-9373 +-4280 +-6433 +1644 +-1547 +9306 +-2465 +-9444 +4914 +-5013 +-9026 +9588 +-9064 +625 +1632 +5790 +5138 +3452 +2642 +-77 +-7802 +-8054 +6187 +5566 +5373 +-5368 +-5263 +-8286 +5274 +-4740 +9586 +-5312 +6911 +2198 +-2532 +-2827 +1422 +998 +5182 +-3758 +-1075 +-2487 +1062 +8246 +-1413 +3063 +961 +-3049 +4988 +1072 +9539 +-1220 +-639 +-1085 +5199 +1780 +7070 +-6523 +4740 +-5884 +-111 +-6289 +4309 +4553 +-7885 +6353 +-8654 +2196 +6235 +-6050 +-4659 +1006 +4310 +-2977 +-8953 +1543 +2543 +5627 +-2952 +8364 +-129 +-3111 +-8187 +-7292 +7753 +-3307 +-3602 +-1198 +-1707 +-436 +-2567 +8604 +-8733 +-3127 +9972 +-3932 +5598 +8179 +-3557 +-3005 +7931 +6856 +6414 +7617 +9693 +-6302 +796 +5489 +5 +4518 +-2870 +244 +-7615 +-2036 +-458 +-2962 +-9331 +3165 +9199 +2885 +240 +1362 +-5970 +2870 +-4440 +-7866 +8937 +-4067 +1059 +-4415 +-8973 +-473 +-3264 +7130 +-7891 +-1594 +8684 +5125 +-5977 +3596 +-3174 +-2187 +-3283 +-6779 +-2274 +-1106 +-1425 +-7288 +4565 +-2090 +838 +6227 +4693 +-1521 +2488 +-4089 +205 +7277 +-4807 +-1237 +5758 +7882 +-1048 +7712 +-4027 +-3058 +6414 +5411 +5518 +-4862 +4964 +-9767 +-6282 +4999 +9918 +1551 +6586 +1970 +8534 +3349 +5825 +-7517 +-4221 +2522 +-8174 +-2938 +8486 +8817 +-8454 +8584 +-733 +7817 +4670 +-2438 +-7686 +-5710 +-4289 +-5358 +-9776 +849 +-9262 +-6430 +9442 +-5966 +-4789 +4143 +2610 +5941 +7210 +-6318 +-8771 +4143 +232 +841 +6099 +810 +-8117 +-553 +-8316 +6461 +-1964 +-3816 +5859 +-7770 +6200 +1872 +-8233 +3984 +2689 +-3693 +1628 +5359 +6913 +-3403 +-1521 +186 +7724 +5189 +-7311 +9574 +9586 +2609 +1091 +2399 +-6705 +-3355 +-9233 +-6922 +-8106 +4793 +-7037 +-3260 +-571 +9977 +7413 +2043 +-7561 +3776 +8950 +-9490 +5964 +9758 +428 +2563 +-5076 +5899 +-1219 +2748 +9541 +-3387 +2989 +6726 +6763 +4505 diff --git a/2022/input/20/test-1 b/2022/input/20/test-1 new file mode 100644 index 0000000..52c68ff --- /dev/null +++ b/2022/input/20/test-1 @@ -0,0 +1,7 @@ +1 +2 +-3 +3 +-2 +0 +4 diff --git a/2022/src/bin/day20.rs b/2022/src/bin/day20.rs new file mode 100644 index 0000000..417a3f0 --- /dev/null +++ b/2022/src/bin/day20.rs @@ -0,0 +1,195 @@ +#![feature(test)] +use core::fmt; +use std::str::FromStr; + +use anyhow::Result; +use aoc::Solver; + +// -- Runners -- +fn main() -> Result<()> { + Day::solve() +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn part1_test1() -> Result<()> { + Day::test(Day::part1, "test-1", 3) + } + #[test] + fn part1_solution() -> Result<()> { + Day::test(Day::part1, "input", 4914) + } + #[test] + fn part2_test1() -> Result<()> { + Day::test(Day::part2, "test-1", 1623178306) + } + #[test] + fn part2_solution() -> Result<()> { + Day::test(Day::part2, "input", 7973051839072) + } + + // Benchmarks + extern crate test; + #[bench] + #[ignore] + fn part1_bench(b: &mut test::Bencher) { + Day::benchmark(Day::part1, b) + } + #[bench] + #[ignore] + fn part2_bench(b: &mut test::Bencher) { + Day::benchmark(Day::part2, b) + } +} + +#[derive(Debug)] +struct Entry { + value: isize, + index: isize, +} + +impl Entry { + fn new(value: isize, index: isize) -> Self { + Self { + value, + index, + } + } +} + +#[derive(Debug)] +struct List { + entries: Vec, +} + +impl List { + fn len(&self) -> usize { + self.entries.len() + } + + fn get(&self, idx: isize) -> &Entry { + let idx = idx.rem_euclid(self.entries.len() as isize); + + &self.entries[idx as usize] + } + + fn get_raw(&self, idx: isize) -> &Entry { + &self.entries[idx as usize] + } + + fn remove(&mut self, idx: isize) -> Entry { + let idx = idx.rem_euclid(self.entries.len() as isize); + + self.entries.remove(idx as usize) + } + + fn insert(&mut self, idx: isize, entry: Entry) { + let idx = idx.rem_euclid(self.entries.len() as isize); + + self.entries.insert(idx as usize, entry); + } + + // @TODO This is not very fast, should probably find a better way of doing this + fn new_idx(&self, idx: isize) -> Result { + for (i, entry) in self.entries.iter().enumerate() { + if entry.index == idx { + return Ok(i as isize); + } + } + + return Err(anyhow::anyhow!("Unable to find entry with original index {}", idx)); + } +} + +impl FromStr for List { + type Err = anyhow::Error; + + fn from_str(input: &str) -> Result { + let entries = input + .trim() + .lines() + .map(|value| value.parse().unwrap()) + .enumerate() + .map(|(idx, value)| Entry::new(value, idx as isize)) + .collect::>(); + + Ok(Self { entries }) + } +} + +impl fmt::Display for List { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "[")?; + for entry in self.entries.iter() { + write!(f, "{}, ", entry.value)?; + } + write!(f, "]") + } +} + +// -- Solution -- +pub struct Day; +impl aoc::Solver for Day { + type Output1 = isize; + type Output2 = isize; + + fn day() -> u8 { + 20 + } + + fn part1(input: &str) -> Self::Output1 { + let mut list = List::from_str(input).unwrap(); + + for idx in 0..list.len() { + let idx = idx as isize; + let idx = list.new_idx(idx).unwrap(); + + // Take out the element from the list + let entry = list.remove(idx); + // Insert at the new index + + list.insert(idx + entry.value, entry); + } + + for idx in 0..list.len() { + let idx = idx as isize; + if list.get_raw(idx).value == 0 { + return list.get(idx + 1000).value + list.get(idx + 2000).value + list.get(idx + 3000).value; + } + } + + return 0; + } + + fn part2(input: &str) -> Self::Output2 { + let mut list = List::from_str(input).unwrap(); + + let decryption_key = 811589153; + list.entries.iter_mut().for_each(|entry| entry.value *= decryption_key); + + for _ in 0..10 { + for idx in 0..list.len() { + let idx = idx as isize; + let idx = list.new_idx(idx).unwrap(); + + // Take out the element from the list + let entry = list.remove(idx); + // Insert at the new index + + list.insert(idx + entry.value, entry); + } + } + + for idx in 0..list.len() { + let idx = idx as isize; + if list.get_raw(idx).value == 0 { + return list.get(idx + 1000).value + list.get(idx + 2000).value + list.get(idx + 3000).value; + } + } + + return 0; + } +}