diff --git a/1.in b/1.in index ae1422a..ff47b8a 100644 --- a/1.in +++ b/1.in @@ -1,2244 +1,2237 @@ -10062 -15651 -1271 -14355 -7220 - -4878 -1754 -8466 -4741 -2582 -3003 -5327 -3172 -1327 -6310 - -22413 -4145 -22294 - -23108 -30453 - -2084 -3496 -4800 -1388 -8728 -6380 -6397 -2558 -2120 -6159 - -25265 -20200 -2083 - -7424 -5830 -2575 -2825 -2234 -6106 -5505 -2847 -2059 -7145 -7223 - -58621 - -2926 -9188 -7432 -1639 -7420 -1161 -5517 -2703 -5446 - -2457 -5814 -1294 -3280 -8531 -8214 -4736 -1964 -1155 -2380 - -2812 -1827 -5533 -1756 -1491 -4127 -6452 -5935 -1415 -6221 -3489 -2681 -4849 -5250 - -2922 -10365 -5819 -10227 -2962 -2702 - -2982 -9254 -14137 -5026 -9374 - -5933 -2888 -2250 -4514 -1825 -5616 -3497 -2988 -1181 -3836 -1032 -5847 -5383 - -5044 -5922 -3155 -1610 -5510 -5016 -6666 -7024 -4649 -2764 -6444 - -12932 - -4764 -4285 -1278 -5020 -5917 -1888 -4757 -6323 -5067 -1314 -1530 -5748 -5573 -5848 - -6078 -6687 -5510 -7642 -6719 -4376 -7733 -1356 -4064 -4159 - -7426 -1147 -4176 -2797 -9484 -7907 -10806 - -24981 -21675 -9324 - -5537 -5730 -1280 -2090 -2963 -5992 -6043 -5141 -3039 -2120 -3664 -3816 -3859 -5406 - -1315 -8662 -2280 -11800 -10201 -3886 - -3048 -4147 -3299 -3912 -1571 -4582 -1621 -2201 -4543 -5377 -3016 -5297 -5213 -1338 -3929 - -5456 -4051 -1621 -5228 -2672 -3277 -4006 -4954 -1487 -5361 -3298 -4335 -3015 -1139 - -2875 -6387 -2926 -5439 -3494 -5287 -3793 -3714 -4944 -1094 -6728 -3302 -6345 - -9641 -5967 -10265 -1129 -3759 -5632 -4913 -6151 - -5890 -4285 -3601 -3344 -7294 -6321 -2730 -6352 -2350 -7214 -4034 -1032 - -4266 -2086 -12754 -8475 -5044 -9616 - -27815 -19415 - -7914 -11106 -6938 -10695 -6902 -2983 -3710 - -7659 -3565 -1310 -11842 - -8750 -17624 -9697 -16020 - -4606 -6296 -2321 -1272 -3504 -7121 -2313 -8016 -7910 -4786 - -11012 -12831 -3980 -12204 - -7996 -7933 -1500 -1810 -4030 -8645 -1710 -7506 -8096 -8661 - -5694 -4145 -3095 -3963 -2396 -5197 -6086 -6793 -5924 -5043 -1241 -5011 - -2410 -7373 -6724 -2641 -1827 -8344 -6833 -8336 -6517 -1376 - -6084 -9909 -1760 -10864 -4904 -6734 -9492 - -8002 -4098 - -17545 -1504 -17040 -14118 - -1103 -5378 -6135 -6207 -3143 -5550 -5723 -5494 -2841 -1461 -2413 -2252 -1904 -3474 - -1788 -5889 -7810 -8520 -5415 -4633 -1422 -9526 -6762 - -1187 -2137 -6551 -8399 -1510 -7099 -3465 -5179 - -7056 -3142 -3237 -4910 -6656 -3680 -2619 -5549 -5737 -4493 -5359 -1336 - -4690 -6692 -4638 -5490 -6449 -1518 -5872 -7935 -7742 -1895 -4528 - -4929 -5947 -5044 -1627 -5037 -6646 -5949 -2142 -2362 -3050 -6390 -5467 -5496 - -11896 -13381 -1055 -3993 -4275 -12480 - -1903 -1527 -3280 -3748 -3315 -1058 -2541 -4245 -4386 -4792 -4937 -2345 -2551 -1901 - -2674 -9184 -3423 -1954 -2788 -5954 -7827 -4466 -4901 - -4653 -12104 -14737 -8740 -4164 - -5317 -5734 -4580 -3244 -5509 -4009 -2576 -4137 -1282 -5506 -3530 -3057 -5408 -5952 -1849 - -9691 -16403 -16828 - -3653 -6762 -2042 -4618 -4212 -6293 -4782 -2071 -6303 -1662 -6814 - -3720 -6801 -2350 -4456 -4623 -3242 -2471 -4104 -4096 -3641 -4022 -3702 -3169 - -7146 -5318 -1820 -3845 -4955 -4134 -8848 -6614 -5497 - -11545 -4050 -20095 - -8230 -11577 -6426 -4671 -11838 - -1726 -7355 -8115 -2780 - -1795 -4697 -10410 -8064 -2370 -9497 -1221 - -2909 -6719 -2733 -4335 -1327 -1672 -1297 -6705 -5209 -6690 -5855 -5432 -3804 - -7874 -7949 -6658 -1621 -8850 -3235 -9142 -2856 - -6968 -7042 - -7463 -8035 -4908 -5032 -4791 -2030 -1768 -8611 -2114 -8748 - -11054 -16021 -9826 -11604 -4819 - -11214 -4850 -11665 -1891 -1347 -4053 -4570 - -66862 - -1597 -6127 -6229 -11518 -9308 -9661 -11410 - -13224 -1160 -1978 -13018 -14604 - -2773 -3885 -2383 -2850 -1758 -5724 -4418 -4637 -1510 -3870 -3793 -4116 -6281 -2026 - -3714 -2840 -2116 -3505 -3941 -6676 -5696 -3216 -6406 -4660 -4974 -2005 -5293 - -2580 -1645 -5677 -5376 -6527 -4410 -6837 -3069 -2399 -3727 -5658 -4817 -5911 - -2126 -2851 -2766 -8660 -8181 -3449 -2765 -1299 - -18470 -9129 -17956 -14494 - -1033 -4468 -5938 -2874 -2406 -1175 -5997 - -1256 -7932 -1544 -2772 -5709 -1348 -2919 - -4399 -1449 -8295 -7470 -2088 -1958 -2857 -1722 -5204 - -8161 -6865 -6428 -4807 -2173 -8614 -5109 -1769 -2125 - -1112 -7417 -1328 -6385 -4670 -2840 -3293 -6438 -6639 -6129 -4144 - +5118 5554 -15529 -1499 - -9459 -3175 -7412 -10610 -10283 -6807 -10056 -8657 - -5195 -1397 -5365 -3713 -4376 -4034 -2480 -2665 -2566 -4664 -5262 -5913 -2455 -6048 -4488 - -10875 - -5322 -8688 -2636 -14243 - -11403 -7465 -10079 -2270 -15254 - -11758 -7630 -5137 -6345 -7119 -10008 -6125 - -5184 - -4306 -1159 -6483 -5131 -5009 -4585 -2996 -3514 -4009 -4788 -6841 -2189 -3030 - -3132 -6730 -5733 -2747 -6464 -5221 -4567 -3528 -4264 -6006 -3295 - -4829 -23038 -16150 - -1519 -10692 -11102 -6321 -2948 -11851 -6301 - -5787 -2664 -6046 -4527 -1955 -5270 -1557 -4567 -5631 -2150 -4612 -3044 -2568 -3589 -5334 - -2303 -10849 -3983 -10010 -4854 -2111 - -4576 -1236 -3111 -4898 -5930 -5241 -2783 -5451 -6549 -5623 -7257 -2589 - -6031 -4307 -6669 -7866 -4333 -2069 -2778 -5463 -7149 -3091 -1001 - -8737 -1843 -4676 -4381 -6164 -2616 -2453 -1739 -4845 -2909 - -1396 -2963 -10672 -11217 -9975 -6511 -8694 - -5262 -3743 -1895 +4186 +4729 +1242 +4360 +1427 +5312 +6012 +1017 +5581 +5203 3811 -6089 -4659 -4195 -4633 -1928 -3865 -2166 -4947 -5040 -4052 -5291 +4945 +3960 -16754 -8916 -17259 -17813 +3812 +7757 +4448 +2205 +15715 -9683 -13286 -13577 -9343 -1792 -3335 +4164 +6482 +4479 +3061 +4082 +2474 +1175 +1918 +4755 -25505 -12891 -20104 +4056 +5122 +11426 +5529 +3659 +9592 +10257 -8618 -6560 -4584 -1118 -3931 -1229 -6759 -8275 +3435 +3106 +4933 +2695 +3107 +6567 +5579 +1463 +5734 +4547 +4532 +2152 +5132 -18418 -14090 -3552 -3156 +6074 +11600 +4337 +3444 +7637 +6725 +1189 -4681 -2564 -4557 -4838 -2048 -3097 -4513 -5181 -3803 -1857 -3836 -3089 -4322 -4049 +5637 +1226 +7068 +6290 +4411 +3858 +6677 +1858 +2840 +1175 +5056 +6569 -3768 -12991 -1680 -2378 +32887 +19643 -2609 -5115 -2179 -6126 -1423 -1300 -6113 -3720 -1279 -4681 -1147 -1728 -2087 -4708 +4951 +2276 +4300 +4473 +1895 +5251 +1770 +4623 +4602 +4925 +1769 -11919 -12306 -11697 -9806 -11749 -3995 +68012 -5298 -1877 -2065 -10499 -3493 -2892 +5760 +2687 +3192 +2730 +4867 +4723 +2591 +1677 +4458 +4388 +6038 +3127 +6416 +3048 -4172 -2913 -2288 -7358 -1065 -3030 -5316 +2485 +1630 +1595 +2864 +2125 +3852 +2216 +3883 +4293 +4165 +2762 +4016 +2508 +1396 +4541 + +5918 +6874 +6644 +4024 +3229 +1318 +1851 +1566 +1035 + +7625 +1369 + +3894 +18802 +1362 +12368 + +10251 +6249 +2784 +9394 +5932 +5610 +7201 +9922 + +10994 +10092 +4121 +2966 +1178 +2235 +9379 + +2592 +1895 +1740 +4357 +5314 +1068 +2228 +3775 +3949 +7162 +3078 +1450 + +9484 +1796 +8055 +7901 +9323 +1982 +2517 +8358 +2614 + +18536 +23454 +12107 + +6703 +6966 +1086 +7022 +3487 +3871 +2568 +6441 +1216 +2105 +5100 +2945 + +3268 +4866 +3569 +4374 +3666 +2477 +3263 +1312 +5121 +6592 +5337 +1417 + +17864 +11775 +1345 +11675 + +6636 +1678 +3982 +4552 +2719 +2736 +1342 +6375 +2671 +1541 +1093 +5538 + +21177 +36871 + +4608 +5474 +5004 +3229 +2744 +1577 +2182 +4518 +4930 +1986 +5776 5023 -1876 -2610 -5309 -5175 +2070 +5342 +1952 -6904 -9471 -1232 +13940 +15506 +13799 + +3672 +3303 +4866 +5507 +5282 +5768 +2847 +2214 +1688 +2255 +4302 +4962 +4585 +4285 +3602 + +4766 +4358 +4532 +10741 +13311 +2271 + +3073 +5990 +8256 +3692 +4658 +4561 +6347 +3260 +6938 +8643 + +5261 +1524 +1671 +3277 +2326 +5603 +5837 +1638 +5104 +3696 +1910 +2319 +2305 +1373 +4801 + +2593 +3527 +1517 +4626 +2003 +4414 +4677 +2282 +3000 +1457 +3530 +5344 +1890 +1703 +1268 + +9002 +7173 +3848 +6891 1741 -2239 -8554 -6327 -6507 -7603 +5303 +1670 +1342 +1865 -23962 +10319 +10539 +2972 +4667 + +4318 +1366 +1430 +5003 +2691 +7117 +3015 +6516 +6895 +1618 +3189 +6739 + +2494 +7140 +2905 +8784 +8727 +4711 +2284 +6894 +7030 +1688 + +1853 +7351 +7815 +3222 +8276 +1461 +5028 +8048 +5534 + +12546 +6236 +20372 + +2778 +5745 +2783 +5774 +4508 +3691 +6097 +4637 +5643 +5902 +1166 +1208 +3983 +5030 + +3767 +2558 +3988 +1056 +6570 +5437 +1920 +2822 +9126 + +3173 +3242 +5762 +4311 +5206 +3892 +4978 +5065 +1319 +2577 +1347 +3232 +1915 +5986 3536 -3214 -1102 -3823 -1876 -3929 -4890 -5526 -3009 -2619 -1565 -3364 -1392 -2407 -3129 -3586 - -8438 -2649 -4887 -4306 -1675 -2870 -2014 -1160 -6542 -8475 - -10172 -1686 -5999 -9145 -10361 -7814 - -3049 -5192 -2091 -4788 -3460 -2701 -2441 -2485 -2440 -2256 -5054 -4631 -5652 -3636 -3827 - -5944 -7870 -2055 -9296 -7574 -8691 -8852 - -2178 -1658 -6451 -6725 -1093 -6265 -7412 -5641 -2348 -5377 -2680 - -6607 -13797 -10728 -6412 - -10824 -25891 -24424 - -2278 -3407 -1688 -6069 -2324 -1868 -6037 -2496 -3324 -5346 -4118 -3881 -5260 -2094 -2334 - -3330 -2884 -6186 -5513 -3483 -6790 -4571 -4173 -4569 -1909 -5574 - -2073 -2159 -1468 -6189 -2770 -5299 -2039 -4247 -6289 -5453 -3797 -1432 -5501 -2600 - -7484 -8409 -8216 -1966 -2720 -5125 -5532 -10092 - -3704 -4032 -13787 -14642 -6007 - -2893 -3724 -6947 -5569 -6284 -5015 -6589 -4359 -3846 -5402 -5771 -2995 - -3027 -2193 -4194 -6211 -4912 -4523 -3402 -4199 -4777 -5955 -3217 -6162 -1556 -5269 - -6162 -7433 -2853 -4649 -4505 -7220 -5276 -1873 -6655 -5549 -2992 - -3304 -3655 -2028 -4079 -5182 -6830 -3885 -2274 -2769 -2514 -2146 - -2616 -5717 -1758 -2847 -4579 -1853 -1556 -2043 -1293 -1566 -2327 -6678 -5738 - -17934 -19341 - -6652 -3289 -6927 -2152 -2094 -2458 -5635 -6927 -4626 -6846 -5324 -6085 -2571 - -4344 -6656 -3831 -4768 -12536 -13166 - -2696 -5427 -9429 -1393 -5758 -9578 -4958 - -6889 -3107 -1112 -3035 -4159 -3697 -4832 -2604 -6318 -2804 -4325 -5497 -4214 - -3588 -5313 -1330 -8568 -9017 -1794 -9578 -8426 -4836 - -31988 - -5561 -3355 -5593 -3448 -2235 -3836 -2375 -2690 -1704 -3729 -2626 -6329 -3297 -5067 - -4244 -1729 -1598 -1025 -5921 -3214 -2230 -4120 -1274 -1136 -5798 -4259 -2821 -1968 - -5291 -7790 -8452 -1235 -10438 -2069 -1365 -9288 - -5533 -4261 -6170 -1884 -5315 -2901 -3588 -2903 -2441 -2264 -3162 -4188 -3993 -1592 - -15202 -9385 -17135 -10731 - -4591 -2068 -1136 -4292 -4351 -2100 -6075 -4463 -5887 -4507 -1273 -3815 -3595 -4846 - -8033 -7540 -9200 -10554 -2572 -2148 -7195 -9335 - -6923 -4006 -5057 -1209 -5025 -4788 -2977 -3924 -1149 -5407 -3240 -4363 -2870 - -18428 -1484 -6717 - -21437 -10877 - -13896 -13142 -14976 -4279 -7760 - -3736 -3606 -6255 -1070 -4078 -1204 -4140 -5864 -5772 -3706 -4794 -1810 -3891 - -7568 -9015 -8576 -9630 -4006 -8770 -7403 -7606 -8039 - -3523 -5469 -4603 -7988 -6196 -6253 -7393 -7866 -1976 -8036 -1708 - -23475 - -58206 - -8598 -4206 -7981 -1145 -8057 -3214 -2519 -4155 -6886 -7736 - -10064 -5532 -4310 - -5605 -6163 -3079 -5633 -7550 -1557 -3957 -3829 -8064 -5976 - -14566 -2324 -11737 -8884 - -5741 -9973 -5120 -8385 -6468 -6446 - -12939 -7370 -11204 -3902 - -6531 -6059 -3199 -4544 -2988 -6196 -5805 -2947 -6562 -6497 -5311 -1092 -3929 - -2969 -5314 -5341 -7533 -1601 -9340 -1458 -4516 -1911 - -18278 -17057 -19676 -13319 - -1740 -1218 -7693 -7610 -1179 -2611 -2494 -1995 -2606 -3634 -4818 - -51246 - -7826 -5544 -5835 -5983 -5180 -7833 -8681 -7170 -1166 -7254 - -2013 -4870 -1732 -5678 -5275 -4257 -3686 -6372 -6335 -2539 -1566 -3028 -1304 -3809 - -4410 -6375 -5386 -7307 -2385 -6675 -1443 -5057 -4051 -5263 -4460 - -3437 -4993 -6230 -2211 -6522 -4888 -5539 -4875 -4449 -3257 -1333 -3603 - -1433 -4953 -4098 -10882 -8320 -11840 -10795 - -6925 -7292 -9340 -2198 -1406 -2490 -5490 -6380 -6512 - -4332 -2273 -3506 -6399 -3161 -2458 -4217 -2567 -4582 -2109 -4513 -5392 - -2597 -7554 -9150 -5701 -8972 -7443 -6788 -3224 - -6098 -7293 -6994 -8305 -7896 -2339 -3312 -7702 -3616 - -55975 - -2514 -10887 - -7264 -10835 -21533 - -6666 -1428 -6668 -7673 -2755 -3344 -5937 -6942 -7279 -7284 -3344 - -4809 - -4748 -7859 -5322 -3460 -3728 -2462 -7973 +2308 +2812 +1119 +3845 +4589 +4779 +1503 +3613 1576 +3827 +1468 +1533 +5896 +4981 -1207 -1949 -2608 -1448 -2317 -3410 -7804 -2404 -9159 +9740 +16395 +19471 +12882 -38251 +4779 +7293 +12593 +15897 -10983 -5513 -9496 -7341 -11958 -7265 +36970 -10483 -7081 -5477 -12178 - -8421 -13928 -7231 -10781 -11620 - -7219 -2204 -5179 -5011 -4139 -2160 -6130 -1902 -5293 -8458 - -13895 -10711 -10857 -14214 - -9062 -4001 -8483 -4260 -9408 - -8856 -2473 -4738 -9554 -1238 -6186 -1747 -6853 -8308 - -6468 -5359 -8925 -7929 -9055 -6194 -4431 -4177 - -1452 -2594 -5079 -6108 -7286 -6997 -1052 -4952 -2458 -5843 -3390 - -59084 - -4350 -2892 -6057 -6449 -3274 -4882 -2824 -2625 -2761 -6381 -1803 -2641 -6303 -3518 - -4595 -15941 -14489 -12371 -13428 - -6748 -3113 -13130 -13855 -10202 - -4461 -4550 -3781 -5173 -2232 -3067 -3125 -3914 -5166 -4059 -1403 -1913 -2538 -5819 - -5492 -2956 -6397 -5485 -3908 -1764 -2853 -2690 -2751 -6816 -6510 -5134 -2251 - -1912 -11885 -9792 -9026 - -15319 -21333 -4765 - -1510 -1760 -1193 -5378 -5539 -1362 -3155 -6051 -3748 -5010 -4280 -1834 -5830 -1273 -2963 - -2625 -5173 -2499 -5779 -3165 -2148 -2098 -4888 -2787 -5898 -3977 -2740 -2160 -1791 -2522 - -20725 - -15813 -26702 - -1464 -3116 -7046 -5531 -13731 - -4178 -4204 -3722 -2109 -1772 -3920 -2560 -4029 -5846 -4360 -4538 -4889 -2312 -1086 -1093 - -1020 -3213 -1017 -3650 -4290 -2888 -4208 +2386 +1094 +2957 +4452 +4005 2723 -4149 -2381 -3332 -1308 -2755 -4357 +1124 +3533 +2671 +1701 +2508 +3075 +4741 +1471 +3416 -3010 -5317 -1507 -5472 -2171 -6005 -4331 -5355 -3211 -3797 -3963 -3738 -1899 -3390 -1455 +37202 -2098 -6531 -3206 -4272 -7461 -5093 -5370 -5502 -1543 -4543 -5069 -3491 +5272 +2736 +4756 +2235 +4679 +4093 +1773 +4088 +2419 +3192 +4429 +3959 +5230 +4342 -3195 -3617 -1509 -2926 -1668 -5901 -5893 -3950 -2428 -2572 -2390 -4899 -2234 -3937 -3111 +8514 +11430 +5023 +9565 +3726 +11026 +6334 + +6563 +2638 +12569 +3458 +5449 +1216 + +1320 +4708 +1627 +4189 +3962 +1463 +2628 +5667 +5494 +6105 +4925 +3540 +1613 +2288 + +5974 +7710 +5200 +4859 +2346 +5619 +1337 +4814 +1359 +3020 +1798 + +2744 +1957 +10669 +4877 +3507 +7657 +7748 + +1021 +4297 +1689 +6925 +16175 + +7147 +11617 +5654 +11861 +6065 +3090 +1744 -6510 -1964 -6255 -1875 -5118 3782 -3884 -5480 -2808 -4666 -2827 -3088 -3182 -3470 +6658 +2389 +4339 +2312 +7245 +2039 +3411 +6251 +1778 +2345 +5814 -7230 -5126 -5584 +13113 +10123 +18700 +6991 + +16138 +11645 +18610 + +9586 +6653 +1001 +4547 +2891 +2726 +7618 +5679 +1567 + +2380 +1858 +1059 +1160 +5115 +2588 +1969 +2629 +5525 +5831 +2139 +5469 +2783 + +10606 +4518 +9057 +5905 +4187 +4693 +4396 +2191 + +4374 +4407 +1083 +7787 +7716 +7505 +10096 +10650 + +5809 +4387 +3426 +3730 +3699 +4944 +4176 +2681 +5197 +1325 +5920 +4957 +5876 +5345 + +20155 + +1243 +11423 +13133 +4539 4880 -7753 -6132 -4098 -2893 -3148 -4209 -3646 +4276 -2971 -2439 -2362 -6416 +1073 +1316 +1841 +5102 +1196 +4847 +1293 +2424 +2345 +2298 +4214 +4215 +5760 +5775 + +4542 +1152 +5164 +5642 +2069 +1419 +5614 +7343 +1507 + +2840 +3922 +3563 +1856 +5216 +4886 +3794 +4637 +1826 +3520 +5582 +4602 +2442 +3631 +4946 + +7956 +3248 +7897 +7846 +2054 +5576 +3753 +3378 +1899 +3490 +6142 + +9837 +10901 +15019 +1735 5306 -2714 -4752 -6354 -4807 -3723 -4143 -6503 -8492 -19004 -6323 +3246 +2485 +5573 -5999 -7828 -7411 -4296 -8321 -5238 -5709 -5631 -6110 -1128 +2722 +2084 +18774 -6126 -7809 -1458 -15754 -3603 +7940 +10855 +8498 +5547 +13550 +4239 -8908 -8693 -8558 -3270 -5458 -12906 +1857 +7355 +4374 +6798 +2341 +13128 -2463 -7423 -6250 -2029 -15528 +14215 +9770 +2447 +1035 -5146 -6644 -1905 -6828 -2572 -4226 -6264 -4324 -3369 -5999 -5373 -5591 -6634 +8426 +1873 +4518 +2812 +7611 +2465 +4770 -2053 -7877 -2218 -2415 -2090 -6433 -8607 -3502 -8313 -2841 +8166 +19955 +6472 -5471 -5190 -4424 -5184 -3040 -5373 -4799 -8122 -1038 +10884 +11212 +1463 +2716 +1796 +12003 +1240 + +2802 +2639 +3268 +2492 +6676 +8851 +4054 +9603 +5354 + +1483 +3080 +6696 +8713 +6856 +4796 +7728 +4600 +3616 +8565 + +26580 +15329 + +6074 +15758 +5707 +13583 +2595 + +4957 +9125 +6534 +8684 +1728 +3690 +7983 +4131 +8907 + +12147 +15776 +14765 +17316 + +27492 +12173 + +5967 +1170 +7896 +7865 +7945 +2261 +2026 +1751 +3988 +3759 +5258 + +20764 + +7020 +7441 +8780 +6111 +3483 +8606 +4547 +8153 +3543 +6791 + +5397 +4408 +1572 +2315 +3376 +2021 +1140 +2876 +5045 +6034 +4404 +5705 +3814 +3981 +3814 + +6836 +3601 +7452 +8519 +2302 +2382 +8481 +1455 +7154 +6565 + +2077 +5139 +5462 +1508 +2094 +4850 +1688 +4382 +1991 +2297 +1930 +4720 +4995 +2891 +1967 + +2201 +3673 +9817 +7417 +1283 4988 -2833 -4461 -2976 -1168 -5195 -1043 -2270 +3052 +2258 +6022 +3678 +2938 +7073 +6437 +2402 +5973 + +2492 +4592 +1501 +4818 +3141 +3470 +2821 +4367 +4952 +2779 +2237 +4283 +5625 +2935 + +2422 +5273 +4053 +4471 +1343 +1128 +4538 +4328 +2974 +3674 +4155 +5472 +3520 +2427 +4145 + +19383 +13539 +9822 +2453 + +2244 +3506 +2573 +3837 +1725 +5081 +4668 +4438 +2414 +1446 +1862 +2453 +2049 +4867 +5438 + +16970 +5265 + +7417 +8051 +7490 +1175 +11316 +4219 + +1065 + +6974 +1232 +6746 +3660 +3883 +5403 +3793 +4956 +4253 +2237 +5815 + +6537 +4906 +11084 +7541 +10019 +5164 +11601 + +4215 +4216 +1160 +2096 +1453 +6271 +5534 +4353 +6423 +4060 +6811 +4701 +3383 + +2138 +12998 +19743 + +8678 +6328 +6426 +7184 +8008 +7896 +5365 +9506 +1955 + +1498 +19856 +7833 + +17023 +7023 +21278 + +2110 +5542 +7191 +6509 +8813 +5236 +7771 +9593 +1262 + +11625 +19032 +17458 + +5266 +4751 +7950 +2185 +7837 +5710 +2053 +7332 +7422 +6356 + +5781 +1330 +2974 +2628 +7407 7339 -7435 -7226 -5779 +3767 +5411 +3400 -11587 -6728 -6765 -11498 -4711 -3547 +5330 +3441 +6203 +5272 +5867 +6034 +3167 +2187 +6006 +6614 +1089 +2485 -2878 -8426 -11717 -8591 -5481 -10803 -11181 +3792 +4129 +1207 +1121 +3599 +6143 +4394 +5550 +1488 +2675 +6064 +1527 +4429 -4915 -2093 -6057 -6957 -13009 -12971 +1606 +1129 +5426 +5260 +3827 +5595 +2286 +1974 +7525 +1290 +4569 -17979 -3250 -19984 +2181 +5045 +7730 +5502 +5467 +7720 +1780 +4553 +1188 +4213 -5650 -5756 -3307 -10549 -6717 -9579 -2849 -6885 +2565 +10635 +12032 +3283 -2609 -2347 -4692 -5000 -5068 -5148 -4337 -4316 -2654 -2221 -1822 +9902 +2896 +9653 +6296 +2656 +11583 +5835 -13157 +4932 +4548 +3832 +2377 +3371 +2612 +1907 +3494 +4567 +3130 +3375 +2750 -10140 -5075 -10446 -2946 -5902 -5856 -8096 -8762 +7757 +1033 +8201 +13544 +13481 -16951 -9118 -17962 +3382 +12952 +9450 +4982 +13966 -7524 -4389 -3716 -3580 -5930 -1197 -3233 -6070 -4612 -2477 -6792 +4691 +3678 +1026 +7359 +1885 +1245 +5281 +8602 +6744 -6403 -11307 -10753 -9665 -4919 -6485 -3189 +13041 +9202 -8790 -10424 -8816 -3840 -6236 -5529 -8946 +3621 +3558 +2279 +2854 +6415 +5368 + +1102 +5319 +5768 +1990 +2526 +1900 +6294 +4744 +3655 +5011 +3092 +2697 3864 -1370 -4810 -3752 -1664 -1247 -3227 -4605 -4906 -5436 -4534 -4722 -4104 -5629 -4962 -3203 +12013 -2120 -4830 -2859 -2828 -3020 -5260 -5795 -3286 -5247 -6126 -4156 -3624 -2730 +27776 +14644 -58973 +5434 +1501 +1439 +4972 +1365 +6076 +1428 +6291 +6020 +5509 +3835 +2571 +6308 +1483 -18871 -8511 - -13088 -1608 -12123 -5162 +3972 9357 -2409 +8383 +11037 +9557 +10966 -3194 -2605 -8440 -9642 -9067 -5709 -4431 -5553 +8344 +1761 +10183 +4200 +3936 +5778 +9722 +1298 -10532 -36332 +3962 +2611 +7361 +1156 +2522 +2462 +4249 +5127 +1443 +5989 +2942 -7227 -10011 -7519 -4030 -7444 -2693 -3845 +5384 +7053 +2194 +11964 +5937 +7708 -10004 -5735 -9671 -3576 -7111 -1292 -10428 -2800 +3052 +3192 +3224 +5708 +2120 +5756 +6107 +1198 +5519 +3803 +1169 +2903 +5942 +4376 +3675 -4229 -6072 -3748 -1466 -2305 -2664 -2612 -5054 -2625 -2778 -2712 -2788 -5133 +11517 +9051 +2084 +4508 +4197 +7219 +9902 -10716 -11271 -11169 -9815 -1641 -1025 +4566 +5562 +4263 +1970 +1965 +1333 +1601 +2665 +3443 +5463 +4981 +3792 +2588 +3282 +1243 +3604 +4947 +1044 +6962 +2276 +2828 +6334 +2508 + +1339 +3050 +10158 +2095 +7779 +5165 +9420 +6101 + +4512 + +3273 +2248 +2082 +12415 +13944 + +5638 +5204 +3327 +1361 +3775 +3421 +7597 +1917 +1802 +3896 +4058 + +1901 +1813 +7388 +3861 +6838 +6154 +5500 +3086 +6403 +3654 +7471 +6904 + +1932 +1303 +1930 +1720 +5505 +1595 +2260 +5629 + +38957 + +4629 +3672 +3629 +5011 +5182 +3952 +2295 +4943 +2644 +2851 +5894 +4654 +5257 +3972 + +48469 + +3481 +1398 +3837 +2611 +3330 +3229 +7619 +4106 +6816 +3486 +2763 + +6591 +2522 +6262 +5458 +3025 +2804 +6403 +1390 +2964 +3081 +3449 + +6408 +3223 +4302 +1079 +5836 +5580 +1538 +2616 +3850 +5272 +3688 +2381 +5775 +5497 + +1891 +1448 +4283 +5965 +2726 +1425 +5399 +2795 +1583 +2489 +5171 +3133 +2547 +5117 +3092 + +11463 +11581 +6972 +5410 +3675 +8578 +4283 + +1398 +1747 +1341 +5365 +5086 +2268 +4544 +5286 +5910 +1393 +4580 +4726 +1123 +3949 +1223 + +7526 +3223 +5495 +7184 +10259 +7681 +4795 + +7168 +6278 +7939 +3829 +3670 +7969 +4917 +7406 +9035 + +5687 +4872 +2967 +10772 +9196 +6207 +6244 +2801 + +3500 +1786 +1517 +1585 +4536 +2645 +5249 +4808 +5681 +4591 +5595 +2751 +3336 +1615 +2200 + +6894 +4752 +1794 +6507 +2184 +5589 3016 -3916 -6618 -4213 -6968 +4532 +2321 +6843 +2909 +2104 +4065 + +24126 + +3293 +8274 +1297 +4841 +4653 +1817 +1972 +6169 +1001 +7070 + +6969 +5331 +4779 +5316 +5249 +3315 +4355 +3596 +3868 +5647 +1110 + +5235 +5846 +5619 +6259 +4372 +2600 +7526 +3962 +3840 + +4260 +4484 +6361 +4276 +6344 +4776 +1173 +1884 +4572 +1411 +5230 +3976 +1800 +2426 + +19185 +15235 +19905 +8664 + +3346 +7532 +8840 +2182 +10048 +4181 +5030 +8078 + +2080 +2279 +6250 +3388 +6097 +4607 +6262 +4259 +3261 +4653 +3338 +7025 + +1138 +2851 +5912 +8592 +7341 +3596 +7669 +1030 +7624 + +6551 +6753 +7807 +4296 +3515 +6873 +5010 +8497 +1742 +5767 + +8921 +7840 +9067 +3809 +4347 +2876 +3886 +9982 + +11455 +10295 +15198 + +1574 +4240 +4052 +1739 +5701 +8449 +5055 +3893 +2700 + +3864 +4306 +4190 +1165 +1708 +5705 +5654 +6753 +3840 +4139 +2121 +5735 + +1662 +3541 +2480 +6124 +3355 +5737 +5537 +6806 +7953 +1109 + +14180 +15876 +25965 + +7732 +33422 + +5918 +5146 +6768 +9366 +1687 +1440 +3115 +1065 +6514 + +2316 +4905 +2945 +5351 +6196 +6207 +5751 +3811 +4765 +1419 +5253 +1616 +2274 +6363 + +5125 +2491 +5057 +2749 +1586 +4997 +5249 +3944 +3964 +3845 +2457 +5972 +5313 +6453 + +30602 +6865 + +4413 +1651 +6256 +6524 +3466 +1160 +4599 +6477 +2681 +1855 +4785 + +6435 +5377 +6008 +1744 +5182 +4469 +3999 +2913 +3367 +3233 +2369 +1712 +5408 +4622 + +4201 +5475 +1117 +2679 +2649 +1446 +4043 +1136 +3750 +4523 +3800 +3245 +3179 +6183 + +7682 +7213 +5144 +1557 +5579 +5005 +6307 +5906 +7244 +6230 + +1205 +2764 +3576 +5212 +1723 +4138 +1801 +1772 +4809 +1429 +2010 +3093 +4435 +2268 +4904 + +4386 +6822 +1865 +3688 +6771 +5433 +1430 +4870 +6745 +5758 +4456 +6549 +6203 + +2413 +3287 +3376 +5780 +1190 +1177 +1577 +4375 +5558 +5117 +6773 +2483 +4436 + +5870 +4195 +5932 +1117 +5072 +4581 +6922 +2695 +3134 +2021 +3327 +5538 +2324 + +2609 +4270 +5809 +1096 +6794 +3530 +3222 +4881 +3806 +2887 +7158 + +2989 +5279 +6821 +2474 +3144 +8621 +3854 +5012 +1144 +1354 + +9033 +7624 +5535 +2433 +1433 +5568 +8161 + +5691 +5394 +3445 +4619 +1703 +6197 +2113 +4277 +2506 +3380 +6039 +6423 +6429 + +23751 +4571 +7508 + +9674 +3084 +3612 +3841 +3555 +8146 +6263 +7746 +3586 + +7907 +6263 +2320 +4430 +15429 + +2825 +2248 +7184 +3650 +1008 +5219 +5600 +2610 +7357 +5113 +1039 +2019 + +2167 +4159 +6290 +3757 +10133 +1345 +7250 +10590 + +6712 +5361 +3243 +6239 +1667 +2699 +5389 +1400 +1334 +2382 +1604 +3256 +2439 + +6520 +1478 +3049 +6452 +6899 +1850 +2466 +3485 +3020 +6683 +8000 + +7715 +6597 +5588 +2062 +6732 +3811 +10470 + +4793 +1206 +6481 +11715 +8827 +3174 + +3492 +1535 +2603 +5877 +4937 +6805 +1620 +9488 +1593 + +2182 +8258 +3319 +5499 +6257 +1466 +6435 +8334 +1140 +6764 + +15599 +28121 + +5804 +6653 +1670 +7337 +4711 +8303 +10073 +6327 + +2754 +2040 +2295 +8503 +2231 +11685 +6556 + +16325 +4057 +11110 + +6482 +2035 +5189 +6641 +4232 +1100 +1088 +2779 +2220 +3078 +2847 +6009 +1981 + +8655 +8687 +7225 +4133 +4449 +7193 +4009 +7455 + +2014 +2691 +1207 +1140 +6736 +4780 +2781 +2855 +5056 +3590 +2372 +6188 + +6779 +4130 +5169 +5726 +1503 +1520 +8302 +3054 +3037 +6190 + +6862 +7039 +1305 +4226 +5769 +5068 +8362 +7612 +6856 + +17695 +18988 +3757 +15137 + +5268 +3234 +2073 +1529 +1190 +5659 +7316 +3075 +4191 +6111 +2582 +7122 + +9316 +2087 +2980 +12121 +1703 +6661 +4286 + +20694 +6712 +15401 + +4342 +3838 +3208 +2372 +1410 +1648 +2342 +6113 +5573 +6091 +2624 +1749 +5643 +4258 + +2303 +2178 +3449 +3150 +3825 +3673 +1326 +6377 + +10398 +3801 +11714 +7455 +3382 +6182 + +27882 + +6667 +3268 +11915 +7045 +10478 +10538 +2287 + +5694 +5516 +6094 +4909 +5685 +4931 +5949 +6361 +6476 +6439 +1667 +5691 +3883 +3307 + +9977 +7477 +6533 +9766 +4576 +2051 +1376 + +5966 +7654 +5784 +2727 +7568 +4600 +2150 +1333 +6583 +4119 +2648 + +11274 +8674 +4155 +2163 +1897 +6579 +11099 + +2751 +4530 +5488 +1491 +2456 +2752 +1767 +6113 +7730 +7127 + +8657 +6947 +4803 +5103 +4373 +9501 +1486 +5689 + +4382 +5176 +2533 +6017 +6100 +4935 +1841 +4530 +6120 +4735 +3438 +3305 +5324 +2814 + +41401 + +20975 +30628 + +2099 +5390 +4829 +5845 +2674 +1029 +3312 +3412 +3402 +5544 +4773 +5274 +2458 +4309 +2741 + +4345 +7095 +7361 +2171 +6003 +5069 +1941 +2473 +2116 +6508 +6491 +7227 + +8137 +8052 +5372 +1086 +2369 +5763 +8937 +9055 +1208 + +4359 +3906 +5012 +2086 +4937 +4239 +3390 +3280 +4948 +3906 +6387 + +6430 +11071 +1179 +6918 +12028 +1855 + +11059 +14754 +15751 +15821 +9411 + +8722 +1104 +7422 +9229 +7919 +6200 +2274 +2980 +5686 + +3277 +4325 +9477 +9651 +4798 +8742 +4308 +6656 +6746 + +5777 +6805 +4337 +4847 +4966 3525 -1944 -6525 -1920 -8741 - -19472 - -15684 -10706 -14780 -15411 -9358 - -5290 -8167 -5269 -7051 -2848 -3948 -5987 -4844 -7749 -5696 - -9032 -12663 -11173 -14750 - -1121 -2123 -6582 -5753 -6358 -2524 -6486 -2259 -2197 -1883 -3005 -2406 -5967 +2729 +6611 +3070 +3734 +1957 +1360 +1678 diff --git a/2.hs b/2.hs new file mode 100644 index 0000000..4944791 --- /dev/null +++ b/2.hs @@ -0,0 +1,20 @@ +{-# LANGUAGE ScopedTypeVariables #-} +import Data.Char +import Data.List.Split +import Data.List + +main = do + ls <- readFile "2.in" + putStrLn . show . solveB . parse $ ls + where + solveA = sum . map evalGame + solveB = sum . map ( evalGame . forgeResult ) + -- (=<<) id == flatten + parse = map ( charToOffset . (=<<) id) . map words . lines where + -- parse two chars as indices of (A) R/P/S moves or (B) loss/draw/win instructions + charToOffset (x:y:[]) = (ord x - ord 'A', ord y - ord 'X') + evalGame = sum . (<*>) [evalWin, evalMove] . pure where + evalWin (x, y) | x == y = 3 + evalWin (x, y) | otherwise= (if ((x+1) `mod` 3 == y) then 6 else 0 ) + evalMove (x, y) = y + 1 + forgeResult (x, y) = ( x, (x + y - 1) `mod` 3 ) diff --git a/2.in b/2.in new file mode 100644 index 0000000..44ee23a --- /dev/null +++ b/2.in @@ -0,0 +1,2500 @@ +B X +A Z +A Y +B X +C Z +B Y +B X +C X +A Y +B Y +B Y +C Y +B Y +C Y +B X +A Z +C Y +B Z +C X +A Y +B Y +B Y +B Y +B Y +B X +B Y +C Y +B Y +B Y +B Y +A Y +B X +A Y +A Y +B X +B Z +B Y +C Y +A Y +A Z +C Y +A Z +C Z +C Y +B Z +C X +A Z +C Y +B X +B X +C Z +C Y +B Y +A X +C Z +B Y +B X +A Z +B Z +C Y +C Z +B X +B Y +B Y +C Y +B Y +B Y +C Y +B Z +A Y +B Y +C Y +B Y +B Y +B Y +C Y +B X +C X +C Y +B X +B X +C X +B Y +C Z +B Y +B Y +B Y +C Y +B X +A Z +C Y +A Z +B X +B X +A Y +C X +B Z +B Y +B X +C X +C X +B X +A Z +A Y +A Z +B X +B X +B Y +C Y +C Z +B Y +A Y +C Y +A Z +A X +A Y +B X +B Y +C Y +B Y +B Z +C X +B Y +B Z +C Y +C Y +C Z +B Y +C Y +B Y +C Y +A Z +A Z +A Z +B Y +B Y +C Z +B Y +C Y +B X +B X +A Y +B X +B X +C Y +C Z +B Y +A Z +A Y +C Y +B X +C Z +C Y +B Y +B Y +A Z +B Y +B Y +B X +B Z +A Z +C Y +A Z +C Z +B Y +B Y +A X +B X +A Z +B Y +C Z +A Y +B Y +A Z +C X +C Y +B Y +B Y +B Y +C Z +B X +C Z +B Y +C Y +C Y +B Y +C Y +C Z +B Y +C Z +B Y +B Y +B Y +A Y +A Y +B X +C Z +B Y +B Z +C Y +B Z +C Y +B Y +B X +B Y +C Y +C Z +B Y +A Y +B X +C Z +C Y +B X +B Y +B Y +C Z +C Z +A Z +B X +B X +C Z +B Y +B Y +B Y +B Y +A Y +B Y +B Y +B X +B Z +A Y +B X +C Y +B Y +B X +B Y +B Y +C Y +A Y +A Y +A Z +B Y +B Y +C Y +C Y +C Y +A Z +B Z +B Z +B Z +B Y +B X +B X +B Y +B Y +A Z +B Y +C Y +B X +B X +B Y +B X +A Z +C Y +C Y +C Y +C X +A Z +B Y +A Z +B X +B X +B Y +C Y +B X +C Y +A X +B Y +A Y +B Y +A X +A X +A Z +B X +B Y +B X +B X +A Z +B X +B X +C Y +C Y +B Y +B Z +B Y +A Y +B Z +C Z +C Y +B Z +B Y +B X +C Z +B Y +B Y +B Y +C X +A Z +B Y +B Y +A X +C Z +B Y +C X +B Y +B Z +B Z +A Z +C Y +B Y +B Y +C Y +B Y +B Y +C Y +B Y +C Y +A Z +C Y +B Z +C Z +B Z +C Y +B X +C Y +B X +B Y +B Y +C Y +C Y +C Z +B X +B Y +B Z +B Y +B X +B Y +B Y +B Y +A Y +C Y +C Y +A Y +B Y +A Y +B Y +C X +B Z +B Y +C Y +A Z +C Y +C X +B Y +B Y +B Y +B X +C Z +C X +B Y +B Y +A Z +A X +B Y +B X +C Y +B X +B Y +B X +A Z +A Y +C Y +B X +B Y +C Z +A Y +A Z +B Y +B Z +C Y +B Y +C Z +C Y +B Y +A Y +C X +A Y +B Y +A Z +B X +B Y +A Y +B Z +B Z +B Y +B Y +B X +C Y +C Y +C Y +B X +B Y +C Z +C X +B Y +A Z +A Y +B X +B X +C Z +C Y +A Z +C X +B Y +C Z +B X +B Y +B X +C X +B Y +B Y +B X +B Y +B Z +C Y +B Y +B Y +B Z +C Z +C Z +B Y +C Y +C Y +B Y +C X +B Y +C Y +B X +A Y +C X +C X +C Y +B Y +B Y +A X +B X +B Y +B X +B Y +C Y +C X +C Y +B X +B X +A Z +C Y +B Y +C Z +C Y +B Y +C Y +C Z +C Z +C Y +A Z +C Z +B Y +B Y +A Y +B Y +C Y +B Y +B Y +B Y +C Y +A Y +B Y +B X +A Y +B Y +B Y +C Y +B Y +B X +A Z +B Y +B Y +C Z +B Z +C Z +C Y +A Y +C Y +B Y +B Y +B Y +B Z +C Z +C Z +C Y +A Z +B Y +B Y +B Y +B Z +B Y +C Y +B Y +B Z +A Z +A Z +C Z +A Z +A Y +B Y +B Y +B Y +B Y +A Z +A Y +B X +C Z +B Y +B Z +C X +B X +A Y +C Y +B X +B Y +B X +B Y +A Z +B Y +A Y +B Y +C Y +B Y +B Y +B Y +A Z +A Y +A Y +B Y +B Y +C X +A Z +B Y +C Y +C Y +A Y +B Y +A X +B Z +B Y +A Z +B X +B Y +B Y +C Y +C Y +B Y +A Z +B Y +C Z +C Y +A Y +B Z +C Y +C X +C Y +A X +B Y +B Y +B Y +C Z +B X +C Y +B X +B Y +B Y +C Y +C Y +A Z +B Y +C Y +C Z +C Y +B Z +C Y +B X +B X +B Y +C Z +B Y +B Y +B X +B Y +B Y +A Y +A Z +B Y +A Z +B Y +B Y +A Z +B X +A Z +A Y +B Y +B X +A Z +B Z +C Z +B Y +B Y +B Z +B X +C Z +C Y +B Y +C Y +B Y +B X +B Y +B X +C Y +C Y +B X +A Y +C Y +B X +B Y +C Y +B Y +A Z +C Y +B X +A Z +B Y +B Y +A Z +C Y +B Y +C X +C Z +C Y +B Z +B Y +B X +C Z +B Z +A Z +B Y +C X +C Y +B X +B Y +C Y +C Y +B Y +B Y +B Y +B X +B Y +B Y +B X +C Y +B X +B Y +C Z +C Y +C Y +B Z +A Z +C Y +C Y +C Y +C Y +B Y +C X +B X +C X +B Y +C Y +B Z +B X +C Y +B Y +B X +B Y +C Y +C Y +C X +A Y +C Y +C Y +A Z +A Z +B Y +A Z +A Z +C Z +B X +C Y +B Y +B X +B Y +B Y +C Y +B X +B X +B Y +C Y +B Y +B Z +A Y +B Y +A Y +C Y +A Z +B Y +B Y +A Z +A X +B Y +B Y +B X +B Y +C Y +C Y +C Y +B Y +A X +B Y +C Y +C Z +A Y +B X +C Y +A Y +B Y +A Y +B Z +C Y +C Y +C Z +B Y +C Y +C Y +B Y +C Z +C Y +A Y +B Y +B Y +A Y +C X +B X +B Y +B X +B Y +B Y +B Y +A Z +A Y +B Y +B Y +B X +C Y +C Y +B Y +B Y +C Z +B Y +B Y +B X +B X +B Y +C Z +B Z +B X +B Y +A Y +C X +A Z +B X +B Y +C Z +B X +C Y +A Z +A X +B X +C Y +B Y +B X +B Z +B Y +B Y +C X +B X +A Z +C Y +C Y +C Z +B X +B X +A Y +A Y +B Y +C Y +B Y +C Y +B Y +B X +A Y +B X +B Z +A Y +C Z +A Y +A X +C Z +B Y +B Y +C Y +C Y +B Y +B Y +A Y +C Y +B Y +B Z +B X +A Z +C Y +B X +B X +A Y +B Y +C Y +C Y +B Y +B Y +C X +C Y +C Z +A Y +B Y +B X +B Y +B Y +C X +C Y +C Y +B Y +B Y +A Z +B Y +B Y +B Y +C Y +A Y +B X +B Y +B X +C Y +B Y +B Y +B Y +B X +A Z +B Y +B Y +C Y +B Z +C Y +B X +C X +C Y +B Y +A Z +B Y +B X +A Y +B Y +B X +B X +B Y +B Y +B Y +A Z +B Y +C Z +B X +A Y +C X +C X +B Y +B X +B Y +B Y +B Y +C Z +A Y +A Z +C Y +B Y +B Y +B Y +C Y +B X +B Y +B Y +B Y +B Z +B Z +A Y +A Y +A Y +B Y +C Y +C Y +B X +C Y +B Y +A Y +B Y +C Y +C Y +B Y +B Y +B X +A Y +B Y +B Y +A Z +B Y +C Z +A Z +A Z +C Z +B Y +B X +B Y +B Y +B Z +A Y +C Y +A Y +B X +B Y +C Y +B Y +C Y +A Y +A Z +A Z +A Y +C Z +C X +A Y +A Y +B Y +B X +A Y +B Y +B Y +B Z +A Y +B Y +B X +B Z +B Y +C Y +C X +B Y +C Z +B Y +B Y +A Z +B Y +C Y +A Z +B Y +A X +C X +A Z +A Y +A Y +B Y +A Y +C Y +B Y +B Y +C Y +B Y +C Y +B Y +A Y +B X +C Z +C X +A Y +A Y +B Y +B Z +C X +B Y +A Y +C Z +B Y +C Z +A X +C Y +A Z +B X +C Y +B Y +C Y +B Y +B X +A Y +B Y +B X +B Y +B Z +B Z +C Y +B Z +B X +B X +A Y +B Y +B Y +A Y +C Y +A Z +C X +C Z +B Z +C X +C X +B X +C Y +B X +B X +A Y +B Z +A Y +A Z +B X +B Z +B X +C Y +B Y +B Y +C X +B X +C Z +B X +B Z +B Y +A X +C Y +C Y +B Y +B Y +A Z +C Y +B Z +B X +B Y +A Z +A Y +C Z +A Y +C Y +B Y +C Y +C Y +B Y +C Y +C X +B Y +C X +B Y +C Z +B Y +B Y +B X +A X +A Y +C Y +C Y +B Z +C Y +B X +B Z +B Y +C X +B Y +C Z +C Y +B Y +C Y +B Y +A Y +C Y +C X +A Z +A Y +B X +C Z +C Y +B Y +A Y +C Y +A Z +C Y +B X +B X +A Y +C X +B Y +B Y +A X +B Y +B Y +C Y +A Z +C Y +B Y +B Y +C Z +C Y +C Y +C Y +C X +B Z +A Z +C Y +B Y +C X +C Y +B Y +B Y +B Y +C Y +B X +B X +B Z +B Y +B X +A X +B Z +B Y +B X +B Y +B Y +C Y +B Y +C Z +B Y +B Z +B Z +C Y +A Y +C Y +A Y +B Z +B Y +C Y +B Y +B Y +C Y +B X +B Y +B Y +B X +B Z +B Y +A Y +B Y +C Y +B X +C Z +B Y +C Z +B Y +B Y +A Y +B Y +C Y +C Y +B Y +C Y +B Y +B Y +C Y +C Y +A Y +A Z +A Z +C X +B Y +A Y +C Y +B X +A Z +B X +A Y +C Y +C Y +B Y +C Z +C X +B Z +B Y +B Y +A Z +A Z +A Z +C Y +B X +A Y +A Y +B Y +B Y +B Y +B Y +B X +A Y +A Y +B Y +C Z +C Y +A Y +C Y +A X +B Y +A Y +B Y +C X +B Y +B X +B Y +C Z +B Y +A Z +C X +B Z +C Y +B Y +A Y +A Y +B Z +B Y +B Y +B Y +B X +A Z +A Y +B Y +C X +A X +A Z +C X +C Y +B Y +B Y +A Y +C Y +B Y +A Y +C Y +A Y +C Y +B Y +C Y +B Y +B Y +A Z +B Z +A Y +A Y +B X +B Y +A Y +C Z +A Z +A Y +C Y +B Y +C Y +B Z +B X +C Z +B Y +B Y +B Y +C Y +B Y +B Y +A Y +A X +B Y +C Z +B Y +B Y +B Y +B Y +C Y +C Y +B Y +B Z +B Y +C Y +A Y +B Y +C Y +A Z +A Y +C Z +A X +B Y +B Y +A X +B Y +B Y +B Y +B Y +B Y +B Z +C Y +C Z +C Z +B Y +A Y +B Z +A Z +A Y +C Z +B X +A X +B Y +C Z +B X +B Y +B Y +C Y +A Z +B Y +A Z +B X +B Z +A Z +C Y +C Z +B Y +C Y +B Y +B X +B X +B Y +A Y +A Z +C Z +B X +B Y +C Z +C Y +B Y +C Z +A Y +C Y +A Z +B Y +B Y +B Y +B X +A Y +B Y +C X +B Z +B Y +C Z +B X +C Z +C Y +A Z +C Y +C X +C Z +B Y +B X +C Y +B Y +C Y +B Z +A Y +B Y +C Z +C X +B X +B Y +B Z +C Z +A Y +C Z +B Y +B X +A X +C Y +B X +A Z +A Y +C Y +C Y +B Y +C Y +B X +B Z +C Y +B Y +C Y +A X +A Y +C X +C Y +B X +C Y +A Z +C X +C Y +B X +B Y +A Y +A Y +B Y +B Z +B Z +A Z +B Y +B Y +B Y +C Y +B X +A Y +C Z +A Y +C Y +B Y +B Y +B Y +B Z +C Y +B Y +A Y +A Z +B X +A Z +B X +B Y +B X +C Y +B X +B X +A Z +B Y +C Z +B X +A Z +B X +B Y +B Y +C X +C Y +B Y +C Y +B Y +C Y +B Y +A Z +C Y +C Y +B Y +C Z +B X +A Y +A Z +C Y +A X +A Y +A Y +C Y +C X +B X +B Y +B X +B Y +B Y +C Z +B Z +B Y +C Y +C Z +A Z +B Y +A Y +C Y +B X +B Y +C Z +C Y +B Y +C Y +A Y +C Z +B Y +B X +A Z +B Y +C Y +B X +B Z +A Z +B Y +A X +A Y +B Z +C Z +C Y +C Y +B Y +B X +B Y +B X +B Y +C Y +B Y +B X +C Z +C Y +A Z +C X +B X +C Y +B Z +B Y +A Z +B X +B Y +B X +B X +C Y +B Y +B Y +A Z +C Y +B Y +B Y +C Y +A Y +B X +C Y +A Z +A Z +A X +B Y +C X +B Y +B Y +C Y +C Z +A Y +C Y +B Y +B Y +B Y +B X +B Z +C Y +B Y +B X +B Y +B Y +B Y +C Y +B Y +C X +B Y +B X +A Z +B Y +C Y +A Z +A Z +B Z +A Y +B Y +C Z +A X +A Z +B X +B X +C Y +A Y +B Y +A Z +C Z +B Y +B X +B X +B Z +B Y +C Y +B Y +B Y +C Z +A Z +B Z +B Z +B Y +C Y +B Y +B X +A Y +B X +C Z +B Z +B Y +C Y +B Y +C Y +C Z +B Y +A X +B Y +C Y +C Z +B Y +A Y +B X +B Y +C Z +B Y +C Y +B Y +B Y +C Y +B X +B Y +C Y +C Y +A Z +C Y +B Y +C Z +C X +B X +B Y +B Y +B Y +B Y +A Z +C Y +A Y +C Y +C Y +C Y +B Y +C Y +B Y +A Y +C Y +B X +C X +C Y +A Y +C Y +B X +A Z +A Z +C Y +C Y +B X +B Y +C Y +B Y +B X +B Y +B X +C X +A Y +B Y +B Y +B X +B X +C X +C Y +B Y +B Y +B Y +B Y +B Z +B X +A Z +B Y +C Y +B X +B X +A Y +A Z +B Y +C Y +C Z +C Y +A Y +B Y +B Z +B Y +B X +C Y +B Z +B X +C X +B Y +C Y +B Y +B Y +B Y +B Y +A Y +B Y +C Y +C Y +B X +C Y +B Y +C Y +A Y +B Z +C Y +A Y +B Y +C Y +B Z +B Y +B Z +B X +B X +B X +B X +B Y +B Z +C Y +C Y +B Y +B X +C Y +A Y +A Z +B X +B Y +B Y +C Y +B X +B X +C Y +C Z +B Y +B Y +C Y +C Y +C X +B Y +C Z +A Y +A Z +B Y +C Y +A Y +C Y +A Y +C X +B Y +C Y +C Z +B Y +C Z +B X +B X +B Y +B Y +C Y +A Y +B X +A Z +B Y +B Y +B Y +B X +B Y +C X +C Y +A Y +B Y +B X +A Z +A Y +B Y +B Y +B Y +C X +C Y +B Y +B Y +B Y +C Z +B Y +B Y +B X +B Y +A Y +A Z +A Y +B Y +B Y +A Y +B Y +B Y +A Y +B Y +A Z +B Z +B Y +C Y +B Y +B Y +A Y +B Y +B Y +B Y +B X +C Y +B Y +C Y +C Y +B Z +B X +B Y +A Z +B Y +A Y +C Y +A Z +C Z +B X +B Y +B X +B X +C Y +B Y +B Y +B Y +B Y +A Z +C X +B Y +B Y +C Y +A Y +A Y +A Y +B Z +A Y +B Y +A Z +C Y +B Y +B Y +C X +C X +C Y +B X +A Z +B X +B X +B Y +C Y +A Z +C Y +B Y +C Y +B Z +C Y +A Y +B Y +B Y +C Z +B Z +C Y +A Y +B X +C Y +B Y +A Z +B Z +B X +B Y +B Y +A Z +A Z +B Y +B Y +B Y +B Z +A Y +A Z +B Y +C Y +C Y +B Y +A Z +A Z +C Y +C Y +B Y +A Z +B Y +A Y +C Y +A Y +B Y +A Y +C Y +B Z +B Y +B X +B Y +C Y +C Y +C Y +B X +A Y +A Y +A Z +B Y +B Y +B Y +C Y +B X +B Y +B Z +B Y +A Z +B Y +B X +B X +B Y +B Y +C Y +A Z +A Y +B Y +B Y +B Y +C Z +B Y +B Y +B Y +C Y +B Y +B Y +C Y +C Z +A X +B Y +B Y +C Y +B Y +C X +B Z +B X +C X +B Y +B X +B X +B Y +C Z +B X +B Y +C Z +C Y +B Y +C Y +B Y +B Y +A Y +B X +C Y +B Y +A Y +A X +A Z +B Z +B Z +A Y +B X +B Y +C Z +C Y +C X +C Y +A Y +B Y +B X +A Y +C Y +C Y +C Y +B Y +B Y +B Z +B X +B Z +B Y +C Y +A Y +B Y +B X +B Y +C Z +C Y +B Y +B Z +C Y +C Y +C Y +C X +B Y +B Y +C Y +A Y +B X +B Y +C Y +A Z +C X +B Y +A Z +C Z +B Y +C Y +A Z +B Y +B Z +A Y +B Y +B X +B Y +C Z +A Y +C X +B Y +C Y +B Z +A Z +B Y +B Y +B Y +B Z +A Y +C Y +A Y +A Z +B X +B X +B Y +B Y +B X +B Z +B Y +B Y +C Z +B X +C Z +C Z +B X +B Y +B X +C Y +B Y +C Z +B Y +C Y +C Y +B X +C Y +A Z +C Z +B Y +B X +B Y +A Z +B X +B Z +C Z +C Y +C Y +C X +C Y +B Z +A Z +A Z +C Y +A Z +B Y +B Y +B X +B X +B X +C Y +B Y +B Y +A X +C X +B Y +B X +B X +B Z +C Y +C Y +C Y +C Y +C X +C Y +A X +A Y +C Y +C Y +B Y +B X +B Y +B X +A Y +A X +C Y +C Z +B Y +C Y +C Z +B Z +C X +B Y +C X +B Y +C Y +B X +C Y +C Y +C Y +C Y +C Y +C Y +B Y +C Y +C Y +B X +C Y +B Y +B Y +B Y +A Y +B Y +B Y +B Y +B X +B Z +B Y +B Y +C Z +A Y +B Y +B Y +B X +B Y +C Y +C X +B X +A Y +B Y +A Z +B Y +A Y +B Y +B Y +A Z +B Z +B Y +B X +B Y +A Y +C Z +C Z +B Y +B Y +A Z +C Y +C X +B Y +B Y +B Y +B Z +C Y +C Y +A Y +A Y +C Y +B Y +A Z +B Y +B Z +C Y +B Y +B X +C Y +C Y +B Y +C Y +A Y +B Y +C Z +C Y +C Y +B Y +C Y +A Y +C X +A Y +C Y +A Z +B Y +C Y +B Y +A Z +B Y +B X +B Y +C Y +B Y +B X +B Z +C X +B Z +A Z +B Z +A Z +C Y +A Y +B Y +B Y +C Y +B X +B Y +A Y +B X +B Y +B Y +A Y +A Z +A Y +B Y +B Y +C Y +B Y +B Y +C Y +B Y +B Y +C X +A Z +B X +B Y +B Y +A X +A Y +A Z +A X +B Y +B Y +B Y +A Y +C Y +A Y +C Z +B X +A Z +C Y +A X +B Y +C Y +B X +C Z +B X +B Y +C Y +A Z +A X +C X +B X +B Y +B Y +A Y +B Y +C Y +C Y +C Z +B Y +B Y +C Y +C Z +B Y +A Z +A Z +C X +B Y +C Y +C Z +C Y +B X +C Z +B X +B Y +C X +B Y +C Y +A Z +A Z +B X +B Z +A X +A Z +C X +A Z +B Z +B Y +C Y +B X +B Y +B Z +B Y +B X +B Y +C X +B Y +B X +B Y +C Y +C X +B Z +B Y +C X +C X +B X +B Y +B X +B Y +B Y +B Y +B Y +B X +B Y +A Z +B Y +A Y +B Y +A Y +B Y +A Y +C Y +B Y +C Y +C Y +C Y +C Y +C Y +C Y +A Z +A Z +B X +C X +C Z +B Y +C X +A Z +C Z +C Y +B Z +B Y +B Z +B Y +A Z +B X +B Y +B X +C Y +B Y +B X +A Y +B Y +B Y +B Z +B X +C X +B Y +B Y +C Y +C Y +B Y +C Y +C X +A X +C X +C Y +B Y +B Y +B Y +B Z +B Y +B Z +B Y +B X +A Z +C Z +C Y +C Y +A Y +B X +B Y +C Z +A Y +A Y +B Y +B X +A Z +B Y +B Y +A Y +C Y +A Z +C Y +B Z +B Y +B Y +C Y +C Z +B Y +B Y +C Y +C Y +B Z +B Z +A Y +C Y +A Z +B Z +B Y +B Y +B X +B Y +A Z +A Y +A Z +B Y +B X +C X +C Y +C Z +B Y +B Y +B Y +A Y +C Y +B Y +C Y +C Y +B Y diff --git a/3.hs b/3.hs new file mode 100644 index 0000000..5bca9c1 --- /dev/null +++ b/3.hs @@ -0,0 +1,31 @@ +{-# LANGUAGE ScopedTypeVariables #-} +import Data.Char +import Data.List.Split +import Data.List +import Data.Maybe + +main = do + ls <- readFile "3.in" + putStrLn . show . solveB $ ls + where + solveA = sum . map (priority . (!!0) . findPair) . map splitCompartments . lines + solveB = sum . map (priority . (!!0) . findTriplets) . splitGroups . words + + + splitGroups (a:b:c:xs) = (a,b,c):(splitGroups xs) + splitGroups _ = [] + + splitCompartments x = (take half $ x, take half . drop half $ x ) where + half = length x `div` 2 + + + findPair :: (String, String) -> [Char] + findPair (xs, ys) = maybeToList $ find (\x -> x `elem` ys) xs + + findTriplets :: (String,String,String) -> [Char] + findTriplets (xs, ys, zs) = filterPair(xs, filterPair(ys, zs)) where + filterPair (xs, ys) = filter (\x -> x `elem` ys) xs + + + priority c | 'a' <= c && c <= 'z' = ord c - ord 'a' + 1 + priority c | 'A' <= c && c <= 'Z' = ord c - ord 'A' + 27 diff --git a/3.in b/3.in new file mode 100644 index 0000000..606e5e6 --- /dev/null +++ b/3.in @@ -0,0 +1,300 @@ +PnJJfVPBcfVnnPnBFFcggttrtgCrjDtSjzSS +llWlLbmmdLLwLbqGdmTmbZfCQtzrMQfrjSzrtSrMqgMt +sHlZTsWZwGGlZmGTmdlZbhJNRPphVfRvVnRBsRsJJV +fsHtVbjtqstBghhwwPBw +SDQzzSzQrQMmmQlmlcNcJLZPgLrVZTdCddhgdPwwCw +JmSWSVGGlJJbRsbpWHfbRj +tJndRtwtddPvllvfrldrfPpHWDgglFDWWmMmHWmHpZlS +BBJTTjCsJWZCmSHSZD +LhqLcVzshTNjhqhcjLLTLjbTnGndfdwrfPRVRrdnwftQwJRv +wHlPJZwbbZfqbFwqFZfrrcrJrtMWSMMVtVcJht +NzzzNBjNfLzvGfDNjMhVhrrMShLchsRVLs +DDdmmgBGDNdgfgZggnZbZHln +jqNjZJqsGsRqJJqnlJJGzMzffcffTCfQcFmvcWfvTNfcvv +PdhVdrwphhVtDdSPLmFCWTLFWWTfFQQr +dSPwbbVdbpQllZMQbMjM +QQdfflqvjTvfZqLMWfNDGhwsCNGGGM +rzRRRTVTPTNhsDWDRhGC +gHSTpTnppvjQgJjcql +nzNvsFBBBFsNrnNBrvndfThwDbhVPzVVwhZZChpZPCbZ +GMQQStmcHHmlfMtPwbZVVVVhhPhbVc +GmSmMGlmWWgqQMHgQHtSvTNTTrgBBvNvFsfTfLvd +VNVBgRRBRzWRRbRTrTBgbzpZvMvMJlQJZJpJvlTMdJlp +mfdfdfdHfQplZJJh +ttnPmsLHmqsPGgWjjWRbBdbbGj +mMMzwFFpnwgMggSzhQSbSJbhWzbr +NPRlHHPbPRdPHCdRNGWWhWQhJVVGhZrCCJ +LlNbRllLLdHnpLgMTgTsDT +mWhvwmthrzJrLhvftwPrtNHlbcHgbDzNDHcGgzllHl +TCjdSCFMQCCCjMspCMQBMqpFHNGblPPnGNNbpnpccZGccclc +jVBPsqdFMFsTVMsdMmfwhwvVwLrvWhVtJR +TdhJJttgmdgctBBhBwBqBCLWqC +fjNGPblpPlRDfsfGbfcWqBqwWvnHVvBLVHss +lpRNDGjbrGfPZbmZZMFdTzTgcFdS +WPLMvWLMqLcSvrrBmDPFfRzmDPRfZDHP +dCggNCCdNCbHTHTfFnNHzM +GlJVQjdCCwjMGbGpjGdCpqrtctqcttchsrLLcthlhc +jgPHPgjGCwrqjqrvzBfFfCTTCdFpDD +QhQLtcrQQLWshQttdzzvzBnhvvBhvFTv +RJRssrQSWQSqjqqVSSGP +sPszmnmnQPQbjSRVVjbRjVVB +cdvZqMfNchMMMqCBlBZlmSmWCHBj +dFFDqJNNJvTJTqvvwmGQsGwJztgrwsts +dJGPMNStSclWJSPScMNMzqqDfzqVzwwjGfzjqfQz +hppFbrhFrrhgCpFlFhvFTgrsDfsjVzvLDfqwVzzwQDsVwL +RrgnZbphTpbgrnZgmpbhFcMlnWdMBNWJdtNJBMMSMc +HqtfLZCLmLtrSqZStzFtwpPQWlNQBpplpQWmBpNp +jMJcnRFcJjvjvcGvdJpBppBwQBpwQWPW +DcvDgbhjMMsjGvcjRRvjvgbGtsTZFHCCHSCHZHLfsSsCSrZH +wvFPFqvjlgTwjvjZbMSzHTSScMBBbN +VVmpVsmmptfDsdSZbMzZzMZBtB +LVhfGJVhQsWhVJhfmGJMwljFvqWrlPvCqrqjFFvj +cdNbtwrtwrRNLzhQhHfCzbGzQH +DMlMgFDBMSBjMTqMFWMFDQHdGZHvQdTHHvHzHChJJv +MBVWDngVqVWlqqBgBjjcsPnwnNdNsPNPpRcLws +pQqHsBmmrQHrrmsmmpwMdfdPbfWPMVbMdWbPwG +ZSvZDlvghgSDZCSzJZzgZNNPFRFMVRVfMdbFPddfMzGRWR +vWgJhSntvglSgDCHsjHBBpnTrTmjmB +hDgmmgnwDCdddRCqCPzz +sSslHbctbHsNrhpZqdqprc +WbsHSBQHQBLHTWJSlmjnVwFDvWhnvjmfgv +phwdhVLRddWJLVglLWRlWWgwhCjCrrrHZmCjZNHtjvvZrHTN +zzFzPQqFDcFsHsFPHSsGSCCNmftjjNDjCfCCCNfvrr +BSQsqFQMcPqHbcGzFMWgLlgwpLlpJLLpBwnp +GTrsHGGHfGMvsrGsvnGcHsvTwhghwhpVpJhQpwhQghhmmm +bFPFPPtSdPtSZPZWjSdZSNFdmhDJQgRQbQgmhJgJmRwVQMRh +jPdjldqlSNBdFBjtFZsfsGMqsHCMcqcfvnrf +crZHHZcZZsSrVrSCrBNTTpppBpJBCbwbBn +DzhRggfhhlRghmBNBpLJwDpDDTNp +qvwqwPRfvfzPPRvQlfPvPlRjZSHZrcScWrtVQscjjtZHMS +GRGBgsgghbvRvgsBTsgRjjznCCtSVCZtCFZtzFtwnSdj +cmqpPNnWWPrqWHplHDDcpCddFfZdFtdrwzrfdVFFdt +lPNPNPcqpcHWmPLllDDGhbRbnMgLgRbvRsbhhg +ZRBBNFWWBWPDZZprnwVvDD +bSzzhHdttMtCCzCThMTShStcvrqNNjwnrcvqvvVVpprvnnpN +CStdTMLztMmTSSMTSSSfBQNWlsFRJRPfmlNRNB +pMLptvGHTSGSHtLLwNWvcqsJmWWzmPFFms +nrQPrjrddgQlDPZjdlBcFFzFsFWhqWgshszhNW +CZDCQjjBBjrnCfQCrZrbSbHLRwGftbfPbHRMfp +sqQHBqsHbwDtmbSB +GjVGrlsMsPjbPbPmTtSwDb +lzFFGznLGGrLrnrVzMzsqvpqvWQcnNZWvCpnqpHc +nZWZjdWRwhRdBRhhdNZMtHtpPrGCCGsrTGsG +DzFFbblvbzFvVJzzzlVmvlpTpMpMrMCgGMtprJgCMrPM +zVmFzFvfzSmDzmCmzmmVQwNRqdRhcWBqShjqNndWWj +QQTdgLQlhGhQdPbwJJgwRVmtNRBV +vCSnjzFqSDDFMDjvrqvjvnVBRsNJRpJwtNJNpNrtbtbt +DfnCCjDMzcnqvHZGlcTcZThBlG +lWtmssWNcBjTjhlLpn +fwJbgfQfVfqPwmdgJjppHTjCphppBHCnhV +bgvfmvmbqdfDqJvqgbPJNDNSMscNDtccDzzcNtRt +ttBHSflTlqwGGQJBQq +jvdPdPLsDvCzvVqVQQGw +ZDdZnPrrPLPLZMZlfWSqmmTWmtTMtF +ShhwCZSwlPwZPSplwlRGGVmttWVVQcJVnJtSJVLcjc +qmzDmgNqNfgtJWWqtQLJqL +rsFgvrmFdfRhPBRvRRPZ +RQQRGJRpfJzlTQmbfbsGlsTMSHMPgcMFpgqPHHpHqqPpcP +WmLZDBBLZLNVdjWqDCFHCMccSPgSgg +thrNBVVBrWZNBWNrRGQbRtJGzlRRbmlf +NfdjBfsnDfNjfBddNBnBwsQShzQDhSDhvZSRDpFRSVFQ +lHrbTgtLmrblPzShhRpvRPZPVz +tWbqHlHmWHgWHtqrLJJsvBwnBfjswjwnNMwf +qQfdCVqZSqZmQmgVqCqCWTMcNFTwWwTccgpcWcpw +nSLrjrJnLcTwLNcz +sjRjSnJnRsBlPtnqCqCGfCbmQGHfCl +tqSmNPNcVrNNmPtHfMZbCWMCZbHwfdzW +RwgGvFwFdsssgjdb +LnLhhnFDStLJSrtw +HHGCHgfjgjgzNSTgJTDJ +WdMbDBdQLLZPWZVZZmLdzqqNbvzswSzrqqsJwSNw +QQmQBmWQZBmRPGfRjRcHccplpD +zFpjDvzDzWWvWBqDqvQcjsfbHPjHsVjcPGffGc +TttwldmlTPSCCZmhlNggwffhHsshRsGssRsfGHRhHf +twmMMmltZdNNlZLLMrPWzrrprpDr +ChCnpqhzCdndsDCnVpVJBgLTpTtgVggL +swHPGmwHbjPjvjQsGLSgVMtgSLLTVBHSrg +mRPPwvbvbvQjljvbPvPlfwWhsnhZDzFnWhDFdWcdhZWl +ndnSZSfNgmmSZlbllglVVsBCfqFBfttpPFtsqV +DJwcMzJDwLcMHMDRMRrtVWFWtCBqBWpWCzzP +wvcHhRcTJJvTRLRvRhwTQTHdQjqqGdgnbGQgSbqSbgNSdl +MHtvCFtCFvMvBDcVfjhhQf +WJZWSgZbdlwZZsbTbwDhcBVQhmTTTcfRjmjD +WwwrBwZsSJWwFttnLrMCpntn +BJgWJVSPVzNJNPZPVHBJHBfdhbjDnbQndnBnBQfndQ +MwMsNmNpmsrrwLssvsvpRpvQnCqbCCQfCfhhbDnqCfqLqn +MFvtrmGMFwRmFvcvMFmsWSVHWVHNzgZWTtWSTPSZ +wWNsHswfsWnVvNZvMLDRRpcLMBDnBlpR +QFdhqzFbzmgbhzQhFSLRrpBBBRcRBcLldpWc +SbmhzChGhqgQFFzqGJhwvtvNWCtVjVfwwZjHjT +WHGDHBRQHDBBQpGzBzQlDVjPmmVtbqbLmtPtzvmZbb +nchMhdMgCMJcwvLZvVcffjZfmq +ndhghggCwSnhCnnTNSdBpFWQFNLFlpHQpDLRGl +FZdjbqjjZTFbRHfVwgttfBZrBpBB +LJQFJWhPPnQJJQCPQpzwphczchrgtrfBrf +FFWvnlLGDGRMDHjm +jCsCNZTTfjcQMLWTtvHQvG +mgwdznllpRgBgpBDdnDDzBDmdrMHMLjtvvHJtLrWrHQWvQtv +lgjDpVSppmqsqssVPZPf +NcNwtChhScfPtwVRgmvWvWvNllVg +nZGJMJLnqqGzLzrGQvlmmgrTmWWlcVvR +LLdMzdssLZnMMbbZBJGsqLcjwjwPffpdtjFpFhPdFwjFFD +wQvZHfbLjrMZSVWMZSdZ +wwqhwtTRRpCCMmsnVlWGMpWM +qBDcqBTBtJCBDqctRDCBCzDFLfbfLwvfbQcFHNvLvvfQjQ +QDFwwvLJFjWQvWgGNnfNftCJPggP +lpqdpqqrqBBpTTBsprpsTsbrNGPfCPzftfPMMGztfzNgNflM +sqdpHrcbmTTHTdcspZNbZmDSQLQjhhSSWwvWWFHQvLLh +gjQHjfqgVSqjqMSnCRMDMvCGZDvCNCNJ +FnLswmdphJchhcZd +bslwFmLTTbWWmlmbBLwlpBHPPBjqHjBSgPSSSfrVnzqQ +JddrdBgJpChGfDLDDpcm +WnSFqRhnjjWSSlSFWqTFVSLGbDLcbLDDvDLztbftVzcv +nRWjsRjQFnQRshgwJCZwJrhw +rnbZwrcZQdpsLpHDVWBBBgDv +NNTSFCqJFMMMSJqTFFPttmNPlwgLvWvgWBffWlClLfvlVCVv +TMTTJSJFRNwmjZsnGsrhnZZR +CMZhZstZqlClJScfBrfHHHFWFFHh +RwGdpjdGVGdmNHcfczpJWWpf +dDJnQbdnwQdbggSPgPsnlqSn +hnczBfznJFmzhnzJLLMwLjmQrppgCjqC +HRRlrPRZSDtQjjPQNMPpPw +ttlZHDRGRlRtGltTtGvcbnFrbvWJhvWhndcFWF +hRsCqfRdqdqfqdtqmMmmZpStMTZZSTnp +VjDDjWbzPFFwPRPFDjzLSnTMnZSGZMnWpLLmpL +PVHFNBzDRbDwzjNNzHdvdHvlhhcHgvCglf +cRLLzhRBhLhVLLLMnnRVVhtJgNgPJmPgPvDPJgvzvvNJJP +lpFffHHWHbbMNPQgsgJJmW +lpdplSpHSHlCCTbSpSFwdnLqMwcdBRRRLdRnth +csZWwFFZbtbztcZttbnRbGlbJhqfnhlpnn +mmTjjBLdSMQdBggQHNgTmjgJJRqRhCJphRHRRClGnhlWJJ +MNMMNTmBLDmTLDSQmFDvvzwPWzsvDZFFcD +fmflRfGcCtGDDbRCRlhCmmBJQsvBBWWvtWBnBJvLLvLn +GFjdMMFGzVQvWWVWJQVJ +wjTZzjrFTHgZjTFjMwGRcfRcqlbhcccrcmmlqC +PvnvjHPnjRPPqvvnPqZNNWHTSdVDHwTLSDWDlTTTLl +MJswhgppwspJpJsGbhchbcMlLLDQdVSgVldtSlSlSTdTld +FwzwJzpfzzJRPZmPBvvmBF +ZrJhslhhclDJhrDZllcGGrZnFCCWNMCHfsFbPddwdwWwCCfP +BTjgvtBBSLqqBSLVzgTpBVMFHNPHwFbSwMPbMwbHMCPf +fRtTppTjRJmrmJDR +hJzcQcwMQhcQwZHVNmSmPCQZSm +tpfvgWFFGGfRWFBqtPrHCmSwPPVPwgVgPC +fpWBRqWqqGRpWWRpFWssMnLczJnnwcjscsJnLhbz +HggzqvvrgtlrrHlQtvlJqFdfBLFJBbnfbBBdfBBfFd +SVVmpZVsRLZGGZwRGZSTDWBbmBFBdFBnnFCnWnBfhB +wpjVppVpZLRTGZQrrjjHNzcgvjrg +GsMgMCFGMsbwbbSwwglS +mJDMqRJzTRVdPWttPffZppBBfS +dzcdqQcmQMGnHCsQ +HlPgHwlHVwsVPPFVsNwzwLnmRmCCMcJcMRRLqGtRjCjJ +dWhrWdDnmrrRMRct +BZDvBpfTDDfBddWTZhDddWDQgwsFsHVvVHgHHznFQFznlQ +FjmqFqJJGsBGGhsZdRDDRZZjTvdMdt +NnHPngrPbPpbPfVvfCrnwccTwrRwTZdcdTZLwRTD +lbbPvHWlHCNNnJzGJlQsJlsBBq +mLNRpRDcDDCmCpzTcCPcNTTDrrnrPrPvjqtqhnhhhqQQjrhF +dVMlVGgVSlGgWgsWSZlwtrHvqMjhnrhQjnBBqHqvhv +WJfsVwZfJGfdLNmcmCcCtztf +bBTtWQDMpDSjjznztCLd +JhfZfrNPPwNJrhqRcJjfCCCzLSGLbGGjGznj +RsPRZhwNbgbrgbBpBWWsQFvDMTDF +rqLzTmqqMmmwrqwrJJwPTplhbRDphhdhDvnnhnRDnP +ggfctFfSRNgZFBRVfFfWfZNSvjjvjCChpDhhDCCjdvlDDD +NQfFRFgtffcGfcgZcfBqJrGLJJqLTwwmmHJrqz +WVGJCltslWJsbbtNJbDJPMrPLBNLrpNjfqQQMMNr +nTFnTmdRnTmmmdHZZnPQpLMfMZPMPqLZDqLf +HRvRFRTvvvRmnvFcFRndcwVVJWWGbsJGwgttlCzJlGDg +rfwdfLwLwwNdwbLcgCCTtFPvFPzWtWVtzvJF +MpjqDDQQRmQjDspzTWWthVWRvRVRzn +ZTQQQqlQZsqlrlgwNlgLcSdf +QqBNgbNNJvcgnbBQQgJjQZSJWppPWsGpDpSGPpWTRDTp +rrldddlrChLFpWPSSPWvPGCR +fhFltdLhHwVfvgcZZqjzNNtQgt +BMCMQZSMvSZSQTQTWvMSvrrTccgGRNljBFglGRgBVgFGRRGc +ffmdmwdLbDJwFVNlGRRVVbRR +dwJnJLfJwLhnPQSSNMvMqhMP +RpQDDCHQwMRpwpNMCwpZhgZrPSqQdgrqPqPZqq +zbtzmzzGbVzJSTScZqrthddT +LVLJlLBnGnWNHMDRHnCCDh +wQDcLhScLLBStHhctwVwsBjNTrssTjgNsgGCgssj +fWblbRqMZWRffldFZpqWRbTCsPrsTNgnCQjgTrMGGgsr +FZRpqdlWWbZZJJJppWWdHQVmLLDmzwDcLSVcQJLw +DlllCDRlflQRsRnlCCBhzvLFVhJzJVzh +jHjNNqdHqwNgpgqNcpgZwjZhJJbvdbPVhBbbvVvBvLzbPF +cpcgSwWqgVnftSSTTf +QmLZvjwwmDWFLNLqbqfF +JJSBMBpdpgSBRBHJgdHBNVbsgqVlqfbVFVlqVFqb +pCttfdCRMDCjhPDhmQ +nDjnzdcDbDtGdcQTvssHssHbbfTq +lVgRgpWCrMRVgVglRLjJmQFHqHHHsqFvFfTQsHSfMQ +VrlpmWmgWppllLpPPWPWljPBntcnhdBNPhZBZhGdDd +fQsRRfBHvRRjjvSgTwCTphdlphqBpn +WJrDZbrNJZPWJcZmWLrrbPczpCnTddqdshqhDgTTwlwwTqhs +brcPbZPcWGWssGtVfVMjFF +GBZgqHhHGBZcLcGMjVJhrjrbStjbbb +wTTNFPQpvDQTQLQvntRSbRJjVnrSDtJV +TTwzQzPPTvmWLTTcdWfdGdZgfZHfZH +VswNdtMgdsvQDJgdVNgQrrLlhrSCLflqfLrDnzLL +RbjRbcZGTGpRbzrTqChtflhSnt +mBjPRWpGcmBZGZpmZjtRbQQVwJgsPsQMsvNJdsVFdN +TDmDTTThRDbbZtpTSnhRcFJMglldGdrJltgBMtMB +jNjsWLqqqvzWswNqdccrFNBFMBlMrdMr +LjjqwvsWCwjHwQHHTbDHbbRZmnRd +qtnncCFCqjwjcDwnFQSGGRSBGBSvFdvrhR +JPZzpgPJWNJBRhqSvQvBgB +mZmJmMPWzmWmPLbmqTTJPfDHnHjCjflHjflfDcfMwC +VfJrplTqzVVlVVlpfTMJfqDtWSLgbHgDjSHLgjHWjrjb +vhGsRdsNRPRvvRhjSZjJLPDjDJttbZ +GvGhQmhBnQNmnJGvhdFqBFVqcllqMBCMlVCc +cnmsmmDCBDmcmvVnsVBtQQWWrrltQlrBfRHB +hqphjLZFhMMjZQGQWGfftQWf +JhFqhbjSLjMpqzJFbSLdFSggDwgmgcDVsVzVfvNvDvsm +mRdspZZggmbJbpDcDJDqPhvvGvrnVqPqpzvVVV +dSjSjQtwfQlLwjQSPrrqVqvGPGPVPjnP +fMQtFQLHSfLtHFttHMflfwHWgFJsDbmJRDWdFBRJWmcbsJ +lMMftpGHMntGtMMGpJnSPQvwzvvHscsdQscQsscQss +hbfmWWLggVFjVVQdvbQvbcdzwbRR +qZWFWTgTZhrLhLmWGlGGrSnJSNfGtSll +QVGdmgVGLdllrGVgnZrdBvNvBSSjSvWtBHBqNNmv +ThRjRFwpfTNBBqSBSSvT +MFzbzfDjFFCCFJpRpFwbwJRnZndDgsZlgLrQLDgdlglZnD +PjbDQvQPjbjjvtrQcpHBWnLfqnqGcHngnLdf +VTwmMzMFnqHBwHBB +lMTTNCzCZmClVVQjstQpPlprlHSp +MtMqBtwFFsMRZMMZMjJGZR +PHbpbPqHmVVCRGGCGRjv +pdrrgdrqPbpzrHQbbqQPLHcQBsNtNnwzNhSFfhtfffFffwDs +cPjpPcRJJVtSGGtJtffN +CldrWrmDHnHnmWmTWsNzzfbbFNhtsbbNGGfb +LCDTldCmnLLVwPVgQt +NJpFrbpFZhlzhbzzqCtgMCgRbqCRMMtm +dWcnntHQWcjRHHCVMqCsRg +vLnQDvnGptrzLPwp +dwTwTHwvZHqTrTRTlWtfzt +GbFFbFBPnGQBQcQcLbPjFtCSrtgMMLrMfrrWgRgStr +PnBnQhsGPQbnJRqwdRDwvJNDwq +zzjWtnQRntzSBjZccmZmmC +bdJdbdfJdFCGflfGwBJsmhmSMgmgcsmM +qDbGDbvrFbbvGdvdffFdTTWQzrTWTLWLNnttLnCH +WMMssTqCbpGzGSlmzLbG +FVdwftRRVDZPcdZtZVRcjmvQSzzLrmlrclSGms +DVfPFZDZRfVFPFHRPFRCphhMpCTHTsNgqHNWgn +LzBGCRjHCnmnHzdzLLjHwGplflfrfPcgtflgLFLlcrcc +hqhDMSSqWZsDMVWTVWmTcglglflFVflFrpPtggcv +sshbJsTsqWMbqNWbhbzzjzGBQjCJQnzwmzBw +QnpfLpbLfGbvgjHzjgmNRqbz +SSMBMZDwMwFsqgSPPmHlHj +BhMFJhMBddDMFcTdMVddrQfvrnCqnCffpqnVCLtC +lhrTZNJZjCRjSCvRSlTSLlrvFnMHQhVDnqnmqqqmQqPDHmqF +wcpGdtwtwzcbpzggCFPMqtMQmQqmVqHP +bBfwgWbfwBdGpppGGGbcBsTRLlZTZsTRTsRNZClJsvZL +nJLgNcQDNMlQHMvCbv +zphFpmTszmwhGGFhhtppNfffVlvZvHCCVZzbfzvS +mTTsmTRGstsFhWwtWjPRdjnJdjJnLjcLNd +MfBDjllflHLTpDhhppDDbp +NZBBnGJNnNPWTcTTmVhZCh +PSzgSgwrnzrSzBGJSJrSLQqfMHQfqgRgfjHLljll +RgbNmBbqgWHWRNRqHtcMlMwJJjcDtVlD +SzpFLGPddSGnnSLQZLtJJcclDlVjDQwMhDcc +LtTZCTttRqqqvqTN