advent-of-code 2025.5.0

Solutions to Advent of Code
Documentation
1
2
3
4
5
73   95 62 6   3  76  313 617  4625 8  179  7    2  7  1     19 6282 351 91 15  255 168 585 1426 51 517 115   4 81 936  716 585  8939 8688 1    55 979 674 178 98 929 171   2 929 56  3421  3 782 73 929 22 162 682    22 398 28  5 11 27   1  3 959 942 66   5 848 24 3369 624 7  9968 675 3995 39 712 53  517 12  34 99 2  899 366 816 97   9 664 74  936 86  94 42 628   3 9  979     8  823   13 958 6  4    52 48 82 518 63 57  2  158 638 353 1849 532 41 556 4122 2   48 18  65 136 596 2  687 816   8 5   8  9 25  8 3   42  54 685 37 43 4742 694   45 59  43  9 6   9   996 9    67 894 11 46    9   4 5258 98 32 43 81 25  494  1 41   259 3623 4   342 467 63 6489 264 23   1 45 53   29  92 34 8252 18 84  979 529  969   24   29 7  9    5 697  4 59  69 28  37 86 38 68 81 962 3315  6 264 84  743 192 5  69 8  42 5    8 93 43   2 7659 92 89 978  436 195 3  583  67 2    23 51  5  9 363 73 64 11  525 839  46 8  591 19 29   1 159 418 499 713 75 91 492 71  214 42 82 7597 877 71 9848 799 394 564 39  32 79 47 272 29 47  18   1 57  69 395  7 9535  345  9 749 4  4     56  56  63 2  75  52 412 629   3 85 629 86 27    2 85 59 49  876 66 3    34  68   7   7 7     95 988 999 8   3     4 99 994  7 59 95  71  78 182 9  723  3 244  3 61  882 964 42  181 1937 98 7118 49  37  142 26   1 875 7747   92 16 63   8   8 61   9 73 2   61 69  4  23 443 881 339 898 23  2796 422  957 25 3    437 86 83   45   45 52 57 416 72 388 4556  8 11 99   44 65  98 52 39 45  483 94  19 44 362 35 93 94  76  4  97 86 96     28  47 237 932  899 7  85 953  64 22 25  24 976 27 84 6661 92 8   2  7 21 57   2 34 1  16 874  1 11  74 73 58   31  95 294 4947 94 35   5 7814  36 5  566 126 6   2 85  17    1 78  75   5 43  44 2137 25 26 68 86   111 61  563 322  2 629 86 59 633 87 52  248 3   988 27 77    9 2646 85 1  892 763 2   2311 8697 3  6    54 721  98   9  3 1  97   5  57 966 76 5   22 51 767 9    63 6539 1   75 4665 157 22  96   2   56 575 1667 311 62   69 9769   38 224  37 7   57 77 198 3  5  54 885 478 46 33 386 55   74 517 74 55 26   893 6   3165 11 59 52 269 74 678 79 61 6   7   5  857 9  284 131 5612 487 686 49 769 447  496  5 63 742 94 28  78 69  137  9 61 315  49  878  22  244 26 557  2 12  45 56  35   826 81   998 49 225 67 8    1  8 48 635  71 79 73 72  1416 41  272  261 7  83   38 23 1  64 5417 35    2 54 784 123 852 111 2686 51 62 53 94   8 46  173 3  63 551 74  733 921 7    67 5482  8 42 3   96 32  9  74 55  632 63  577 377  676   2  8   6 2815 25 388  71 71  19 3   421 869 992 6  733 976 375 437 812 46 47 8  182 666 2   86  6253 848 2577   88 266 7  51 92 426   3   6 11 735 584 6    2  94 859 221 86 927 6   87 8468  688   4 7413 14 96    9 91 45 59 33 96  38 78 887 77 464 129 3362  2 82 3   78  42   5   9 739 453 9447 85 3  727 575 9532 14 92 21 42 223 266 9662  5 3   3   4 858 2  93 12   37 192 21 738  252 62 42  17  1 5    54 28 646 46 212 818 946  2   967 271 93 888  466 98 851 251  5 5   2    5 637 5   5  82 62 984 22 7    657 341 75 972 36  3425 8563  6 63 25 24  374  31 4  9     2 251  2   9   5 55 22 759   3 165 935 639  7 47 774  5 923  7 2  98 592 49  4 484 437 462 199 225 96  34 75   9 118 86   8 88 71 279 24 8  579  85 226 541 97   695  7  8 2  49 259 327 91  667  45 31 38 413 5  974 991 42 522 5    325 39 83 856 476  223   946 619  8956 951   2 46  67  59   8    275  78  443 27 4  682 2633 622 442 53 159 572  74  27 566 929 88 971  8 75 971 4  89  858 7    65  19 86 6233 24   1 45 8   868 91  6164  7 995  7 9     5 51 4  688 726 751 95  7 7    6   1  6  66 783  8 918  77 66 4  858   9 56   31 5753 131 84  4 359  9 11   57 44 73 329 381 121   7 64     9 86 58 24  271 85  88 436 622 659 5353 73 31 75   47  63 762 75   9  731 6      7 231  16 819 41  85 56 31 152 52 48    7 11 97   692 26 8654 7336 6    3956 21 422   84  2 79 71 19 987 457
21  986 35 94 85  13 4153 2238 6278 58 1888 1131 5  97 66   477 243  413 72 55  279 827 323  855 67 356 643  55 75 4422 412 931  291  1574 2    75 946 174 924 41 392 748 431 445 89  1525  9 225 12 597 16 955 9759  469 662 69  9 77 97  68  5 859 376 488 66 953 57  224 925 88 1834 156 972  23 544 13  254 178 39 35 42  45 76  657 22  34 847 982 795 696 22 19 827  55 98 167   835 7338  163 537 9  75   33 6  91 839 77 54  7  379 128 128 6395 412 12 751 3962 63  69 95 859 954 518 36 611 824  73 9  49 83 34  1 2   68  29 685 56 38 5461 3564 222 824 64  7 8   63  741 39  477 144 42 28   42  96 9712 36 59 96 34 55  955 19 39   231 7266 519 172  79 28 327  784 87   6 32 26   73 622 39 9884 13 76   76 712  876 6234 4524 52 46 285 415  2 64  39 63 483 21 64 73 38 317 7769  7 357 999 242 142 2  21 4  33 272 52 65 29  44 2546 44 49 787  66   15 6  375 322 444  3  17 14 64 913 38 59 15  213 661  73 3  283 23 49   3 181 764 478 782 73 46 443 662 769 32 88 9463 527 75 6961 991 571 828 243 63 15 34 156 46 55  552 15 11 435 119 64 7962 5523  9 291 6  81   158 377 545 8  69  33 524  62 271 37 154 36 64   77 37 29 542 379 34 45  938  64 322 697 5     82 677 978 388 83  328 35 199 15 55 516 72  92 942 8  84   3 178 54 6   414 441 296 371 7749 11 2614 12  358 388 44  62 557 8466   93 41 73  36 948 46  78 27 11  38 88 89  62 946 39  664 752 679 3612 847  623 36 14   252 33 434  85 9432 22  5 993 19 13  937   7 16 82   66 38  42 55 39 16  897 28  92 23 897 12 14 71  57 77 455 35 9447  134  44 315 1333 155 7  43 468  77 47 86  66 996 49 38 8664 45 99 54  8 71 48  15 15 66 73 455 57 25 538 52 89   41 377 129  613 21 74  42 5919 371 13 697 258 4   3 31 572   67 818 61 292 64  64 5332 58 46 19 711  261 74  778 334  7 558 14 22 767 76 52  732 3   165 17 491 274 5766 33 34 836 358 41  5445 941  11 685  16 862  57  23 95 58 5857 59 83 994 97 61  83 36 182 59   95 8199 6   32 9877 435 97  52 814 7215 394 3342 173 94   12  823  161 488 575 2   29 81 929 45 54 38 579 185 46 17 963 749  76 856 66 91 7175 513 14  9924 71 79 97 747 5  634 29 37 8   3   81 192 4  287 835 4559 648 152 63 359 375  329 99 93 942 91 78 939 728 571 36 91 2219 44  3459 62  998 35 153 11 57 263 19  1747 648 911  714  9 898 43 9   82  5 21 825 284 44 35 894 5938 41  6815 898 47 79   78 76 43 86 323  86   21 83 384 486 178 319  194 79 6  33 59 357 669 487 73 57 172 99  142 123 9    36 9599 64 58 66 164 224 61 77 49  551 65  598 851  766  41 74 578 898  34 556  63 989 74 1   271 662 117 7  696  55 135 488 566 41 71 82 939 328 37  823 6159 899 7862  289 414 5  78 88 531 661   2 31 348 536 3816 8  21 149 126 49 357 99  54 7573  645  41 2513  6 61  529 28 56 32 37 56 781 87 254 55 729 473 2731  5 11 6   81 636 319 432 521 319 6194 63 38 617 666 8736 45 13 19 98 299 425 2923 94 486 2  13 467 14 74 88   85  23 87 2217 788 91 733 69  3 155  19 76 868 17  48 775 114  12  916 325 65 593 1696 65 252 784 98 885 96  28 165 4  16 283 55 825 19 18   258 943 75 434 628 2487 6456 49  9 35 19  1253 58 9  256  55 148  5 352  46 98 26 928  61 876 524 273  5 21 651  9 423  1 39 25 748 93  9  35 738 915 563 293 87 726 97  35 442 21 869 91 41  46 65 38 959  99 355 675 857  226  8 97 71 25 553 919 46   37  38 3  25 543 1  785 416  9 614 1368 731 17 88 418 2879 312   413 2954 5294 335  48 573 47  941  68   694 982 8387 99 7  166  272 925 456 57 551 645  17  52 938 481 89 586 32 36 261 36 442 711 614  34 421 73 347  51 359 41 835 266 68  7366  3 175 48 93    4 92 5  118 761 651  6 68 82  51   4 97 788 328 22 431 628 47 77 882 775 96  917 5542 416 67  5 776  4 7156 95 75 78 263 565 5813 61 379    2 76 56 38  571 49  95 355 664 983 3892 72 83 32   8  944 522 9265 92 114 284    7 917  56 473 89 596 84 18 859 93 416  45 65 511  391 43 7893 1332 12   9614 51 438  929  6 26 51 29 488 524
12 2948 16 91 58  11 3859 5753  853 66 7762 6331 89 77 5813 369 366  334  5 989 135  46 234  519  3 512 921 567 95 8148 42  5898 827  7818 75  236 137 399 34  14 813 979 522 436 19  1794 25 633 45 432 14 27  9572 3233 558 27  5 14 92  69 49 249 527 176 43 333 22  426 499 34 7693  61 996  94 73  15 7267 177 4  57 86   2 1   29  56 636 226 478 974 858 69 6   76 611 94 8564 1468 2857 1598 357 87 32  893 5  1  267 21 883 58 234 323 261 726  366 41 85  7513 22 926 63 695 249 55  95 133 214 859 11 69 42 56 49 53 294 312 587 36 52 447  4628 972 822 54 41 7   48  687 666 545 444 64 35 4878  11 1596 46 69 26 6   4 7932 23 662  71  2643 821 672  75 12 688  964 22 837 64 196  56 325  8 649  88 62   94  38 7862 3928 6914 54 34 436  41 19 1  326 34 446 63 39 85 1  92  5724 49 322 689 927 457 75 14 96 72 413 82 17 64  69  145 2  95 6359 76   99 7  15  183 3459 5  55 63 78 98  22  5 935 28   64 395 22 672 69 55 661 816  29  24  55 59 45 942 129 268 37 21 3274 2   47  669 974 763  76 671 6  48 38 683 47 238 478 51 65 665 538 44 3479 4979  9 5   38 893 2644 311 318 37 67 136 435  56 579 71 157 68 83 2759 64 3  686 113 34 82  693 694 943 188 8128 642 367 484 938 95  324 66 495 14 69 992 82  41 65  81 38  12 249 49 7  3964 73  428 338  482 48 4899 65  363 883 74 924 447 4383 2579 74 163 43 248  3 357 42 189 59 34 47 129  82 61  77  612 739  622 3695 448 59 336   52 37 625 496 7773 77  6 792 73 55  82   27 57 376  75 915 64 16 5  321 593 74 628 23   8 53 24 855 83 86 979  8 9369  653 964 542 6238 921 31 67  22 495 93 56 463 564 88 67 8824 47 97 99 89 22 82 894 95 62 95 833 59 49 871 25 75  315 576 159  931 94 19  13 9991 562 63   7 358 3  24 93 734 6756 861 94 561 52  26 8246  1 86 32 8468 884 945 996 793 47 852 24 47 99  72 256   9 99  942 13 438 689  273 72 37 493  13 84  991  352  46 8695 25 665  99  13 35 21 1441 17 44 687 66 152 55 63 921 425  46 44   2  992  282 187 998 81 541 5471 94   923 246 1683 15  914 5157 136 991 2   1  65 839 47 66 97  51 848 34 98 934 4215 73 792 25 42 3569  98 581 7433 63 52 41   7 1  155 71 57 512 162 74 574 6  368  99 7422 684  19 7  578 238   31 96 44 931 28 36 791 697 436 47 73 6563 386 6326 411 151 13  25 13 96 938 16  9815 635 3885 212  7  87 91 37 255 77 41 731 788 44 44 513  122 962 4654 469 25 539 432 89 86 88 72    7 6351  4 226 57  594 447   54 75 5   7 11 631 143  71 61 29  61 813 852  36 281 368  956 61 17 29 632 996 27 9  23  434 723  52 9119 762 691 53 886 62   78 6455 15 127 86 117 974 312 153 64 752  94 9   333 122 65 79 43 789   5 19  365 5218 927  576  688  67 91 91 13 665 512  22 99 351 326 2934 81 25 197 364 75 112 62  49 7729 1948 912  196  4 64 9951  2 14 53  6 42 782 56 745  7 992 994 8133  8 33 5   89 935 778 253 122 216 4698 64 86 664 216 1414 42  7 58 76  95  72 7337 63 236 74 17 766 84 32 727  36  63 1  5294 616 34 842 66  7 113 194 38 464 18  14 651 6919 283  85 648 23 991 8498 19 179  54 14 114 682 31 52  3  45 455 32 935 73 3537 371 48  36 368 141 572  5211 47  9 29 583 1681 67 3  523  87 114 48 474 175 52 42 963 683 855 468 99  76 73 278 87 771 73 44 26 922 91 81  96  13 75  237 877 41 659 52  58  32 98 767 81 87   3 91 33   7 449 717 8   211  928 21 91 71 1  36  127 228   3 328 4  79 13  36 892 175  4 941 9782 147 71 32 542 8491 1354 1958 5613 5267 661 719 179 132 5889 2493 886 797 4673 43 66 929   94 198 1    7 655 9574 59 258 865 46  39 175 93 25 212 44 277 974 6692 7  794 82 35   93 226 7  633 698 378  436  8 36  59 6997 82 65 94 734 856 833  3 51 55 681 276 98 818 476 54 991 816 44 32 81  872 852 451 5317 1   67 49 853 56 5395 16 57 53 15  148 8337 53 1117  54 32 6  48 6927 94   2 255 226 524 96   85 74 232  9  519 631 6943 13 892 189  126 1485 57 783 73 169 74 2  778 99 1952 42 87 743  922 97 1215 7262 7363 164  78 124 3827 71 15 81 92 613 776
8  6129  5 19 79 245 5534 1158   75 65 5943 5977 26 24 5799 477 39    48  6 164 532   3 53   197  5 53  316 744 52 9595 13  3874 814  53   84 7492 253 83  88  14   2 916 272 94  263   61 39  21  7  13 41 51  3985 2377   1 66 31 6  522 64 41 297 171 268 96 918 48  114 142 73    9   1 86    6 2   39 1149 595 5  65 61   6 9   9    4 443 595 965 925 247 11 3   28 216 47 6271 1692 5935 6925  95 87 413 671 8  5  597 19 712 12 36  874 888 412  784 53 5     95 96 123 25 179 49  8   64  62  64 688 58 67 77 99 57 66 446 782 6   22 6  3    3948 179 431 2  69 882 486 272 287 119  45 4  64 6611 864 11   36 31 62 6   7 1523 67 2115 77    54 518 286   7 76 718   21 47 914 4  7521 63 948  8 362  41 372  26   9 9229 7117 5463 31 28 983  26 76 4  532 66 576 55 63 97 9  93   323 12 863 693 624 347 33 33 53 28 558 98 53 78 418  374 2  27 2759 8     2 78 2   234 3567 7   7 77 58 13  9   4 325 9    35 511 75  86  4 88 475 29   55   4  39 21 41 3   353 555 11 42 9159 3   59   78  77 982  99 518 1  77 44 39  98 186 698 79 72 643 21  91  811 9526 27 1   77 189 1443 868 637 79 59 912 739  64 272  4   6 62 95 5554 16 9  513 45  46 576 791 668 132 798 1413 351 618 784 534 456 888 96 256 64  5 669 12 571 7   31 69  75 467 58 2  8581 26  933 148  584 74 272  223 198 57  3  368 57   339 3132 54 691 43 522  9 161 66 335 7   9 89 681   3 41  4   523 325    2 2156  23 8  6495  18 23 775 922 6375 89  7 94   4 51  94   42 63 211 851 166 49  8 4  761  26 19 594 29   9 32 32 712  9 91 483  7 5841 3493 572 514 6713 6   56 29   9 545 67 99 312 116  2 2  5343  1 25 25 44 42 76 464 37 44 84 661 97 33 469 96 18 4359 742   2   41 47 98 656   45 121 41   6  61 94 23 37 148 5459 222 45 122 146 9  7546  6 39 2  2842 1   123 76  512 93  63 82 12 82  27 674   7 736   6 96 266 698   25 54 43  39  55 821 95   342  79 2793  2 6724 62 977 18 25 5416 16 72  31 25 967 72 64 42  5443 46 99   26 278  423 75  437  3 517 4174 35     7 333 3245 83   19 5125 724 957 399 2  21 38  78 88 58   7 478  1 4  9   3917 48 93   8 71 5152  65 922 22   78 83  6   6 3   62  7 34 839 742 27 4   39 733  71 628  774  88 1  672 4561   6 67 21  23 62 21 644 691 957 14 63 5571 386 9873 557  32 69   4 39 61 385 466 2876 23  8596  86  1   5 63 78 923 57 65 547 651 19  6 934    6 382 2844 546 24 428 311 51 81 93 4     7 4296  6  94 73   76 15     8 42 3   6 29 669 231  94 58 77  52 133   7  67 542 411  867 51 31 53 769 363 87 2  19 1491 512  59 8571 868 757 23 998 18   5  9817 65 561 47 191 298 966 147 68 55   36 5   464 84  86 17 68 24    4 574 188 86   917   88 6163   1 47 26  5 958 183 635 94 427 953 1659 41 13 469 892  6 61  832 98  174 5829 169   83  8 69 7725  3 97 17  3 13 574 24  87  6 216  54  343 21 33 81 929 458 673 236 17   18 96   54 25 161 823 3258 73  4 37 99   2  62   71 48 586 56 65 589 45 65 5318 1    2 8  2733 459 71 569 83 54 465 473  8 92  87   2  15 2845 835   5  57 72 541 3377 1  64    1 52 716 554 81 3   74 19 348 75  22 98 5228 114 7   56  82 123 12     88 28  2  7 675 3865 27 86 7488 73 967 24 618 316 4   5 484 445  87 774 41  43 98 629 46  49 14 61 19 821 75 13   7   4 6   99   97 85 721 56 219   7 72 747 5  19   9 85 42   6 896 2   3   5792 192 11 55 91 5  49  895 887   8 919 2  5  8   47 632 645  2 189 4179 99  99 25 988 6932 3858 4742 2979   41 36  746 514 984 3428 7775 478 734 6178  9 97 787   34 556 4    5 282 1445 7  387 286 8   1  743 55 88 37  19 192 769 5883 9  454 56 4    94 393 7  988 937 879  255 82 4   46 6277 13 61 42  15 173  99  7 43 66 539 994 59 497 2   76 279 387 82 71 68  338 791 775 971  3    6 84 773 55 6911 26 71 75 31  872 7773 13 7399 443  6 3  4  6687 889  8  75  69 17  7    87 66 2113 4  357 94  2282 76 234 588 3792 8349 95  51 57 397 68 8  424 74 4681 43 83 3239 584 21 65     86 6814 75   29 817 7658 48 71  3 55 29  178
*  +    +  *  *  *   +    +    +    *  +    +    +  *  +    +   +    *   *  *   *   *   *   +    *  +   *   *   +  +    +   +    +    +    *  +    +   *   *   +  *   *   *   *   *   +    +  *   *  +   +  +   +    +    *   +  *  +  +   *  *  *   *   *   *  +   *  +    +   +  +    *   +    *  *   +  +    *   *  +  +  +   +   *   *  +   +   +   +   *   +  +  +   *   +  +    +    +    +    *   +  +   *   *  *  *   *  *   *  +   +   +   +    +   *  *   +    +  *   *  *   +   *   *  *   *   +   *  *  *  *  *  *  +   +   +   *  *  +    +    *   *   *  +  *   *   +   +   *   *   *  *  +    +   +    *  *  +  *  *  +    +  +    +   +    *   +   +   +  +    *   +  +   *  +    *  *   *  +    *  +   +   *   +    +    +    *  *  +   *   *  +  *   *  +   +  *  +  +  *   +    +  *   +   *   *   *  *  *  +  +   +  *  *  *   +    +  *  +    *   *   +  *   *   +    +  +  *  +  *   *  +  *   *   +   *   *  *   *  *  *   +   +   *   *   *  +  +   *   *   +  +  +    +   +  +    *   *   *   *   *  *  *  +   +  *   *   *  *  +   +   +  +    +    +  *   +  *   +    +   *   *  +  +   +   +   +   +  *   *  *  +    +  +  *   *   *  *   +   +   +   +   +    *   +   +   +   *   *   *  *   *  *  *   *  *   *   +  +   *  +   +  *  +    +   *   +   +    +  +    *   *   *   *  *   +   +    +    *  *   *  +   +  *   +  *   *  +  +  +   *   +   *   *   *   +    +    +   *  +    *   *  +   *   +    +  *  +   +  *   +    *  +  *   +   *   +  +  *  *   *   *  *   *  *   +  *  *   *  *  *   *  +    +    +   *   +    *   +  +  *   +   *  *  *   *   +  *  +    *  +  *  +  *  *  *   +  *  *  *   *  +  *   *  *  +    *   *   +    +  *  *   +    +   +  *   *   *  +  +  +   +    *   *  +   +   *  +    +  +  *  +    +   *   *   *   +  *   *  +  *   +  +   *   *   *   *  *   *   +    +  *  +   +   *   +    +    *  +    +  +    +  *   *  *  +    +  *  +   +  *   *  *  *   +    +  +    *  +   +    +   *   *  +   +    *   +    +   +    +  +    +    +   *   *   *  +  *   +  *  *  *   *   +  *  +   +    *  *   +  +  +    +   *   +    *  +  *  *   +  +   *  +  +   *   +  *   +  *   *   +    *   *   *  +   +    *   *  *  *   *  +  *   +   *   *  +  +    *   +    +   *   *  *   *  *  *   *   +    *   +    *   +  +   *  +  *   +  *  *   +   *  *  +   +    +   +    *   +  *   +   *  +  *  +    +  +    *  +   *   *   +   +    +  *  *  *  *   *   +   +  +  *   *   *   +   *   *   +    *  +  *  +   +   *  *  +  +    *   *   +    +   *   *  +   +    +  +    *  *   *  +   *   +   +   *  +   +   +   *   *   +  +  *  +   *   +   *   +    *   +    +    *   *  *  *  *   +   +   *  +   *   +    *  *  *   +   *  *   *   +  +    +    +   +    *  *  +    +  +  +  *  +  *   *  +   *  *   +   +    *  *  +  *   *   *   *   +   *   +    +  *  +   *   +    *  *  *  +  *   *   +    +  *   *  +  +   *  +  +    *  +   *  +    *   +  +   *  +  *   +   +  +   +  *   +   +    *   *   *   *  *   +    +  +   +   +  *   *   +  +   *  +  +   +  *   +  +    +   *   *  *   *   +    +    *  *  +  +   +    *  +  +    +  +   *  *   +   *  +  +   *   *   *   +   +  +  +   *  *   *  *  *  +   *  +  +   *   *   +   *   +  *   +  *   *   +  *   *  *  +   +  *  *   *   +   *   +    +   +  +  *  *  *   *   +   +   *   +  +  +   +  *   *   +  +   +    +   *  *  *   +    +    +    +    +    +   +   +   +   +    +    *   *   +    *  +  *   +    *   *   +  +   +    *  +   +   *   +  +   +  +  *   +  +   *   +    +  +   +  +    +  +   *  +   *   *   +    *  +   *  +    +  *  +  *   +   *   +  *  +  +   *   +  *   *   *  *   *   +  *  +   +   +   +   +    +   +  *  *   *  +    *  +  +  *   +   +    *  +    *   *  *  *  +    *   +  *   *   +   +    +  *  +    +  *   *   +    +  *   +   +    +    *  +   *  +   *  +  *   *  +    *  +  +    *   +  +    +    +    +    +  +   +    *  +  +  *  *   *