Advent of Code 2025, done in C++

day[01]: solution for Part 1 and Part 2

init, Codex-generated scaffolding

+1
.direnv/flake-profile
··· 1 + flake-profile-20-link
+1
.envrc
··· 1 + use flake
+2
.gitignore
··· 1 + build/ 2 + .cache/
+25
Justfile
··· 1 + set shell := ["bash", "-eu", "-o", "pipefail", "-c"] 2 + 3 + default_day := `date +'%d'` 4 + 5 + default: sync build 6 + 7 + # Run this whenever you change build files. This generates the latest build config. 8 + sync: 9 + meson setup --reconfigure build/ 10 + 11 + # Build everything Meson knows about. 12 + build: 13 + meson compile -C build/ 14 + 15 + # Run tests for a specific day. Defaults to today's day-of-month. 16 + test day=default_day: sync 17 + day=$(printf '%02d' "{{day}}"); meson test -C build "day${day}" 18 + 19 + # Run a day's solution on the "real" data set. 20 + run day=default_day: sync 21 + day=$(printf '%02d' "{{day}}"); meson compile -C build "run-day${day}" 22 + 23 + # Clean the build folder. Useful... sometimes. 24 + clean: 25 + meson setup --wipe build/
+22
README.md
··· 1 + # Advent of Code 2025 (C++) 2 + 3 + A Meson + Just playground tailored for day-by-day AoC work. Each day is its own executable that knows where to find its data without manual path plumbing. 4 + 5 + ## Workflow 6 + 7 + ```sh 8 + nix develop # optional if tooling is installed already; brings in clang/meson/just 9 + just # runs sync + build 10 + just test 5 # run tests for day 05 11 + just run # run today's solution on "real" data 12 + ``` 13 + 14 + `just test`/`run` default to today's day-of-month; pass an explicit day to override. Meson owns the build/run logic; Just only wires day selection and delegates. 15 + 16 + ## Layout 17 + 18 + - `src/<day>/solution.cxx` — main for each day (`src/00/solution.cxx` is a stub). 19 + - `data/<day>/` — input directory for that day. 20 + - `DATA_FOLDER` — compile-time string macro injected by Meson pointing at `data/<day>/`. 21 + 22 + Add new days by creating a `src/<day>/solution.cxx` (use two-digit day numbers) and a matching `data/<day>/` folder. Re-run `just sync` after adding new days so Meson picks them up.
+1
compile_commands.json
··· 1 + builddir/compile_commands.json
+3
data/00/input.txt
··· 1 + sample line 1 2 + sample line 2 3 + another line for testing access to DATA_FOLDER
+4431
data/01/input.txt
··· 1 + L14 2 + L46 3 + L44 4 + R17 5 + L23 6 + L39 7 + R2 8 + R12 9 + L50 10 + L11 11 + R21 12 + L11 13 + L3 14 + R48 15 + L11 16 + L50 17 + L49 18 + R47 19 + L43 20 + R6 21 + R2 22 + L17 23 + R32 24 + R22 25 + L2 26 + L37 27 + L40 28 + L50 29 + L39 30 + L14 31 + R18 32 + L22 33 + R28 34 + L24 35 + L3 36 + R30 37 + R37 38 + R31 39 + R47 40 + R17 41 + R39 42 + R24 43 + R34 44 + L35 45 + L17 46 + L41 47 + R44 48 + R3 49 + R42 50 + L18 51 + L82 52 + R82 53 + R52 54 + L96 55 + R42 56 + R52 57 + R50 58 + R45 59 + L56 60 + R11 61 + L97 62 + L21 63 + R18 64 + L12 65 + R2 66 + L90 67 + L40 68 + L60 69 + R67 70 + R69 71 + L36 72 + L8 73 + L7 74 + R4 75 + R7 76 + L96 77 + L90 78 + R45 79 + L77 80 + L1 81 + L29 82 + L48 83 + R73 84 + R27 85 + L9 86 + L60 87 + L67 88 + R98 89 + L62 90 + R12 91 + R88 92 + R75 93 + L3 94 + R50 95 + L48 96 + L62 97 + R25 98 + R63 99 + R9 100 + L27 101 + R80 102 + L53 103 + L92 104 + L17 105 + L77 106 + R77 107 + R848 108 + R97 109 + R55 110 + R22 111 + R29 112 + L78 113 + L82 114 + L91 115 + R8 116 + R49 117 + L57 118 + L65 119 + L84 120 + L44 121 + R93 122 + R11 123 + R89 124 + L57 125 + R94 126 + L17 127 + L20 128 + R69 129 + R98 130 + R4 131 + L90 132 + L62 133 + R46 134 + R35 135 + R456 136 + L56 137 + L97 138 + R46 139 + R109 140 + R142 141 + L7 142 + R167 143 + R20 144 + L38 145 + L26 146 + L5 147 + R89 148 + L3 149 + L30 150 + R33 151 + L46 152 + R16 153 + L43 154 + R37 155 + L64 156 + R93 157 + R71 158 + R36 159 + L25 160 + R40 161 + L15 162 + L14 163 + L421 164 + L65 165 + L85 166 + R82 167 + L21 168 + L520 169 + L76 170 + L33 171 + R153 172 + L26 173 + R52 174 + R474 175 + L1 176 + L1 177 + R229 178 + R90 179 + L78 180 + L39 181 + L94 182 + L6 183 + L51 184 + R35 185 + R16 186 + L22 187 + R42 188 + R72 189 + L52 190 + R18 191 + R63 192 + R79 193 + L29 194 + L71 195 + L12 196 + R12 197 + R35 198 + L35 199 + L97 200 + L23 201 + R91 202 + R77 203 + R52 204 + L241 205 + L69 206 + L90 207 + L5 208 + L95 209 + L54 210 + R4 211 + R530 212 + R20 213 + L424 214 + L76 215 + L69 216 + L10 217 + L84 218 + L63 219 + R26 220 + R125 221 + L57 222 + R86 223 + R336 224 + R910 225 + L80 226 + L75 227 + L145 228 + L47 229 + L53 230 + L76 231 + R68 232 + R8 233 + R45 234 + L58 235 + R913 236 + L85 237 + R85 238 + L28 239 + R17 240 + L15 241 + L74 242 + L72 243 + L28 244 + L51 245 + L810 246 + L75 247 + R189 248 + R47 249 + R99 250 + L16 251 + R732 252 + L15 253 + R580 254 + L680 255 + R83 256 + L83 257 + L92 258 + L46 259 + R95 260 + L29 261 + R72 262 + R28 263 + L28 264 + L53 265 + L5 266 + L89 267 + R73 268 + R82 269 + R92 270 + R58 271 + R34 272 + L92 273 + L138 274 + L33 275 + L29 276 + L15 277 + L11 278 + L5 279 + L75 280 + L80 281 + L78 282 + L36 283 + R14 284 + R86 285 + L67 286 + R25 287 + R142 288 + L90 289 + R90 290 + L48 291 + R48 292 + L89 293 + L886 294 + R59 295 + L69 296 + L915 297 + R426 298 + L61 299 + R82 300 + R53 301 + L62 302 + R62 303 + R30 304 + R7 305 + L37 306 + L99 307 + R399 308 + R88 309 + R12 310 + R216 311 + L50 312 + R63 313 + L52 314 + R456 315 + L942 316 + R9 317 + L19 318 + R1 319 + L68 320 + L414 321 + L66 322 + L62 323 + L372 324 + R73 325 + L12 326 + R60 327 + R243 328 + R96 329 + L694 330 + L66 331 + R730 332 + R57 333 + R43 334 + R35 335 + L73 336 + R4 337 + R27 338 + R77 339 + R907 340 + L61 341 + R96 342 + R54 343 + R12 344 + L4 345 + L49 346 + L56 347 + R70 348 + L5 349 + L64 350 + L621 351 + L79 352 + R83 353 + R17 354 + R90 355 + L10 356 + R878 357 + R51 358 + L66 359 + L52 360 + L308 361 + L73 362 + L52 363 + R62 364 + L36 365 + L44 366 + L70 367 + L11 368 + L22 369 + L337 370 + R77 371 + R23 372 + L39 373 + R707 374 + L4 375 + R736 376 + L92 377 + R92 378 + R205 379 + R95 380 + L22 381 + L89 382 + L55 383 + R66 384 + L41 385 + R65 386 + R76 387 + R20 388 + R780 389 + R49 390 + R71 391 + L84 392 + L36 393 + R50 394 + R50 395 + R85 396 + L85 397 + R218 398 + L18 399 + L32 400 + R72 401 + R63 402 + R897 403 + R706 404 + L106 405 + L16 406 + R58 407 + L9 408 + R67 409 + R13 410 + L29 411 + R16 412 + L27 413 + L35 414 + L38 415 + R49 416 + R851 417 + L26 418 + L47 419 + R52 420 + L22 421 + L57 422 + R2 423 + L95 424 + R73 425 + L80 426 + R25 427 + R75 428 + R30 429 + R35 430 + L331 431 + L35 432 + R1 433 + L64 434 + R64 435 + L63 436 + L31 437 + R140 438 + R95 439 + L78 440 + R37 441 + L81 442 + L76 443 + L32 444 + L24 445 + L75 446 + R88 447 + L41 448 + R44 449 + R734 450 + R8 451 + R30 452 + L290 453 + R915 454 + R14 455 + R69 456 + L83 457 + L70 458 + R980 459 + L110 460 + R55 461 + R945 462 + R659 463 + L59 464 + R50 465 + R50 466 + R51 467 + R49 468 + R1 469 + R57 470 + R42 471 + L99 472 + R99 473 + R57 474 + R43 475 + R317 476 + R67 477 + R283 478 + L67 479 + L64 480 + R97 481 + L633 482 + L70 483 + R96 484 + L69 485 + R47 486 + R64 487 + L726 488 + R958 489 + R58 490 + R44 491 + R60 492 + R438 493 + R79 494 + L677 495 + R98 496 + L95 497 + L638 498 + L41 499 + R74 500 + L333 501 + L67 502 + R72 503 + L72 504 + R96 505 + L96 506 + L354 507 + L797 508 + L92 509 + R15 510 + L29 511 + L185 512 + R16 513 + R726 514 + L68 515 + R68 516 + L53 517 + L627 518 + R80 519 + R88 520 + L88 521 + L53 522 + R45 523 + R833 524 + L82 525 + R57 526 + L94 527 + L33 528 + L356 529 + L44 530 + R267 531 + R45 532 + R7 533 + L6 534 + L588 535 + R15 536 + L108 537 + R3 538 + L8 539 + L72 540 + L28 541 + R36 542 + R67 543 + L3 544 + R89 545 + L30 546 + R41 547 + L927 548 + L73 549 + L54 550 + R64 551 + L10 552 + R83 553 + R60 554 + L43 555 + L73 556 + L445 557 + L966 558 + R88 559 + L73 560 + L31 561 + L35 562 + R35 563 + R21 564 + R56 565 + R23 566 + L98 567 + R86 568 + R30 569 + R97 570 + L39 571 + R92 572 + L80 573 + L88 574 + R82 575 + L97 576 + R88 577 + L73 578 + R60 579 + L60 580 + R76 581 + L20 582 + L529 583 + R9 584 + L37 585 + R1 586 + R59 587 + L432 588 + R973 589 + L81 590 + R15 591 + R14 592 + R452 593 + L148 594 + L52 595 + L71 596 + R71 597 + L20 598 + L580 599 + L81 600 + R81 601 + R77 602 + R23 603 + L11 604 + L89 605 + L4 606 + R4 607 + L40 608 + R210 609 + L70 610 + R185 611 + R15 612 + R41 613 + L668 614 + R327 615 + R9 616 + L31 617 + L789 618 + R11 619 + L95 620 + R15 621 + R59 622 + L72 623 + R93 624 + R92 625 + L92 626 + R29 627 + R471 628 + R90 629 + R54 630 + R81 631 + L28 632 + L48 633 + L49 634 + L238 635 + R370 636 + R384 637 + L2 638 + R86 639 + R23 640 + R77 641 + R32 642 + R42 643 + L25 644 + L20 645 + L701 646 + R35 647 + L63 648 + R2 649 + L64 650 + R34 651 + L72 652 + R88 653 + R512 654 + L77 655 + R94 656 + R830 657 + R33 658 + L80 659 + L69 660 + R3 661 + L67 662 + R53 663 + R37 664 + R59 665 + R84 666 + R9 667 + L37 668 + L23 669 + R51 670 + L39 671 + R239 672 + L492 673 + R92 674 + R20 675 + L20 676 + L38 677 + L43 678 + R78 679 + R283 680 + L80 681 + L83 682 + L317 683 + L575 684 + R927 685 + L19 686 + R467 687 + R90 688 + L14 689 + L89 690 + R86 691 + R85 692 + L60 693 + L98 694 + R23 695 + R11 696 + R25 697 + L23 698 + R94 699 + R70 700 + L18 701 + R18 702 + L46 703 + R394 704 + L77 705 + L53 706 + L98 707 + R80 708 + L66 709 + L89 710 + R441 711 + L67 712 + L19 713 + R46 714 + R54 715 + L85 716 + R94 717 + L64 718 + R655 719 + R72 720 + L868 721 + L304 722 + L574 723 + R534 724 + R40 725 + L85 726 + R33 727 + L64 728 + R73 729 + L57 730 + R87 731 + L78 732 + R91 733 + R11 734 + R35 735 + L46 736 + L67 737 + L22 738 + R18 739 + L517 740 + R75 741 + L322 742 + L76 743 + L989 744 + R79 745 + R33 746 + R588 747 + R47 748 + L47 749 + L83 750 + L417 751 + L36 752 + R136 753 + L62 754 + L38 755 + R62 756 + L62 757 + R563 758 + R44 759 + L7 760 + R92 761 + L92 762 + R6 763 + R621 764 + L27 765 + L44 766 + R42 767 + R4 768 + L24 769 + L92 770 + R14 771 + R519 772 + R66 773 + L17 774 + L12 775 + R92 776 + R52 777 + R527 778 + R73 779 + R66 780 + L66 781 + R738 782 + L4 783 + R96 784 + R27 785 + L78 786 + L579 787 + R73 788 + R7 789 + R20 790 + L98 791 + L64 792 + L48 793 + R425 794 + R26 795 + L65 796 + L2 797 + R401 798 + R3 799 + R22 800 + L64 801 + L78 802 + R42 803 + L631 804 + R288 805 + L557 806 + R23 807 + R77 808 + L27 809 + R71 810 + L54 811 + L90 812 + L99 813 + R64 814 + L884 815 + L81 816 + L92 817 + L28 818 + R7 819 + L40 820 + L664 821 + L66 822 + R60 823 + R93 824 + R32 825 + L22 826 + L50 827 + L59 828 + R29 829 + L273 830 + L92 831 + R229 832 + R36 833 + L29 834 + R7 835 + L42 836 + L36 837 + L604 838 + L96 839 + R86 840 + R8 841 + L872 842 + R42 843 + R36 844 + L76 845 + L896 846 + L28 847 + L45 848 + L40 849 + R1 850 + L90 851 + L3 852 + L97 853 + L2 854 + L24 855 + R815 856 + L30 857 + R15 858 + L490 859 + L12 860 + L98 861 + L41 862 + R41 863 + R6 864 + R26 865 + L32 866 + L11 867 + L89 868 + R56 869 + L56 870 + R123 871 + L69 872 + R20 873 + L859 874 + L313 875 + L14 876 + L88 877 + R96 878 + R33 879 + R26 880 + R45 881 + R92 882 + R86 883 + R10 884 + R12 885 + R89 886 + L33 887 + R44 888 + L61 889 + L75 890 + R336 891 + R25 892 + L25 893 + L97 894 + L603 895 + L530 896 + R230 897 + L75 898 + L63 899 + L88 900 + L74 901 + L46 902 + L25 903 + L54 904 + R39 905 + L75 906 + R72 907 + R211 908 + R929 909 + R138 910 + L934 911 + L296 912 + R66 913 + L964 914 + R439 915 + L15 916 + R15 917 + L22 918 + L78 919 + L60 920 + R60 921 + L26 922 + R687 923 + L365 924 + L38 925 + L58 926 + L25 927 + L75 928 + L54 929 + L82 930 + L99 931 + L99 932 + L266 933 + L62 934 + R79 935 + R83 936 + L37 937 + R23 938 + R57 939 + R357 940 + R54 941 + R77 942 + L69 943 + L34 944 + R872 945 + R15 946 + L15 947 + R79 948 + L28 949 + R91 950 + R83 951 + R8 952 + R67 953 + R89 954 + R11 955 + R30 956 + L30 957 + L35 958 + R35 959 + R873 960 + R463 961 + L651 962 + R15 963 + L78 964 + R20 965 + L942 966 + L38 967 + R11 968 + L73 969 + L9 970 + L91 971 + R54 972 + L554 973 + L76 974 + R81 975 + R95 976 + R70 977 + L70 978 + R70 979 + L70 980 + R69 981 + R56 982 + R75 983 + L42 984 + L64 985 + R37 986 + R56 987 + R348 988 + L755 989 + R20 990 + R86 991 + R546 992 + R68 993 + L40 994 + L31 995 + R71 996 + R6 997 + R94 998 + L21 999 + L79 1000 + L50 1001 + L99 1002 + R49 1003 + L97 1004 + R99 1005 + R62 1006 + R19 1007 + R73 1008 + R67 1009 + R77 1010 + R99 1011 + L26 1012 + R60 1013 + L33 1014 + L37 1015 + R33 1016 + R36 1017 + L98 1018 + R66 1019 + R94 1020 + R6 1021 + L64 1022 + R232 1023 + L564 1024 + R96 1025 + L52 1026 + R76 1027 + L145 1028 + R21 1029 + R245 1030 + R40 1031 + R15 1032 + R572 1033 + R28 1034 + L8 1035 + L92 1036 + R73 1037 + L28 1038 + L45 1039 + L968 1040 + L69 1041 + L58 1042 + R3 1043 + L8 1044 + L26 1045 + L21 1046 + L92 1047 + R26 1048 + R13 1049 + R21 1050 + L839 1051 + R18 1052 + R88 1053 + R68 1054 + R85 1055 + R74 1056 + L55 1057 + L318 1058 + L42 1059 + R93 1060 + R68 1061 + R55 1062 + R82 1063 + L64 1064 + R93 1065 + R5 1066 + R68 1067 + L3 1068 + R96 1069 + L93 1070 + R541 1071 + R2 1072 + R57 1073 + L68 1074 + R668 1075 + L244 1076 + L56 1077 + R411 1078 + R89 1079 + L13 1080 + L35 1081 + R642 1082 + R82 1083 + R37 1084 + R80 1085 + L21 1086 + L79 1087 + R56 1088 + L363 1089 + L86 1090 + L50 1091 + L596 1092 + R46 1093 + R23 1094 + R77 1095 + L74 1096 + R850 1097 + R32 1098 + R14 1099 + L77 1100 + L32 1101 + R687 1102 + R663 1103 + R98 1104 + L61 1105 + R99 1106 + L32 1107 + L67 1108 + R20 1109 + L21 1110 + R1 1111 + L51 1112 + R51 1113 + L2 1114 + L724 1115 + R61 1116 + L99 1117 + R54 1118 + R91 1119 + L81 1120 + L138 1121 + L52 1122 + L1 1123 + R7 1124 + L60 1125 + R20 1126 + R47 1127 + R808 1128 + L31 1129 + L16 1130 + L94 1131 + R10 1132 + L3 1133 + L952 1134 + L45 1135 + L145 1136 + L9 1137 + R49 1138 + L15 1139 + L80 1140 + R8 1141 + R34 1142 + L228 1143 + L94 1144 + L86 1145 + R31 1146 + L39 1147 + L60 1148 + L66 1149 + R7 1150 + L48 1151 + L652 1152 + R426 1153 + R67 1154 + R44 1155 + R56 1156 + L308 1157 + L35 1158 + R43 1159 + L4 1160 + L96 1161 + R82 1162 + R74 1163 + L55 1164 + L50 1165 + R78 1166 + L829 1167 + L82 1168 + L26 1169 + L92 1170 + R17 1171 + R59 1172 + L76 1173 + L84 1174 + L16 1175 + R14 1176 + R286 1177 + R85 1178 + L685 1179 + L27 1180 + L54 1181 + L819 1182 + L47 1183 + R59 1184 + L43 1185 + L369 1186 + L32 1187 + L8 1188 + R24 1189 + R40 1190 + R976 1191 + R702 1192 + R87 1193 + L492 1194 + R58 1195 + L22 1196 + R944 1197 + R23 1198 + L92 1199 + L708 1200 + L11 1201 + R75 1202 + L48 1203 + L816 1204 + L985 1205 + R74 1206 + L147 1207 + L71 1208 + R29 1209 + L43 1210 + R510 1211 + R16 1212 + R26 1213 + L509 1214 + R51 1215 + L75 1216 + R89 1217 + R35 1218 + L60 1219 + R46 1220 + R14 1221 + R60 1222 + L160 1223 + L52 1224 + R30 1225 + R61 1226 + L39 1227 + R78 1228 + R6 1229 + L740 1230 + L61 1231 + R17 1232 + R50 1233 + L40 1234 + R42 1235 + R948 1236 + R60 1237 + R40 1238 + L75 1239 + L25 1240 + R286 1241 + R44 1242 + L78 1243 + L52 1244 + L78 1245 + R50 1246 + R99 1247 + R29 1248 + R54 1249 + L54 1250 + L62 1251 + R83 1252 + R79 1253 + L5 1254 + L32 1255 + L92 1256 + R29 1257 + R85 1258 + L53 1259 + R71 1260 + R190 1261 + L27 1262 + R28 1263 + L962 1264 + L67 1265 + R35 1266 + L714 1267 + R62 1268 + L929 1269 + L19 1270 + R684 1271 + R70 1272 + L54 1273 + L67 1274 + L333 1275 + R883 1276 + L163 1277 + R92 1278 + R38 1279 + R50 1280 + R127 1281 + R73 1282 + L83 1283 + L59 1284 + L1 1285 + L757 1286 + R70 1287 + L70 1288 + R41 1289 + L3 1290 + R87 1291 + R75 1292 + L53 1293 + R53 1294 + L96 1295 + L75 1296 + R73 1297 + R298 1298 + R537 1299 + L37 1300 + L86 1301 + L14 1302 + L83 1303 + R83 1304 + R24 1305 + R83 1306 + R73 1307 + L164 1308 + R873 1309 + L89 1310 + R12 1311 + R61 1312 + L373 1313 + R342 1314 + R58 1315 + R15 1316 + L15 1317 + L77 1318 + R77 1319 + R76 1320 + L39 1321 + L808 1322 + L20 1323 + R486 1324 + L15 1325 + L31 1326 + R50 1327 + L16 1328 + R43 1329 + L126 1330 + R58 1331 + L28 1332 + L80 1333 + R894 1334 + L76 1335 + R824 1336 + L29 1337 + R43 1338 + R87 1339 + R16 1340 + L9 1341 + L55 1342 + L15 1343 + R20 1344 + R41 1345 + L34 1346 + R43 1347 + R49 1348 + L815 1349 + L134 1350 + R5 1351 + R12 1352 + L14 1353 + R297 1354 + L47 1355 + R47 1356 + R29 1357 + L25 1358 + R27 1359 + L85 1360 + L26 1361 + L311 1362 + L60 1363 + R58 1364 + L207 1365 + R377 1366 + R239 1367 + R67 1368 + R47 1369 + L29 1370 + L660 1371 + L41 1372 + R17 1373 + L82 1374 + L835 1375 + L88 1376 + L85 1377 + R73 1378 + L76 1379 + R74 1380 + R56 1381 + R61 1382 + L59 1383 + L999 1384 + R61 1385 + R92 1386 + R87 1387 + R3 1388 + R11 1389 + R534 1390 + L840 1391 + R95 1392 + R94 1393 + R906 1394 + R801 1395 + L53 1396 + L13 1397 + L64 1398 + L64 1399 + L63 1400 + R56 1401 + R35 1402 + L35 1403 + R807 1404 + R390 1405 + L97 1406 + L72 1407 + R86 1408 + L21 1409 + R74 1410 + L15 1411 + L52 1412 + L844 1413 + L227 1414 + R718 1415 + L71 1416 + L77 1417 + L31 1418 + L71 1419 + R46 1420 + R5 1421 + R52 1422 + L44 1423 + L56 1424 + R97 1425 + L291 1426 + L38 1427 + R32 1428 + L21 1429 + L37 1430 + L19 1431 + L58 1432 + R94 1433 + R41 1434 + R48 1435 + R47 1436 + R21 1437 + L53 1438 + L63 1439 + L593 1440 + L84 1441 + L107 1442 + R59 1443 + R25 1444 + R274 1445 + R1 1446 + L82 1447 + R7 1448 + L255 1449 + L45 1450 + R87 1451 + L56 1452 + L92 1453 + L938 1454 + L76 1455 + L25 1456 + L91 1457 + L465 1458 + R846 1459 + L37 1460 + R47 1461 + L10 1462 + R10 1463 + R99 1464 + L97 1465 + L51 1466 + R39 1467 + L37 1468 + R7 1469 + L87 1470 + R46 1471 + L421 1472 + L82 1473 + R84 1474 + L2 1475 + L98 1476 + R236 1477 + L916 1478 + R80 1479 + L20 1480 + L641 1481 + L18 1482 + R39 1483 + L560 1484 + R98 1485 + L69 1486 + R71 1487 + R87 1488 + L48 1489 + L96 1490 + L79 1491 + R36 1492 + L43 1493 + R43 1494 + L12 1495 + L79 1496 + R91 1497 + L2 1498 + R47 1499 + R812 1500 + L11 1501 + L75 1502 + L19 1503 + R948 1504 + L38 1505 + L62 1506 + R11 1507 + R86 1508 + L97 1509 + R46 1510 + R80 1511 + R74 1512 + R6 1513 + R20 1514 + R5 1515 + L31 1516 + L53 1517 + L498 1518 + R51 1519 + L4 1520 + L296 1521 + R29 1522 + R71 1523 + L93 1524 + L53 1525 + R46 1526 + L50 1527 + L850 1528 + R44 1529 + L64 1530 + R20 1531 + R799 1532 + R855 1533 + R846 1534 + L870 1535 + L9 1536 + L241 1537 + L78 1538 + R723 1539 + L57 1540 + R130 1541 + R2 1542 + R255 1543 + R45 1544 + R87 1545 + R46 1546 + L20 1547 + R87 1548 + L75 1549 + L44 1550 + L81 1551 + L24 1552 + R37 1553 + R31 1554 + R82 1555 + R74 1556 + L992 1557 + R992 1558 + L37 1559 + R25 1560 + R12 1561 + R37 1562 + R63 1563 + L52 1564 + L21 1565 + L27 1566 + R55 1567 + R45 1568 + R952 1569 + R20 1570 + R28 1571 + L96 1572 + R96 1573 + R34 1574 + L94 1575 + L67 1576 + R27 1577 + R50 1578 + L50 1579 + L642 1580 + L21 1581 + R57 1582 + L26 1583 + L40 1584 + L334 1585 + R52 1586 + L88 1587 + L558 1588 + L958 1589 + L84 1590 + R42 1591 + L66 1592 + R65 1593 + R1 1594 + R10 1595 + R35 1596 + R339 1597 + L84 1598 + R85 1599 + R15 1600 + L89 1601 + L911 1602 + L87 1603 + L13 1604 + L65 1605 + L5 1606 + L30 1607 + R25 1608 + R75 1609 + R61 1610 + R8 1611 + L469 1612 + L26 1613 + R26 1614 + R25 1615 + R75 1616 + L9 1617 + L37 1618 + R98 1619 + R43 1620 + L928 1621 + L167 1622 + L19 1623 + L67 1624 + R73 1625 + R313 1626 + L272 1627 + R17 1628 + R55 1629 + L35 1630 + R27 1631 + L492 1632 + L70 1633 + L53 1634 + L77 1635 + R10 1636 + R90 1637 + L764 1638 + R64 1639 + R77 1640 + L77 1641 + R47 1642 + R82 1643 + L44 1644 + R142 1645 + L80 1646 + R35 1647 + R29 1648 + L720 1649 + R9 1650 + L97 1651 + R93 1652 + R199 1653 + R5 1654 + R11 1655 + R881 1656 + R4 1657 + L29 1658 + L27 1659 + L46 1660 + R6 1661 + L73 1662 + R4 1663 + R798 1664 + R12 1665 + L4 1666 + R63 1667 + R89 1668 + L12 1669 + L84 1670 + R7 1671 + R45 1672 + L345 1673 + L45 1674 + R245 1675 + L77 1676 + L87 1677 + R51 1678 + R17 1679 + L204 1680 + L24 1681 + L11 1682 + L41 1683 + R56 1684 + L546 1685 + L34 1686 + L42 1687 + L86 1688 + R70 1689 + L42 1690 + L67 1691 + L33 1692 + L1 1693 + R1 1694 + R86 1695 + R14 1696 + L12 1697 + R209 1698 + R937 1699 + L370 1700 + R36 1701 + L36 1702 + R96 1703 + L60 1704 + L74 1705 + L915 1706 + L4 1707 + R69 1708 + L703 1709 + R27 1710 + R5 1711 + R133 1712 + L167 1713 + R54 1714 + R75 1715 + R961 1716 + R51 1717 + R20 1718 + L32 1719 + L99 1720 + L1 1721 + L9 1722 + L86 1723 + R1 1724 + R394 1725 + R589 1726 + L16 1727 + R23 1728 + L96 1729 + R485 1730 + L7 1731 + R22 1732 + R14 1733 + R86 1734 + R97 1735 + R77 1736 + L33 1737 + L598 1738 + L43 1739 + R86 1740 + L36 1741 + L6 1742 + R39 1743 + R929 1744 + L12 1745 + L92 1746 + R44 1747 + L52 1748 + L924 1749 + L76 1750 + L28 1751 + L88 1752 + L84 1753 + R64 1754 + L37 1755 + L27 1756 + L52 1757 + R90 1758 + R8 1759 + L46 1760 + L27 1761 + L73 1762 + L51 1763 + R51 1764 + R28 1765 + R72 1766 + L11 1767 + L599 1768 + L45 1769 + R62 1770 + R79 1771 + R654 1772 + R73 1773 + L18 1774 + L95 1775 + R91 1776 + R771 1777 + R83 1778 + L359 1779 + L848 1780 + R62 1781 + R46 1782 + L28 1783 + L26 1784 + R32 1785 + L90 1786 + R97 1787 + R93 1788 + R198 1789 + R94 1790 + R84 1791 + L31 1792 + R461 1793 + R70 1794 + L96 1795 + L4 1796 + L72 1797 + R96 1798 + R38 1799 + L62 1800 + R65 1801 + L65 1802 + R12 1803 + L7 1804 + L30 1805 + L75 1806 + L25 1807 + R554 1808 + R80 1809 + L2 1810 + R93 1811 + R175 1812 + L333 1813 + L42 1814 + L774 1815 + L8 1816 + R58 1817 + R288 1818 + L17 1819 + R68 1820 + R185 1821 + L63 1822 + R14 1823 + R77 1824 + R772 1825 + R56 1826 + L93 1827 + L63 1828 + L69 1829 + R801 1830 + L68 1831 + L13 1832 + L44 1833 + R993 1834 + L24 1835 + R24 1836 + L61 1837 + L39 1838 + R68 1839 + R88 1840 + R29 1841 + R15 1842 + R54 1843 + L54 1844 + R832 1845 + R699 1846 + L71 1847 + R40 1848 + L763 1849 + R63 1850 + R9 1851 + R91 1852 + R973 1853 + L73 1854 + L49 1855 + L56 1856 + L88 1857 + R53 1858 + R140 1859 + R230 1860 + R52 1861 + L82 1862 + L67 1863 + R67 1864 + R14 1865 + L14 1866 + L79 1867 + R42 1868 + L63 1869 + L99 1870 + L1 1871 + L37 1872 + R937 1873 + R61 1874 + R39 1875 + R25 1876 + L242 1877 + L16 1878 + L89 1879 + R22 1880 + R36 1881 + R13 1882 + R84 1883 + L33 1884 + R74 1885 + L74 1886 + L15 1887 + L17 1888 + L92 1889 + L36 1890 + L13 1891 + R74 1892 + R53 1893 + R64 1894 + L818 1895 + L56 1896 + R56 1897 + L69 1898 + L80 1899 + R49 1900 + R54 1901 + R72 1902 + R74 1903 + L36 1904 + R36 1905 + R87 1906 + L924 1907 + L33 1908 + L1 1909 + L29 1910 + R82 1911 + L1 1912 + R19 1913 + R25 1914 + R375 1915 + R9 1916 + R791 1917 + L24 1918 + L34 1919 + R64 1920 + R75 1921 + R19 1922 + R94 1923 + L94 1924 + R38 1925 + R15 1926 + R56 1927 + R688 1928 + R3 1929 + R41 1930 + L33 1931 + R60 1932 + R32 1933 + R72 1934 + R41 1935 + L13 1936 + R336 1937 + R64 1938 + L74 1939 + L41 1940 + R15 1941 + L86 1942 + L97 1943 + R97 1944 + R86 1945 + L52 1946 + L13 1947 + R39 1948 + R26 1949 + R44 1950 + L71 1951 + L73 1952 + L91 1953 + R62 1954 + L8 1955 + R41 1956 + L4 1957 + R88 1958 + R12 1959 + R77 1960 + L559 1961 + R91 1962 + L9 1963 + L94 1964 + R606 1965 + R38 1966 + L50 1967 + R44 1968 + L41 1969 + R89 1970 + R8 1971 + R98 1972 + L27 1973 + L96 1974 + R25 1975 + L923 1976 + L77 1977 + R55 1978 + R51 1979 + L607 1980 + L6 1981 + R37 1982 + L30 1983 + R68 1984 + R316 1985 + R34 1986 + R82 1987 + R11 1988 + L11 1989 + R8 1990 + L8 1991 + L9 1992 + R32 1993 + R77 1994 + R240 1995 + L65 1996 + R25 1997 + L11 1998 + R11 1999 + L55 2000 + L35 2001 + R27 2002 + L31 2003 + L6 2004 + L196 2005 + R96 2006 + R57 2007 + R52 2008 + R45 2009 + L954 2010 + L3 2011 + L690 2012 + R93 2013 + L68 2014 + L51 2015 + L41 2016 + R42 2017 + L82 2018 + R71 2019 + R29 2020 + R6 2021 + L564 2022 + L42 2023 + R4 2024 + R68 2025 + L83 2026 + L2 2027 + R77 2028 + L87 2029 + R857 2030 + L15 2031 + R2 2032 + R19 2033 + L130 2034 + R16 2035 + L11 2036 + L35 2037 + L2 2038 + L82 2039 + L84 2040 + R5 2041 + L25 2042 + R8 2043 + L67 2044 + R67 2045 + R88 2046 + L88 2047 + R35 2048 + R65 2049 + L913 2050 + L37 2051 + R750 2052 + R44 2053 + L60 2054 + R16 2055 + R88 2056 + R48 2057 + L60 2058 + R891 2059 + R92 2060 + L55 2061 + R42 2062 + L40 2063 + R38 2064 + L44 2065 + R126 2066 + R65 2067 + R9 2068 + R592 2069 + L35 2070 + R43 2071 + R9 2072 + L9 2073 + R55 2074 + R69 2075 + R38 2076 + R75 2077 + R63 2078 + L24 2079 + L56 2080 + R80 2081 + R77 2082 + L91 2083 + R614 2084 + R227 2085 + L285 2086 + L50 2087 + L92 2088 + R95 2089 + R62 2090 + L11 2091 + R69 2092 + L15 2093 + R30 2094 + R36 2095 + L580 2096 + R14 2097 + L8 2098 + L192 2099 + L30 2100 + R30 2101 + L78 2102 + L45 2103 + L77 2104 + R309 2105 + L93 2106 + L16 2107 + L849 2108 + R512 2109 + L61 2110 + L69 2111 + R24 2112 + R43 2113 + R43 2114 + R74 2115 + R755 2116 + L460 2117 + L11 2118 + L446 2119 + L93 2120 + R38 2121 + L63 2122 + L68 2123 + L756 2124 + L51 2125 + R38 2126 + L98 2127 + R314 2128 + R940 2129 + R61 2130 + R38 2131 + R92 2132 + R9 2133 + R82 2134 + L1 2135 + L678 2136 + L434 2137 + L1 2138 + R51 2139 + L11 2140 + R96 2141 + R69 2142 + R22 2143 + L34 2144 + R39 2145 + R97 2146 + R25 2147 + R45 2148 + L80 2149 + L41 2150 + L8 2151 + R16 2152 + R92 2153 + L37 2154 + R35 2155 + L88 2156 + L97 2157 + R431 2158 + R83 2159 + L29 2160 + R97 2161 + L97 2162 + L14 2163 + R13 2164 + L99 2165 + L5 2166 + R45 2167 + L5 2168 + R7 2169 + L42 2170 + R19 2171 + L19 2172 + R21 2173 + R79 2174 + R975 2175 + L75 2176 + L46 2177 + R38 2178 + R83 2179 + R25 2180 + R874 2181 + L22 2182 + L15 2183 + L617 2184 + L92 2185 + L28 2186 + L31 2187 + L80 2188 + L6 2189 + R19 2190 + R30 2191 + L332 2192 + R51 2193 + R49 2194 + L86 2195 + L14 2196 + R35 2197 + R265 2198 + R443 2199 + L20 2200 + L43 2201 + R35 2202 + L88 2203 + R74 2204 + L747 2205 + L775 2206 + R287 2207 + R80 2208 + L46 2209 + L72 2210 + R60 2211 + R80 2212 + L468 2213 + L99 2214 + L1 2215 + R257 2216 + L50 2217 + L7 2218 + L49 2219 + L8 2220 + R76 2221 + R20 2222 + R44 2223 + R95 2224 + L796 2225 + L50 2226 + L232 2227 + L97 2228 + L39 2229 + L58 2230 + R94 2231 + R99 2232 + L51 2233 + L48 2234 + L158 2235 + R58 2236 + L395 2237 + L29 2238 + R75 2239 + L885 2240 + R87 2241 + L820 2242 + R88 2243 + L94 2244 + R73 2245 + R73 2246 + L73 2247 + L3 2248 + R3 2249 + R31 2250 + L31 2251 + L90 2252 + R32 2253 + R58 2254 + R744 2255 + R85 2256 + R71 2257 + L604 2258 + L79 2259 + R6 2260 + R77 2261 + L349 2262 + R802 2263 + R47 2264 + R59 2265 + L193 2266 + L66 2267 + R87 2268 + L429 2269 + L27 2270 + R391 2271 + R34 2272 + L79 2273 + R323 2274 + R96 2275 + L96 2276 + R27 2277 + R73 2278 + L93 2279 + L88 2280 + L927 2281 + L792 2282 + L82 2283 + L55 2284 + L365 2285 + R66 2286 + L64 2287 + L29 2288 + L71 2289 + L83 2290 + L15 2291 + R98 2292 + L91 2293 + R51 2294 + L74 2295 + L911 2296 + L26 2297 + L34 2298 + L15 2299 + R24 2300 + L137 2301 + R13 2302 + L772 2303 + L28 2304 + R30 2305 + L808 2306 + L1 2307 + L21 2308 + R481 2309 + R60 2310 + L41 2311 + R41 2312 + R76 2313 + R60 2314 + L839 2315 + L42 2316 + R804 2317 + R10 2318 + L89 2319 + R96 2320 + R83 2321 + R80 2322 + L78 2323 + L323 2324 + L26 2325 + L70 2326 + L36 2327 + R39 2328 + R83 2329 + R46 2330 + R42 2331 + R82 2332 + R212 2333 + R49 2334 + R13 2335 + L67 2336 + R54 2337 + R57 2338 + R95 2339 + L94 2340 + R42 2341 + R86 2342 + R31 2343 + L20 2344 + R26 2345 + L91 2346 + R56 2347 + L95 2348 + L61 2349 + L32 2350 + R77 2351 + L77 2352 + R48 2353 + R52 2354 + R78 2355 + L2 2356 + L4 2357 + L72 2358 + R774 2359 + L774 2360 + L30 2361 + L70 2362 + L73 2363 + R48 2364 + R94 2365 + R965 2366 + L34 2367 + R92 2368 + R8 2369 + L36 2370 + L32 2371 + L97 2372 + L935 2373 + R53 2374 + R91 2375 + R56 2376 + R123 2377 + R41 2378 + L721 2379 + R88 2380 + R67 2381 + L45 2382 + L381 2383 + R1 2384 + R27 2385 + R32 2386 + R13 2387 + L9 2388 + L36 2389 + R647 2390 + R39 2391 + L51 2392 + R165 2393 + R12 2394 + L40 2395 + L82 2396 + L85 2397 + L5 2398 + L87 2399 + R87 2400 + R177 2401 + L377 2402 + L37 2403 + R63 2404 + R93 2405 + R887 2406 + L45 2407 + R39 2408 + R69 2409 + R471 2410 + R35 2411 + L70 2412 + L5 2413 + R58 2414 + L58 2415 + R26 2416 + L26 2417 + R67 2418 + L67 2419 + L48 2420 + R57 2421 + L79 2422 + R329 2423 + L80 2424 + L79 2425 + R83 2426 + R17 2427 + L38 2428 + R96 2429 + R42 2430 + L84 2431 + R86 2432 + R4 2433 + L606 2434 + L1 2435 + L43 2436 + L56 2437 + L79 2438 + R279 2439 + R94 2440 + R83 2441 + R23 2442 + L325 2443 + R44 2444 + R463 2445 + L21 2446 + L61 2447 + R28 2448 + R40 2449 + L43 2450 + R64 2451 + L46 2452 + L443 2453 + R18 2454 + L18 2455 + L99 2456 + L80 2457 + L90 2458 + R71 2459 + L54 2460 + L67 2461 + R82 2462 + L19 2463 + L44 2464 + L59 2465 + L56 2466 + R20 2467 + L53 2468 + R748 2469 + R51 2470 + L51 2471 + L258 2472 + R19 2473 + L986 2474 + R37 2475 + L612 2476 + L37 2477 + R754 2478 + R489 2479 + R94 2480 + R4 2481 + R96 2482 + L15 2483 + R515 2484 + R19 2485 + R2 2486 + L29 2487 + R42 2488 + L29 2489 + L26 2490 + L779 2491 + R29 2492 + R26 2493 + L94 2494 + R39 2495 + L28 2496 + L72 2497 + L58 2498 + L58 2499 + L23 2500 + R198 2501 + L59 2502 + L45 2503 + L55 2504 + L4 2505 + R4 2506 + L70 2507 + R5 2508 + L51 2509 + R76 2510 + R708 2511 + L596 2512 + R69 2513 + R42 2514 + L738 2515 + R55 2516 + R933 2517 + R69 2518 + R198 2519 + L94 2520 + R94 2521 + L10 2522 + R57 2523 + L3 2524 + R856 2525 + R93 2526 + L93 2527 + L757 2528 + R76 2529 + L819 2530 + L137 2531 + R28 2532 + L27 2533 + R57 2534 + L121 2535 + L64 2536 + L336 2537 + R80 2538 + L713 2539 + R27 2540 + R529 2541 + R777 2542 + R98 2543 + L99 2544 + R73 2545 + R528 2546 + L269 2547 + L81 2548 + L650 2549 + R55 2550 + L84 2551 + R89 2552 + R40 2553 + R30 2554 + L79 2555 + R49 2556 + R410 2557 + L18 2558 + L84 2559 + R44 2560 + L52 2561 + R11 2562 + R689 2563 + L71 2564 + R71 2565 + R17 2566 + R65 2567 + R28 2568 + R90 2569 + L38 2570 + L70 2571 + L92 2572 + R924 2573 + L655 2574 + L957 2575 + R1 2576 + L4 2577 + L9 2578 + L419 2579 + L81 2580 + R34 2581 + R66 2582 + L93 2583 + L10 2584 + L97 2585 + L477 2586 + L923 2587 + L86 2588 + R86 2589 + R41 2590 + L67 2591 + R77 2592 + R34 2593 + L8 2594 + R49 2595 + L26 2596 + L40 2597 + L54 2598 + R94 2599 + L95 2600 + L83 2601 + R478 2602 + L10 2603 + L90 2604 + L94 2605 + L73 2606 + L476 2607 + R43 2608 + L92 2609 + L8 2610 + R87 2611 + R13 2612 + L41 2613 + L81 2614 + R47 2615 + L89 2616 + R64 2617 + R83 2618 + L61 2619 + L28 2620 + R7 2621 + L1 2622 + R89 2623 + R6 2624 + R2 2625 + L97 2626 + R984 2627 + L84 2628 + L24 2629 + R26 2630 + R31 2631 + L32 2632 + L66 2633 + L42 2634 + R5 2635 + R2 2636 + R64 2637 + L64 2638 + L86 2639 + R27 2640 + R39 2641 + L80 2642 + L38 2643 + L86 2644 + L59 2645 + L17 2646 + L71 2647 + R71 2648 + R44 2649 + R95 2650 + R61 2651 + L871 2652 + L50 2653 + L79 2654 + R88 2655 + R61 2656 + R51 2657 + L23 2658 + L77 2659 + R6 2660 + R7 2661 + R87 2662 + R69 2663 + L94 2664 + R325 2665 + L46 2666 + R74 2667 + R936 2668 + L64 2669 + L61 2670 + L39 2671 + R18 2672 + L8 2673 + R190 2674 + R464 2675 + L64 2676 + R63 2677 + R51 2678 + L81 2679 + R959 2680 + R96 2681 + R26 2682 + R61 2683 + L75 2684 + R838 2685 + L10 2686 + R88 2687 + R36 2688 + R748 2689 + L62 2690 + L38 2691 + L46 2692 + L89 2693 + L23 2694 + R21 2695 + L67 2696 + R69 2697 + R43 2698 + L1 2699 + R50 2700 + R68 2701 + R42 2702 + L6 2703 + R160 2704 + L33 2705 + L88 2706 + L45 2707 + R354 2708 + L9 2709 + L599 2710 + R99 2711 + R356 2712 + R18 2713 + L74 2714 + L84 2715 + R85 2716 + R99 2717 + R743 2718 + L43 2719 + R743 2720 + R57 2721 + R98 2722 + R710 2723 + R92 2724 + R990 2725 + R69 2726 + R18 2727 + R75 2728 + L90 2729 + L62 2730 + L68 2731 + R23 2732 + R12 2733 + R33 2734 + L95 2735 + L294 2736 + R19 2737 + R770 2738 + L17 2739 + R17 2740 + L47 2741 + R49 2742 + L38 2743 + R36 2744 + R29 2745 + R71 2746 + L39 2747 + L961 2748 + R385 2749 + L67 2750 + L5 2751 + R68 2752 + L71 2753 + L4 2754 + L37 2755 + L24 2756 + R55 2757 + L21 2758 + L91 2759 + L282 2760 + R95 2761 + L75 2762 + R74 2763 + L38 2764 + L62 2765 + L706 2766 + R38 2767 + R24 2768 + R75 2769 + R169 2770 + L787 2771 + R87 2772 + L30 2773 + R39 2774 + L9 2775 + L6 2776 + L263 2777 + L771 2778 + L6 2779 + L87 2780 + L30 2781 + R31 2782 + L17 2783 + R49 2784 + R95 2785 + L30 2786 + R77 2787 + L42 2788 + L187 2789 + R69 2790 + R72 2791 + L36 2792 + L19 2793 + R1 2794 + R7 2795 + R25 2796 + R27 2797 + L59 2798 + L69 2799 + L88 2800 + R44 2801 + L21 2802 + L12 2803 + L54 2804 + R297 2805 + L97 2806 + L730 2807 + L759 2808 + L31 2809 + R20 2810 + L701 2811 + R107 2812 + R475 2813 + R719 2814 + L49 2815 + R831 2816 + L82 2817 + R682 2818 + R30 2819 + R84 2820 + R95 2821 + L84 2822 + L11 2823 + L59 2824 + L412 2825 + R846 2826 + R29 2827 + L35 2828 + R35 2829 + L356 2830 + R51 2831 + R15 2832 + L10 2833 + L49 2834 + L14 2835 + R68 2836 + R76 2837 + L81 2838 + R51 2839 + L51 2840 + R11 2841 + R63 2842 + L512 2843 + R38 2844 + R45 2845 + R540 2846 + L74 2847 + R6 2848 + L32 2849 + R415 2850 + R29 2851 + L5 2852 + L24 2853 + R17 2854 + R49 2855 + R14 2856 + L80 2857 + R82 2858 + R32 2859 + L14 2860 + R87 2861 + R49 2862 + R14 2863 + L724 2864 + R74 2865 + L24 2866 + R46 2867 + R20 2868 + R91 2869 + R3 2870 + L36 2871 + R1 2872 + R99 2873 + L26 2874 + L8 2875 + L987 2876 + R21 2877 + R10 2878 + R241 2879 + R22 2880 + R50 2881 + L34 2882 + L1 2883 + L88 2884 + L87 2885 + R87 2886 + L13 2887 + L85 2888 + L875 2889 + R73 2890 + R37 2891 + L20 2892 + L34 2893 + R896 2894 + R721 2895 + L79 2896 + R83 2897 + R16 2898 + L676 2899 + L79 2900 + R77 2901 + L9 2902 + L13 2903 + L85 2904 + R37 2905 + L54 2906 + R82 2907 + L74 2908 + R940 2909 + R24 2910 + R7 2911 + L10 2912 + L87 2913 + R38 2914 + R95 2915 + R899 2916 + R68 2917 + R489 2918 + R46 2919 + L35 2920 + L39 2921 + R39 2922 + L35 2923 + R287 2924 + L4 2925 + L3 2926 + R55 2927 + R8 2928 + R92 2929 + L34 2930 + L91 2931 + R55 2932 + R3 2933 + L77 2934 + L593 2935 + L627 2936 + R64 2937 + R57 2938 + R43 2939 + R15 2940 + L63 2941 + L58 2942 + R46 2943 + R60 2944 + R9 2945 + L818 2946 + R16 2947 + R21 2948 + R72 2949 + R24 2950 + L831 2951 + L77 2952 + L16 2953 + L433 2954 + R84 2955 + L596 2956 + L89 2957 + L56 2958 + L18 2959 + L692 2960 + L766 2961 + R67 2962 + R99 2963 + L59 2964 + L854 2965 + R60 2966 + L47 2967 + R24 2968 + R76 2969 + L36 2970 + L64 2971 + L8 2972 + R8 2973 + R308 2974 + L93 2975 + R24 2976 + L39 2977 + R70 2978 + L42 2979 + L97 2980 + R14 2981 + R439 2982 + L96 2983 + L18 2984 + L51 2985 + L43 2986 + L70 2987 + L35 2988 + R29 2989 + L98 2990 + L312 2991 + L90 2992 + R77 2993 + L77 2994 + R89 2995 + R7 2996 + R404 2997 + L79 2998 + L182 2999 + R810 3000 + R351 3001 + L68 3002 + R64 3003 + R99 3004 + L13 3005 + L876 3006 + R94 3007 + L228 3008 + R26 3009 + L26 3010 + L272 3011 + R34 3012 + R66 3013 + L880 3014 + L36 3015 + R83 3016 + L55 3017 + R80 3018 + R60 3019 + L139 3020 + L75 3021 + R1 3022 + L39 3023 + L60 3024 + L3 3025 + R750 3026 + R213 3027 + R373 3028 + R327 3029 + L2 3030 + R2 3031 + R793 3032 + L44 3033 + R251 3034 + L11 3035 + L89 3036 + L837 3037 + R37 3038 + L69 3039 + L37 3040 + L594 3041 + R45 3042 + R34 3043 + L81 3044 + R2 3045 + R1 3046 + L84 3047 + L917 3048 + R602 3049 + L839 3050 + R71 3051 + R465 3052 + L18 3053 + L2 3054 + L33 3055 + L46 3056 + L68 3057 + R16 3058 + L48 3059 + L53 3060 + L93 3061 + L62 3062 + L30 3063 + L152 3064 + L10 3065 + L63 3066 + L152 3067 + L85 3068 + R88 3069 + L11 3070 + L408 3071 + L895 3072 + R33 3073 + L7 3074 + R17 3075 + R80 3076 + R23 3077 + L51 3078 + L13 3079 + L63 3080 + L90 3081 + L16 3082 + L849 3083 + R62 3084 + R36 3085 + R279 3086 + L110 3087 + L105 3088 + R24 3089 + R82 3090 + L6 3091 + L11 3092 + R11 3093 + L317 3094 + L27 3095 + R8 3096 + R32 3097 + R568 3098 + R36 3099 + R229 3100 + L57 3101 + L9 3102 + L71 3103 + L83 3104 + L9 3105 + L28 3106 + R84 3107 + L1 3108 + L2 3109 + L59 3110 + R64 3111 + R42 3112 + L76 3113 + L24 3114 + R14 3115 + L579 3116 + L32 3117 + L3 3118 + L87 3119 + R42 3120 + R628 3121 + R17 3122 + R63 3123 + R59 3124 + L632 3125 + L83 3126 + L29 3127 + L48 3128 + R57 3129 + L66 3130 + L21 3131 + R11 3132 + L11 3133 + L53 3134 + L47 3135 + R34 3136 + L616 3137 + L74 3138 + L83 3139 + R664 3140 + R975 3141 + L69 3142 + L37 3143 + L99 3144 + L95 3145 + L58 3146 + L52 3147 + R29 3148 + L19 3149 + L35 3150 + R4 3151 + R56 3152 + L25 3153 + R98 3154 + L98 3155 + R48 3156 + R63 3157 + R89 3158 + L261 3159 + R59 3160 + R78 3161 + L61 3162 + L516 3163 + R26 3164 + L790 3165 + L392 3166 + R957 3167 + L92 3168 + L45 3169 + R37 3170 + R4 3171 + L22 3172 + L71 3173 + R752 3174 + L923 3175 + L537 3176 + L37 3177 + L566 3178 + R63 3179 + L42 3180 + L99 3181 + R510 3182 + L4 3183 + R24 3184 + L91 3185 + R70 3186 + L31 3187 + L58 3188 + L942 3189 + R24 3190 + R76 3191 + L28 3192 + L29 3193 + R61 3194 + L4 3195 + L115 3196 + L16 3197 + L25 3198 + L65 3199 + L79 3200 + R404 3201 + L30 3202 + R381 3203 + R81 3204 + R64 3205 + L80 3206 + L279 3207 + R28 3208 + L76 3209 + R92 3210 + L85 3211 + R23 3212 + R43 3213 + L25 3214 + L31 3215 + R49 3216 + R24 3217 + L83 3218 + R53 3219 + R38 3220 + R9 3221 + R525 3222 + L25 3223 + R84 3224 + L84 3225 + R705 3226 + L363 3227 + R4 3228 + L32 3229 + L40 3230 + R56 3231 + L274 3232 + R65 3233 + R4 3234 + R774 3235 + L12 3236 + R50 3237 + L40 3238 + R94 3239 + R9 3240 + R724 3241 + L424 3242 + L856 3243 + L44 3244 + R48 3245 + L48 3246 + L1 3247 + R18 3248 + L2 3249 + L342 3250 + L73 3251 + L544 3252 + L32 3253 + R14 3254 + L38 3255 + R696 3256 + R4 3257 + R318 3258 + L18 3259 + L24 3260 + L582 3261 + L70 3262 + R71 3263 + L95 3264 + R85 3265 + R38 3266 + L73 3267 + R50 3268 + L377 3269 + R82 3270 + L346 3271 + L42 3272 + L19 3273 + R2 3274 + R608 3275 + R92 3276 + L4 3277 + R604 3278 + L35 3279 + R96 3280 + L30 3281 + R43 3282 + R26 3283 + L16 3284 + R641 3285 + L34 3286 + L1 3287 + R779 3288 + R331 3289 + L50 3290 + L50 3291 + R90 3292 + R431 3293 + R79 3294 + L83 3295 + R83 3296 + L25 3297 + L61 3298 + L414 3299 + L97 3300 + R41 3301 + R18 3302 + R54 3303 + R73 3304 + L28 3305 + L793 3306 + R14 3307 + L282 3308 + R56 3309 + R242 3310 + R2 3311 + L69 3312 + R69 3313 + L68 3314 + R268 3315 + R5 3316 + L5 3317 + L23 3318 + L920 3319 + R90 3320 + R91 3321 + R62 3322 + R21 3323 + R179 3324 + L44 3325 + R97 3326 + R47 3327 + R32 3328 + L32 3329 + R53 3330 + R47 3331 + L20 3332 + R20 3333 + L44 3334 + R99 3335 + L45 3336 + R90 3337 + R29 3338 + R51 3339 + L10 3340 + L620 3341 + R66 3342 + R14 3343 + L30 3344 + R4 3345 + L904 3346 + L81 3347 + R55 3348 + R37 3349 + L7 3350 + R22 3351 + R74 3352 + R89 3353 + R20 3354 + L9 3355 + R14 3356 + R15 3357 + R8 3358 + L8 3359 + L85 3360 + R91 3361 + R61 3362 + R4 3363 + L951 3364 + L46 3365 + L907 3366 + R45 3367 + R78 3368 + R62 3369 + R79 3370 + R37 3371 + L485 3372 + R52 3373 + R90 3374 + L34 3375 + R9 3376 + L2 3377 + R73 3378 + R24 3379 + L24 3380 + L81 3381 + L19 3382 + L348 3383 + L49 3384 + R60 3385 + R45 3386 + L522 3387 + R356 3388 + R25 3389 + L94 3390 + L87 3391 + L51 3392 + R65 3393 + R15 3394 + R14 3395 + L29 3396 + L70 3397 + R99 3398 + L29 3399 + L59 3400 + L41 3401 + R27 3402 + L27 3403 + R91 3404 + L91 3405 + R32 3406 + R68 3407 + L92 3408 + R98 3409 + R92 3410 + R12 3411 + L96 3412 + R86 3413 + L18 3414 + R301 3415 + L20 3416 + L959 3417 + L79 3418 + L25 3419 + L92 3420 + R92 3421 + L52 3422 + L8 3423 + L69 3424 + L71 3425 + L42 3426 + L58 3427 + R41 3428 + R37 3429 + R318 3430 + R82 3431 + R37 3432 + R85 3433 + R523 3434 + L52 3435 + L51 3436 + R80 3437 + L168 3438 + L61 3439 + R39 3440 + L14 3441 + L53 3442 + L43 3443 + L27 3444 + L760 3445 + R87 3446 + R36 3447 + R46 3448 + L882 3449 + R24 3450 + R49 3451 + L522 3452 + L451 3453 + R64 3454 + L658 3455 + L6 3456 + R58 3457 + L75 3458 + L522 3459 + R46 3460 + L7 3461 + L1 3462 + L99 3463 + R66 3464 + L70 3465 + R35 3466 + L31 3467 + L23 3468 + R570 3469 + L847 3470 + R44 3471 + L474 3472 + R91 3473 + R39 3474 + R90 3475 + L94 3476 + R63 3477 + L39 3478 + L66 3479 + L408 3480 + R59 3481 + L66 3482 + L14 3483 + L55 3484 + R66 3485 + L858 3486 + L78 3487 + R23 3488 + L17 3489 + R5 3490 + L56 3491 + L42 3492 + L44 3493 + R71 3494 + L40 3495 + R13 3496 + L83 3497 + R70 3498 + R19 3499 + R76 3500 + L95 3501 + L31 3502 + L69 3503 + R54 3504 + R12 3505 + R10 3506 + R90 3507 + L66 3508 + R39 3509 + R77 3510 + L216 3511 + L77 3512 + R18 3513 + L54 3514 + L87 3515 + L85 3516 + R271 3517 + L93 3518 + R74 3519 + R33 3520 + L72 3521 + L28 3522 + L15 3523 + L959 3524 + R874 3525 + R654 3526 + R14 3527 + L68 3528 + L89 3529 + L811 3530 + L75 3531 + L18 3532 + R82 3533 + L11 3534 + L78 3535 + L31 3536 + R31 3537 + L4 3538 + R66 3539 + L329 3540 + L11 3541 + R96 3542 + L85 3543 + L756 3544 + L877 3545 + R419 3546 + L19 3547 + L218 3548 + R88 3549 + L3 3550 + L55 3551 + L12 3552 + R26 3553 + R16 3554 + L51 3555 + L65 3556 + R85 3557 + L46 3558 + L595 3559 + L548 3560 + L67 3561 + R56 3562 + L23 3563 + L74 3564 + R43 3565 + R18 3566 + R416 3567 + R80 3568 + R31 3569 + L751 3570 + L777 3571 + L1 3572 + L349 3573 + R250 3574 + R826 3575 + R87 3576 + L74 3577 + L8 3578 + L91 3579 + R484 3580 + L83 3581 + L70 3582 + R28 3583 + R69 3584 + L4 3585 + L38 3586 + R68 3587 + L26 3588 + L42 3589 + R56 3590 + R50 3591 + R402 3592 + L92 3593 + L16 3594 + R876 3595 + L94 3596 + R18 3597 + R41 3598 + L44 3599 + L64 3600 + L42 3601 + R9 3602 + R16 3603 + R991 3604 + R23 3605 + L49 3606 + L16 3607 + L65 3608 + L38 3609 + L50 3610 + L62 3611 + L984 3612 + R79 3613 + R27 3614 + L8 3615 + L25 3616 + R83 3617 + L24 3618 + R102 3619 + L374 3620 + L60 3621 + L66 3622 + R13 3623 + L13 3624 + R401 3625 + R33 3626 + R56 3627 + R10 3628 + L23 3629 + R923 3630 + R40 3631 + L37 3632 + L69 3633 + R41 3634 + L781 3635 + L18 3636 + R993 3637 + L82 3638 + L39 3639 + L49 3640 + L49 3641 + L50 3642 + L22 3643 + L29 3644 + R67 3645 + R357 3646 + R504 3647 + L477 3648 + R5 3649 + L96 3650 + R91 3651 + L52 3652 + R374 3653 + L22 3654 + L95 3655 + R895 3656 + L3 3657 + L48 3658 + L49 3659 + L62 3660 + L74 3661 + R836 3662 + R21 3663 + R79 3664 + L766 3665 + R66 3666 + R17 3667 + R83 3668 + R493 3669 + L87 3670 + R49 3671 + R45 3672 + L35 3673 + R33 3674 + R4 3675 + R205 3676 + R90 3677 + R8 3678 + R315 3679 + R80 3680 + L82 3681 + L18 3682 + R64 3683 + R36 3684 + R5 3685 + R66 3686 + L42 3687 + L29 3688 + R77 3689 + L80 3690 + L353 3691 + R56 3692 + L66 3693 + L64 3694 + R30 3695 + L422 3696 + R7 3697 + R75 3698 + L60 3699 + L73 3700 + L27 3701 + R166 3702 + R34 3703 + L48 3704 + R3 3705 + L3 3706 + L994 3707 + L63 3708 + R366 3709 + R53 3710 + R29 3711 + L43 3712 + L8 3713 + L677 3714 + L96 3715 + L54 3716 + R52 3717 + R98 3718 + L93 3719 + L22 3720 + R75 3721 + L17 3722 + R25 3723 + R217 3724 + L62 3725 + L96 3726 + L42 3727 + R210 3728 + R611 3729 + R34 3730 + L74 3731 + R49 3732 + R47 3733 + R23 3734 + R48 3735 + R59 3736 + R93 3737 + L11 3738 + L922 3739 + L67 3740 + L81 3741 + L7 3742 + L12 3743 + L377 3744 + L29 3745 + R115 3746 + R93 3747 + R98 3748 + L240 3749 + R96 3750 + L56 3751 + L51 3752 + R51 3753 + L11 3754 + R11 3755 + L69 3756 + L95 3757 + L98 3758 + R80 3759 + L97 3760 + R94 3761 + L47 3762 + L34 3763 + R23 3764 + R231 3765 + L85 3766 + L96 3767 + L336 3768 + L419 3769 + R38 3770 + L90 3771 + L64 3772 + R64 3773 + R72 3774 + L153 3775 + R105 3776 + L19 3777 + R42 3778 + R53 3779 + R745 3780 + R32 3781 + L77 3782 + L91 3783 + R2 3784 + R492 3785 + L3 3786 + L5 3787 + R2 3788 + R23 3789 + L21 3790 + L12 3791 + L14 3792 + L396 3793 + R23 3794 + L85 3795 + R85 3796 + R250 3797 + R62 3798 + L56 3799 + L43 3800 + R16 3801 + L29 3802 + L84 3803 + L852 3804 + L63 3805 + L155 3806 + L346 3807 + R82 3808 + L959 3809 + L23 3810 + R35 3811 + L35 3812 + L22 3813 + R22 3814 + R7 3815 + R89 3816 + L1 3817 + L69 3818 + L26 3819 + R98 3820 + L85 3821 + L99 3822 + L90 3823 + R76 3824 + L23 3825 + L77 3826 + L26 3827 + R83 3828 + R43 3829 + R24 3830 + L862 3831 + L97 3832 + L71 3833 + L71 3834 + L25 3835 + L33 3836 + L19 3837 + R54 3838 + R34 3839 + L71 3840 + L27 3841 + L36 3842 + L60 3843 + R60 3844 + R62 3845 + R27 3846 + R55 3847 + R56 3848 + L137 3849 + R92 3850 + R45 3851 + R7 3852 + L41 3853 + L13 3854 + R4 3855 + R32 3856 + R92 3857 + R19 3858 + L51 3859 + R69 3860 + L29 3861 + L89 3862 + L69 3863 + L89 3864 + R46 3865 + R53 3866 + L75 3867 + R34 3868 + L76 3869 + L83 3870 + R259 3871 + L69 3872 + R7 3873 + L36 3874 + R9 3875 + L43 3876 + R80 3877 + R43 3878 + L63 3879 + R872 3880 + L64 3881 + R64 3882 + R88 3883 + L77 3884 + R39 3885 + L55 3886 + L15 3887 + R15 3888 + R31 3889 + L693 3890 + R1 3891 + L34 3892 + L41 3893 + R41 3894 + R19 3895 + L19 3896 + L51 3897 + R51 3898 + L7 3899 + L46 3900 + L47 3901 + R92 3902 + R8 3903 + L46 3904 + R46 3905 + L29 3906 + R40 3907 + R689 3908 + L93 3909 + R93 3910 + R34 3911 + R77 3912 + L11 3913 + L24 3914 + R74 3915 + L52 3916 + L398 3917 + R91 3918 + L91 3919 + L55 3920 + R443 3921 + L27 3922 + R39 3923 + L49 3924 + R760 3925 + R96 3926 + L31 3927 + R24 3928 + L91 3929 + L55 3930 + L756 3931 + R622 3932 + R71 3933 + L23 3934 + L68 3935 + L10 3936 + L90 3937 + R4 3938 + L23 3939 + R19 3940 + L61 3941 + R566 3942 + L476 3943 + L95 3944 + L579 3945 + L55 3946 + R60 3947 + L98 3948 + R63 3949 + R275 3950 + R73 3951 + R27 3952 + R482 3953 + L594 3954 + R76 3955 + L64 3956 + L68 3957 + L49 3958 + R17 3959 + R35 3960 + R81 3961 + L56 3962 + R63 3963 + R91 3964 + L41 3965 + L671 3966 + R57 3967 + R41 3968 + R73 3969 + R27 3970 + R45 3971 + R68 3972 + L436 3973 + L5 3974 + R321 3975 + L643 3976 + L50 3977 + R85 3978 + R591 3979 + L76 3980 + L41 3981 + L659 3982 + R22 3983 + R80 3984 + R53 3985 + L47 3986 + L95 3987 + R72 3988 + L11 3989 + R96 3990 + L70 3991 + L82 3992 + L618 3993 + L88 3994 + R88 3995 + R82 3996 + L97 3997 + L85 3998 + L88 3999 + L12 4000 + R619 4001 + L119 4002 + R855 4003 + R60 4004 + R79 4005 + L94 4006 + R44 4007 + R56 4008 + R96 4009 + R52 4010 + L991 4011 + L7 4012 + R50 4013 + R73 4014 + L473 4015 + L759 4016 + L41 4017 + L96 4018 + L97 4019 + L99 4020 + R413 4021 + L31 4022 + L90 4023 + R490 4024 + R257 4025 + L71 4026 + L76 4027 + R4 4028 + L24 4029 + L56 4030 + R205 4031 + L29 4032 + R70 4033 + L70 4034 + L36 4035 + R26 4036 + R10 4037 + R92 4038 + R2 4039 + L93 4040 + L31 4041 + R418 4042 + L91 4043 + R3 4044 + R48 4045 + L88 4046 + L60 4047 + R97 4048 + R754 4049 + R44 4050 + R20 4051 + R55 4052 + R88 4053 + R42 4054 + L36 4055 + R936 4056 + L62 4057 + L54 4058 + L13 4059 + R29 4060 + R56 4061 + R62 4062 + L70 4063 + L86 4064 + L162 4065 + R824 4066 + R458 4067 + L48 4068 + L44 4069 + R51 4070 + L21 4071 + L870 4072 + L95 4073 + R8 4074 + R459 4075 + L893 4076 + L10 4077 + R81 4078 + L42 4079 + L83 4080 + R262 4081 + L31 4082 + R93 4083 + L23 4084 + L376 4085 + R10 4086 + R90 4087 + L5 4088 + R5 4089 + L82 4090 + L18 4091 + R12 4092 + L88 4093 + L69 4094 + R79 4095 + R60 4096 + R399 4097 + R73 4098 + L23 4099 + L17 4100 + R74 4101 + L797 4102 + L263 4103 + L37 4104 + R97 4105 + R57 4106 + R27 4107 + L25 4108 + R14 4109 + L98 4110 + L75 4111 + R44 4112 + R78 4113 + L22 4114 + L81 4115 + L619 4116 + L30 4117 + L70 4118 + L97 4119 + L95 4120 + L90 4121 + R99 4122 + L38 4123 + L79 4124 + R57 4125 + L84 4126 + R11 4127 + R31 4128 + R5 4129 + L98 4130 + R14 4131 + R805 4132 + R59 4133 + R30 4134 + R46 4135 + R84 4136 + R40 4137 + R51 4138 + R32 4139 + R92 4140 + L99 4141 + R16 4142 + L44 4143 + R52 4144 + R38 4145 + L20 4146 + L505 4147 + R65 4148 + L78 4149 + L71 4150 + L829 4151 + L95 4152 + R58 4153 + L563 4154 + R36 4155 + L36 4156 + R20 4157 + L20 4158 + R61 4159 + L61 4160 + L46 4161 + L73 4162 + L72 4163 + R91 4164 + R929 4165 + L33 4166 + R4 4167 + L82 4168 + L18 4169 + L301 4170 + R71 4171 + R79 4172 + R220 4173 + R43 4174 + R81 4175 + L578 4176 + L869 4177 + L408 4178 + L36 4179 + L47 4180 + L255 4181 + R25 4182 + L508 4183 + L64 4184 + R47 4185 + L70 4186 + R55 4187 + L85 4188 + R27 4189 + L43 4190 + L13 4191 + R890 4192 + L361 4193 + L28 4194 + R1 4195 + R6 4196 + R39 4197 + L93 4198 + L556 4199 + L64 4200 + L305 4201 + L90 4202 + R24 4203 + R66 4204 + L1 4205 + R32 4206 + R482 4207 + L27 4208 + R46 4209 + R68 4210 + R10 4211 + R90 4212 + R87 4213 + L464 4214 + R82 4215 + L41 4216 + L64 4217 + R3 4218 + R97 4219 + L35 4220 + R35 4221 + R98 4222 + R602 4223 + R98 4224 + L98 4225 + R51 4226 + L51 4227 + R66 4228 + L266 4229 + L156 4230 + R56 4231 + R45 4232 + L45 4233 + R57 4234 + R36 4235 + R7 4236 + L28 4237 + L61 4238 + L203 4239 + R72 4240 + R220 4241 + R18 4242 + L18 4243 + L9 4244 + L97 4245 + R262 4246 + L56 4247 + R71 4248 + L19 4249 + L52 4250 + R45 4251 + R32 4252 + R778 4253 + L883 4254 + L72 4255 + L86 4256 + R86 4257 + L96 4258 + L12 4259 + R74 4260 + R61 4261 + L79 4262 + R43 4263 + R62 4264 + R72 4265 + L60 4266 + R33 4267 + L98 4268 + L59 4269 + L35 4270 + L906 4271 + R25 4272 + R675 4273 + R97 4274 + R44 4275 + L58 4276 + R4 4277 + R30 4278 + R37 4279 + L64 4280 + L90 4281 + L15 4282 + R15 4283 + L47 4284 + R16 4285 + L41 4286 + L28 4287 + R55 4288 + L55 4289 + R43 4290 + R57 4291 + R75 4292 + L75 4293 + R8 4294 + R817 4295 + L4 4296 + L35 4297 + L240 4298 + L46 4299 + R40 4300 + R70 4301 + R11 4302 + R259 4303 + L93 4304 + L136 4305 + R55 4306 + L125 4307 + R88 4308 + L325 4309 + L44 4310 + R153 4311 + L53 4312 + R24 4313 + R76 4314 + L26 4315 + R80 4316 + R661 4317 + L34 4318 + L44 4319 + L47 4320 + L226 4321 + R36 4322 + L66 4323 + R88 4324 + R346 4325 + R32 4326 + R85 4327 + L32 4328 + L91 4329 + R38 4330 + R574 4331 + R38 4332 + L3 4333 + R91 4334 + R81 4335 + L46 4336 + R39 4337 + L22 4338 + L95 4339 + L40 4340 + L52 4341 + R35 4342 + R27 4343 + R58 4344 + L76 4345 + L28 4346 + L11 4347 + R7 4348 + L99 4349 + R22 4350 + R79 4351 + R42 4352 + R79 4353 + L26 4354 + R4 4355 + L78 4356 + R45 4357 + L45 4358 + R89 4359 + R10 4360 + L37 4361 + R38 4362 + L32 4363 + R4 4364 + L72 4365 + L30 4366 + R32 4367 + L68 4368 + L76 4369 + L26 4370 + L6 4371 + L26 4372 + R4 4373 + R35 4374 + R1 4375 + R60 4376 + R44 4377 + R56 4378 + R24 4379 + L51 4380 + L92 4381 + R13 4382 + L24 4383 + L28 4384 + L2 4385 + R2 4386 + R10 4387 + R44 4388 + R48 4389 + L16 4390 + L45 4391 + R8 4392 + R5 4393 + L11 4394 + L8 4395 + L50 4396 + R49 4397 + L28 4398 + R39 4399 + L12 4400 + R8 4401 + R37 4402 + L2 4403 + R8 4404 + R35 4405 + R21 4406 + R9 4407 + R2 4408 + R17 4409 + L50 4410 + L13 4411 + R46 4412 + L50 4413 + L27 4414 + L45 4415 + L8 4416 + L1 4417 + L39 4418 + R38 4419 + L43 4420 + L37 4421 + R16 4422 + L36 4423 + R39 4424 + R43 4425 + R41 4426 + R1 4427 + R50 4428 + R48 4429 + R8 4430 + R8 4431 + L27
+10
data/01/test.txt
··· 1 + L68 2 + L30 3 + R48 4 + L5 5 + R60 6 + L55 7 + L1 8 + L99 9 + R14 10 + L82
+27
flake.lock
··· 1 + { 2 + "nodes": { 3 + "nixpkgs": { 4 + "locked": { 5 + "lastModified": 1763464769, 6 + "narHash": "sha256-AJHrsT7VoeQzErpBRlLJM1SODcaayp0joAoEA35yiwM=", 7 + "owner": "NixOS", 8 + "repo": "nixpkgs", 9 + "rev": "6f374686605df381de8541c072038472a5ea2e2d", 10 + "type": "github" 11 + }, 12 + "original": { 13 + "owner": "NixOS", 14 + "ref": "nixpkgs-unstable", 15 + "repo": "nixpkgs", 16 + "type": "github" 17 + } 18 + }, 19 + "root": { 20 + "inputs": { 21 + "nixpkgs": "nixpkgs" 22 + } 23 + } 24 + }, 25 + "root": "root", 26 + "version": 7 27 + }
+83
flake.nix
··· 1 + { 2 + description = "Flake-based development environment for C++."; 3 + 4 + inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; # unstable Nixpkgs 5 + 6 + outputs = 7 + { self, ... }@inputs: 8 + 9 + let 10 + supportedSystems = [ 11 + "x86_64-linux" 12 + "aarch64-linux" 13 + "x86_64-darwin" 14 + "aarch64-darwin" 15 + ]; 16 + forEachSupportedSystem = 17 + f: 18 + inputs.nixpkgs.lib.genAttrs supportedSystems ( 19 + system: 20 + f { 21 + pkgs = import inputs.nixpkgs { inherit system; }; 22 + } 23 + ); 24 + in 25 + { 26 + devShells = forEachSupportedSystem ( 27 + { pkgs }: 28 + { 29 + default = 30 + pkgs.mkShell.override 31 + { 32 + # Override stdenv in order to change compiler: 33 + stdenv = pkgs.clangStdenv; 34 + # Comment the line above if you want GCC 35 + } 36 + { 37 + packages = 38 + with pkgs; 39 + [ 40 + clang-tools # IMPORTANT - it **always** MUST stay right above clang 41 + clang 42 + 43 + codespell 44 + cppcheck 45 + doxygen 46 + gtest 47 + lcov 48 + vcpkg 49 + vcpkg-tool 50 + 51 + # BUILD 52 + pkg-config 53 + meson 54 + ninja 55 + just 56 + 57 + # LIBRARIES 58 + libcxx 59 + 60 + # DEBUGGERS 61 + lldb 62 + ] 63 + ++ (if system == "aarch64-darwin" then [ ] else [ gdb ]); 64 + 65 + env = { 66 + # Tell clangd to use the real clang wrapper that *knows* about include paths. 67 + CLANGD_FLAGS = "--query-driver=${pkgs.clang}/bin/clang*"; 68 + 69 + # Ensure Meson picks clang instead of GCC. 70 + CC = "${pkgs.clang}/bin/clang"; 71 + CXX = "${pkgs.clang}/bin/clang++"; 72 + }; 73 + }; 74 + } 75 + ); 76 + 77 + # Feel free to delete this once the project is initialized. 78 + templates.default = { 79 + path = ./.; 80 + description = "Meson-based C++ project template"; 81 + }; 82 + }; 83 + }
+10
meson.build
··· 1 + project( 2 + 'aoc25', 3 + 'cpp', 4 + default_options : [ 5 + 'warning_level=3', 6 + 'cpp_std=c++23', 7 + ], 8 + ) 9 + 10 + subdir('src')
+42
src/00/solution.cxx
··· 1 + #include <cstdlib> 2 + #include <filesystem> 3 + #include <fstream> 4 + #include <iostream> 5 + #include <print> 6 + #include <string_view> 7 + #include <string> 8 + 9 + // DATA_FOLDER is injected by Meson so solutions do not have to care about paths. 10 + #ifndef DATA_FOLDER 11 + #error "DATA_FOLDER is not defined. Meson should inject it via cpp_args." 12 + #endif 13 + 14 + int main(int argc, char **argv) { 15 + std::string_view mode = "real"; 16 + if (const char *env_mode = std::getenv("AOC_MODE")) { 17 + mode = env_mode; 18 + } 19 + if (argc > 1) { 20 + mode = argv[1]; 21 + } 22 + 23 + std::println("Day 00 placeholder"); 24 + std::println("Mode: {}", mode); 25 + std::println("Data folder: {}", DATA_FOLDER); 26 + 27 + const std::filesystem::path data_root{DATA_FOLDER}; 28 + const auto input_path = data_root / "input.txt"; 29 + 30 + std::ifstream input{input_path}; 31 + if (!input.is_open()) { 32 + std::println(std::cerr, "Failed to open {}", input_path.string()); 33 + return EXIT_FAILURE; 34 + } 35 + 36 + std::println("Contents of {}:", input_path.string()); 37 + for (std::string line; std::getline(input, line);) { 38 + std::println(" {}", line); 39 + } 40 + 41 + return EXIT_SUCCESS; 42 + }
+96
src/01/solution.cxx
··· 1 + #include "common/istest.h" 2 + #include <algorithm> 3 + #include <cstdlib> 4 + #include <filesystem> 5 + #include <fstream> 6 + #include <print> 7 + #include <ranges> 8 + #include <string> 9 + #include <string_view> 10 + 11 + #ifndef DATA_FOLDER 12 + #error "DATA_FOLDER is not defined. Meson should inject it via cpp_args." 13 + #endif // !DATA_FOLDER 14 + 15 + const std::filesystem::path data_root{DATA_FOLDER}; 16 + 17 + struct Rotary { 18 + int value = 50; 19 + }; 20 + 21 + // @return how many times the rotary crossed 0, but *not* the times it stopped 22 + // at 0 23 + int rotate(Rotary &rotary, int value) { 24 + int result = rotary.value + value; 25 + int crossed_0 = 0; 26 + 27 + int begin = std::min(result, rotary.value); // looks modern, but it's really 28 + int end = std::max(result, rotary.value); // hideous 29 + auto range = std::ranges::views::iota(begin + 1, end) | 30 + std::ranges::views::filter([](int x) { return x % 100 == 0; }); 31 + 32 + for (int _ : range) { // Kotlin .forEach would have looked so much better 33 + crossed_0 += 1; 34 + } 35 + 36 + while (result < 0) { 37 + result += 100; 38 + } 39 + while (result > 99) { 40 + result -= 100; 41 + } 42 + rotary.value = result; 43 + 44 + return crossed_0; 45 + } 46 + 47 + int main() { 48 + // scaffolding 49 + std::string data_path{}; 50 + if (is_test()) { 51 + data_path = data_root / "test.txt"; 52 + } else { 53 + data_path = data_root / "input.txt"; 54 + } 55 + 56 + std::ifstream input{data_path}; 57 + if (!input.is_open()) { 58 + std::println("Can't open the file."); 59 + return 1; 60 + } 61 + // end scaffolding 62 + 63 + Rotary rotary{}; 64 + int password_part_1 = 0; 65 + int password_part_2 = 0; 66 + 67 + int times_crossed_0 = 0; 68 + 69 + // horrendous code below 70 + 71 + for (std::string line; std::getline(input, line);) { 72 + std::string_view rotation = std::string_view(line.data(), 1); 73 + std::string_view number_sv = std::string_view(line.data() + 1); 74 + 75 + auto number = std::stoi(number_sv.data()); 76 + 77 + if (rotation == "L") { 78 + number = -number; 79 + } 80 + 81 + // ridiculous - a function has both side effect and a return value 82 + // this shit reminds me of out parameter convention so much... 83 + times_crossed_0 += rotate(rotary, number); 84 + 85 + if (rotary.value == 0) { 86 + password_part_1 += 1; 87 + } 88 + } 89 + 90 + password_part_2 = password_part_1 + times_crossed_0; 91 + 92 + std::println("Eureka! {} / {}", password_part_1, password_part_2); 93 + 94 + input.close(); 95 + return 0; 96 + }
+11
src/common/istest.cxx
··· 1 + #include <cstdlib> 2 + #include <string_view> 3 + 4 + bool is_test() { 5 + std::string_view mode = "real"; 6 + if (const char *env_mode = std::getenv("AOC_MODE")) { 7 + mode = env_mode; 8 + } 9 + 10 + return mode == "test"; 11 + }
+1
src/common/istest.h
··· 1 + bool is_test();
+61
src/meson.build
··· 1 + common_inc = include_directories('common') 2 + common_lib = static_library( 3 + 'aoc_common', 4 + sources: files('common/istest.cxx'), 5 + include_directories: common_inc, 6 + ) 7 + 8 + day_list_cmd = run_command( 9 + 'python3', 10 + '-c', 11 + ''' 12 + import os, sys 13 + root = sys.argv[1] 14 + for name in sorted(os.listdir(root)): 15 + if name == 'common': 16 + continue 17 + path = os.path.join(root, name) 18 + if os.path.isdir(path) and os.path.isfile(os.path.join(path, 'solution.cxx')): 19 + print(name) 20 + ''', 21 + meson.current_source_dir(), 22 + check: true, 23 + ) 24 + 25 + day_dirs_raw = day_list_cmd.stdout().strip() 26 + day_dirs = [] 27 + if day_dirs_raw != '' 28 + day_dirs = day_dirs_raw.split('\n') 29 + endif 30 + 31 + foreach day : day_dirs 32 + day_src = join_paths(day, 'solution.cxx') 33 + day_data = join_paths(meson.project_source_root(), 'data', day) 34 + 35 + day_exe = executable( 36 + 'day' + day, 37 + sources: day_src, 38 + include_directories: [common_inc], 39 + link_with: common_lib, 40 + cpp_args: ['-DDATA_FOLDER="@0@"'.format(day_data)], 41 + ) 42 + 43 + test( 44 + 'day' + day, 45 + day_exe, 46 + args: ['--mode=test'], 47 + env: { 48 + 'DATA_FOLDER': day_data, 49 + 'AOC_MODE': 'test', 50 + }, 51 + ) 52 + 53 + run_target( 54 + 'run-day' + day, 55 + command: day_exe, 56 + env: { 57 + 'DATA_FOLDER': day_data, 58 + 'AOC_MODE': 'real', 59 + }, 60 + ) 61 + endforeach