heh
d12 part 1 (AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa)
| -rw-r--r-- | src/inp.txt | 1140 | ||||
| -rw-r--r-- | src/main.rs | 196 | ||||
| -rw-r--r-- | src/util.rs | 19 |
3 files changed, 1074 insertions, 281 deletions
diff --git a/src/inp.txt b/src/inp.txt index fa33873..8d3476d 100644 --- a/src/inp.txt +++ b/src/inp.txt @@ -1,140 +1,1000 @@ -.....................................................................................................#..................#......#............ -...................#.........#...............................................#.........#...................#............................#... -............#.............................................#................................................................................. -.......#...............#...........#.............#.................................#............................#..................#........ -..................................................................#........................................................................# -.........................................................................................#.......#..................#....................... -....#...........#.............................................#........................................#.................................... -............................................................................................................................................ -..........................................#....................................#...............................................#............ -......................#..............................#..............................#...................................................#... -..............................................#..................#........................................................#................. -...#..............#...................................................#...................#................#........................#....... -.........................................................#..................#..................#............................................ -...........#.................#....................#....................................................................#..................#. -.......................#...............................................................#........................................#........... -.#.....#........#...........................................#...........#...........................#.........#............................. -.....................................................................................................................................#...... -.........................................#.........................................#..........#.........#.................#................. -.......................................................#....................#............................................................... -..................#.........#......................................#........................................................................ -#...............................................#..............................................................#.................#.......... -..........#............#..............................................................................#................#................#... -................................................................#.....................#.....#............................................... -...#...........#.....................#..............................................................................................#....... -...........................................#.........................#.......................................................#.............. -.....................................................#......................#............................................................... -..............................................................................................#............................................. -.....................#....................................................................................#...........................#..... -............................#.......#............................................#...............................#...............#.........# -..#......#...............................................................................#.............................#.................... -..................................................#...................................................#......................#.............. -............................................#...............#............................................................................... -....................................................................#................#.......#.............................................. -#..........................#.................................................#....................................................#......... -................................................#........................................................#.............................#.... -.................................#........#..............................................#......................#........................... -.....................................................#............#....................................................#...................# -...........................................................................#................................................#............... -....#.......................................................#............................................................................... -..........#............................#..............................................#..................................................... -.......................................................#............................................#.....#...........................#..... -..................................................................................#............#...............#............................ -.........................#....................#.....................#.....................................................................#. -..........................................................#...............................#..........................#...................... -.................#.............#.........#........................................................#.........................#............... -..............................................................#.........................................#................................... -#..........#.....................................#..................................#........................#.......................#...... -..................................#...................#...........#........#...................................................#............ -...........................................#................................................................................................ -........#................................................................................................................................... -.....................................................................................................................#....................#. -.#................#...........................#...........#....................#..............#...........#......................#.......... -............................................................................................................................................ -.......................#...............#..................................................#........#........................................ -....#.........................................................#............................................................................. -....................................................................................................................................#....... -............................................................................................................#............................... -.............#.............................................................#......................................#...........#............. -.....................................#.....................................................#............#................................... -................................#.............#....................................................#.......................................# -......#..................#.............................................#..................................................#................. -..................#...................................#...........................#.................................................#....... -..............................................................................................#............................................. -...#...........................................................#............................................#............................... -............#.........#........................................................#.......................#..................................#. -..........................................#.........................................#...............................#.......#............... -............................#.....#.........................#.............................#.....#........................................... -....................................................#....................#......................................#...................#....... -..........................................................................................................#................................. -.....................#..........................................#...............................................................#........... -............................................................................................................................................ -..............#..........................................................................................................................#.. -.......................................#..................#........................................................#........................ -.......................................................................#.................................................................... -...............................................................................#...............#............................................ -.........#.............#......#...............................#.....................................#....................................... -...........................................................................#......................................................#......... -.............#...........................#.......#.....................................#...................#................................ -....................#................................................#................................................#....................# -..................................#...............................................#.........#............................................... -...........................#........................#....................#.................................................................. -............................................#...........................................................#......#...........#...........#.... -.......#.....................................................#.......................#...................................................... -............................................................................................................................................ -..............#........................................#...................................#.....#........................................#. -............................................................................................................................................ -.........#..............#..........................................................#......................#.......................#......... -............................................................................................................................................ -..........................................#......................#...................................#........................#............. -#.....#..........#........................................#....................#..........#..............................#............#..... -............................................................................................................................................ -..........................................................................................................................................#. -...........................#................................................#....................................#.......................... -.................................#..................................................#...................#................................... -................................................................................................................................#........... -.......#..............................#..............#......#............................................................................... -.............................#..........................................#................................................................... -..........................................#......#.........................................#................#.....#......................... -.#.....................#.................................#......#.....................................................................#..... -.....................................................................................#...................................................... -......................................................................................................#.....................#............... -...................................................................#.........................#.............................................. -.........................#..................#..............................................................................................# -............#......................................................................#...................................#.................... -...................#..............#...................#............................................#.....#......................#......#.... -.......................................#.........#......................#................................................................... -......#................#.................................................................................................................... -.............................................................#.............................................................................. -..............#.....................#..............................#........#.....................................#........................# -#...........................................#.....................................#......#.......#...............................#.......... -...........................#............................................................................#...............#................... -.....................#...............................#...................................................................................... -....#..........................#...............................................#.....#...................................................#.. -......................................#.....................#............................................................................... -.............#.................................................................................................................#............ -..............................................#.............................................#............................................... -.#.................................................................................................................................#........ -................................#.......................................................................#................................... -..................#..............................#........................#................................................................. -........................#.................#............#.......#.....#................#.......#...........................................#. -..............#.....................................................................................#...........................#........... -......................................#.........................................................................#.......#.............#..... -..#.....#.................................................#.................#..............#................................................ -......................#.......#............................................................................................................. -.......................................................................................#............................#....................... -.............#.............................#......#......................................................................................... -................................................................#..................#.................#........................#............. -..................#........#..........................................#.....................#............................................... -..........#............................#..................................................................................................#. -..................................................................................................#......................................... -..............#.......#...........#...........#........#..........#..................#......................#.............#.......#......... -.....#...................................................................................................................................... -..........................................#.............................#.......................................#........................... -..........................#..............................................................................#.................................. -.#............................................................#................................................................#..........#. -..................#............#..................#...................................#..................................................... -........#...............................................................................................................#................... -......................#.............#.................#...........#..........#....................#......................................... -............#......................................................................#......................#.................#........#...... -..#.........................#................#............#.........................................................#......................# +.?#???#???#.?.?##?? 6,2,1,4 +.?.????#.???#?.???. 5,1,2,1 +????#??.?. 1,2,1 +???.???#???.??.#?.? 1,7,1,1 +???#???.??????????? 6,6,2 +????.???#??#?? 4,3,3 +??#??#???????? 2,6 +???.#?.?.?#??? 1,2,1,4 +##?#???????????? 9,1,1,1 +?#???#???????????#? 5,2,8 +??.#?#.??????#?# 3,6,1 +?????????##??#.?? 2,9 +??.?????.??.??????. 3,2 +.????.#???#?#?#??.#? 3,1,5,1,1 +?#??..????? 2,1 +?##?.????? 3,4 +#?####?#??.#. 1,8,1 +????.?..#?????.??? 3,6,2 +??#?????????????#?? 8,2,1,2 +?#??.#??#???? 2,6 +#.??.??##???. 1,1,2,1 +?.???#####?#??#.?? 1,13,1 +.????#????.##??#?#?? 7,9 +????????????. 3,6 +?.???##??#?#??..??? 12,1 +.???###??????.????. 1,6,1,2 +.???????.???#?####? 2,1,1,7 +#????.#?..??#? 1,3,1,4 +????#?.#?????#??#?.? 1,1,8,1,1 +?.??#?..?????##??? 1,1,2,1,6,1 +?###..?#?????? 4,6,1 +#.#?????#?. 1,1,3 +#?#?#????#..?? 6,1,1,1 +.???##??.???.???. 4,3,2 +#?#??#.??#??#? 3,1,6 +?#??###?..#?#????#?? 1,3,1,8 +?#???.#??.? 4,3,1 +??##.??#??. 3,3 +??????##??????.? 1,3,1,1,1 +.##???#???????.? 6,3,1 +?#?#????.? 2,2,1 +.??.??.????#? 1,1,2,2 +?#??#????#?? 1,5,1,1 +?.???##?????????. 1,2,1,2,2 +????????####??? 2,9 +??????.??. 1,1,2 +?#?????#.?????.????? 5,1,1,1,3,1 +??????#???#.??? 2,1,1,1,2 +##???#?#????#???##? 2,1,1,1,1,7 +??#???#?#?.#??#?? 7,5 +?.???#????????? 1,1,7 +#?????.#??? 1,1,2 +?..???#?#??#?#??##? 1,15 +??#?????.#?# 4,1,1,1 +.???.?????#?? 2,4,1 +..?##?????#.???????? 8,7 +????.????##? 1,2,4 +??.#??.???#? 2,2 +?.??????#?#?. 1,1,4 +?#...?.???. 1,1,3 +?????.?????#???##?? 4,1,8,1 +?..??.##?#.?.#? 1,4,1,1 +?##?.?.????#??##? 2,9 +???????????? 6,1,1 +.##???.#.. 5,1 +??#????????#???? 1,6 +?#?##???.?#?#?.#?#. 6,2,1,1,1 +????.??.????#????? 2,8 +???#?????????????. 1,1,3,5 +.?.??.##??? 1,2,1 +??#??.????? 4,1 +.???##?#?.??.?? 4,2 +?#.?.??.#???#.?? 2,1,1,1,2 +????#??#.? 2,1,1 +?#?#?#?????##????## 8,3,1,2 +?????#..?..?????#? 4,7 +???.??#???#.?????? 1,3,2,5 +??.?#??##??? 2,2,2,2 +??.??#????. 1,4 +??###????.???? 6,1,4 +????????##?#?#??.? 1,1,1,7,1 +???##???.?.????#??? 5,1,2,4 +????#????.???##???. 2,5 +??.#????.#?#??##? 1,3,7 +????#??##.??# 9,1 +.?#?????.#?#?? 4,1,1 +##???##.????.???? 7,1,1,1,1 +??????..##???##?? 1,7 +???#..??#???#??##?.? 4,1,5,3 +????#.##??###???#?#? 2,3,4,4 +????.?.?#?????? 1,1,7 +???????????. 2,2,1,1 +?#?.??#?#???. 2,6,1 +???????..?? 2,2,1 +.??##?.##.?# 4,2,1 +????.???#.? 3,1 +?#?#####????#?..?? 12,1 +??.?.??.??.##? 1,1,1,3 +???.??#..?# 2,1,2 +?.???????.? 1,4,1 +?#.???##????? 1,1,5,1 +????.???????#????? 4,4 +#?????###. 2,5 +?..??.????##? 1,1,5 +?????.?#??? 3,1 +.?#?...#???.??? 2,3,2 +????#??#??#?..??#?? 8,2,1,3 +.??..??.#? 1,2,1 +.????.??????. 1,1,3 +??#?????????.#??? 4,3,1,2,1 +??????#??? 1,7 +???.?#???????..??? 2,4,3,1 +??.?#????.#?#### 1,1,2,6 +?#??..???#???.??? 3,4,1,1 +.?#?##?..??.??. 6,1,2 +????.???..#. 1,1,1,1 +????#?#?#?????. 4,4,2 +??##???.#?#?#? 6,1,1,1 +.?#.???#?? 2,4 +.?#?##?.??? 5,1 +#.??##.????## 1,2,2,2 +.?##??#?????#??#?.? 6,7 +??????.?#.? 6,1,1 +??#.????#?#?? 2,5,2 +????#????.??#.#?? 4,1,1,2 +????.??????? 1,5 +?.?????????? 1,1,1,4 +.??#?#?????#.? 1,9 +..#????.#? 1,1,1 +##????#??.??? 8,1 +.#?.?..#?#???#?.? 2,7 +???##?#?????#?????? 8,5 +??????##???###???.?? 3,1,4,3,1,1 +?..?#?#???#.???#???. 7,4 +?.#????.?.#.?.???? 1,5,1,1,1,1 +#??????...# 1,4,1 +..???.???#?? 3,4 +#?#??###?#?#???.?? 4,7,2 +??#????????#???.##? 3,2,4,1,2 +???##??#??? 1,5,1 +#..??#????#?.?#?? 1,9,2,1 +?#??#.??.??#?#???#?. 5,9 +??????#.?.?????????? 4,2,1,1,5,1 +??#.#?.??.?#? 2,1,1,2 +#.#.???#?##?.?.??? 1,1,7,1 +????????#??? 1,4,1,1 +????#..????????? 1,1,1,6 +.??..?#??##??.? 2,2,4,1 +?.?#?.????? 2,2 +??#??#???.?.??? 7,1,1 +#?#?.?.?#??####.???? 4,1,7,1 +?.??.??#????# 1,3,1,1 +?.#????... 2,2 +#????.#??# 4,1,1 +.#..???#?###??#?. 1,4,7 +???.?#????.?? 2,6,1 +.#?#??#?#. 4,3 +??..????#?? 1,1,4 +??#.?#.???#???##? 2,1,2,7 +?.?.??.?.??.???.?## 1,2,1,1,2,2 +##???.??#?????#??.?? 3,1,8,2 +?#?.??.?????#?#?? 2,1,9 +??#??##?..???. 6,1 +??????????#??? 1,1,4,1 +.#?#??????.??????## 5,3,2,1,3 +????#??#????..?? 3,3,1,1 +??.....??????##????? 7,2 +??????????#?#?? 9,1,1 +#...?.???.????????? 1,1,1,1,5,1 +.???##?????.?? 5,3,1 +???.??#?##???? 1,1,6 +.??#??#?.?? 2,2,1 +???#???????## 7,3 +??#????##???# 1,9 +#????#?#???.#??????? 1,5,1,1,3,1 +#??#????????#?#??.?? 8,8 +?????#?###?#?#??.? 1,1,9,1,1 +????..???. 3,1 +??#?#.????#????.?### 3,1,2,4,4 +.????#?????? 5,1,1 +??#?.????#???? 3,3,1,2 +????????.???????.#? 7,3,1 +????????#?#??????.? 11,1,1 +..#?#??..??.?.? 5,2,1 +#??.???.????#? 1,1,1,6 +???##?#?.??.???.. 6,1 +?##?????#??#????# 4,7,1 +??#??.??##?.??? 4,3,1 +????#????.?? 1,1,3,2 +???#?.??#. 1,2 +..??#??????.???? 8,3 +#????????????.#.?.? 1,5,4,1,1 +??.??????##????? 1,11 +?#????????.##??#??#? 5,2,2,2,1 +?????..??????#???? 2,2,6 +.???.?#??? 1,4 +?.##?????#.#?? 1,4,3,1 +?.##?#?????#?????.?? 12,1,1 +.????#????????##? 1,9,3 +?#????????????####?. 5,2,7 +?.??????#?????? 1,1,3,3 +.????#??#??????.?. 1,4,1,3,1 +??.??????.##?#????? 2,1,5,3 +??????#?.? 3,1 +.##??????????#? 4,8 +?????????????#.?. 4,1,3 +??.#?#?#?.?.????? 6,1,2 +?.?????##?.?##? 1,8,3 +??#???#?..??. 1,1,2 +??#?.??.??? 1,1,3 +.##?#?#?#??#?.??# 6,1,1,1,1 +?#??.?.???. 3,2 +???#?????..?.?##? 7,1,4 +?.?.?##?###?.. 1,8 +??.###????#?. 2,4,1,2 +.??#.????#?????.#. 3,1,1,1,1,1 +#?#?##??????#?#?.#?. 1,11,1,2 +?#???.??#?##??#. 2,8 +.???#.???#??????#. 1,1,10 +?.??.??##??#?.?.?. 1,2,8,1,1 +??.????#???.?? 1,4 +??#?????.?.?.#. 1,2,1,1,1 +.???#???#?? 1,3,3 +????.??????????? 2,9 +?#.?##???? 2,2,1 +?.???????##??.# 3,6,1 +#???.#???????..#?#?? 1,2,2,5 +?????##????#?.?????? 1,1,8,1,2 +???.???.?..?#?? 3,2 +??.???#???#??????. 2,5 +.???.#.#???#? 1,1,1,4 +???#.??#?? 1,1,4 +?..????#??#? 1,5,2 +.#??#???#?..?#?.???? 2,6,2,2 +#?#????????.. 5,2 +...????????????.# 3,1,1,4,1 +.?#??#????#?#???#?#. 2,2,11 +??#????##??## 1,6 +#?#???#?..#?????# 3,4,2,3 +??##?????.????? 8,1 +.#???#?#?.#??### 5,1,6 +##.???????#.?#?..?? 2,6,1,2,1 +.#??????#?#?#?. 3,8 +?#??????#.. 3,1 +?#???.?.?? 2,1,1 +#???????#????? 2,1,3,2 +?#.????????#? 1,1,2,3 +??#??##???????#??? 1,3,2,4 +?#?.?#?????.?? 1,3,1 +?##???#???.?.#. 10,1,1 +???#???#????#??.?#.? 12,1,1,1 +?????.#????. 2,5 +??###??????#?#??#?.? 3,1,10 +???.?????##?????#? 2,10,1 +?#?#?#????? 2,5,1 +???#??#.??? 4,1,3 +??#???#????? 1,6 +???...????#?? 1,2,1,1 +??????#???.???#??#?? 5,7 +?.??#..?#?##.?. 3,4 +?????????#???? 1,10 +?..???...??##?#?#?? 3,6 +.??.??#?#???#??## 1,5,1,3 +??.???#?#???#??##?. 1,1,6,6 +??.##??##?? 1,3,3 +???????.?? 1,1,1 +?#.#??#?#???.? 1,4,1,1 +.?#???#???.??##? 2,3,1,4 +??.??...?. 1,1,1 +#?????#??? 1,2,2 +.???#???##?????.??. 9,1,1,2 +?????..???#???? 1,2 +????????.? 2,1,2 +?????#???? 2,3,1 +.#??.#??#?#??? 1,1,8 +.??????.??.# 5,1 +????????.#????##??? 2,2,7 +?#?.#??#?. 1,4 +?????#?#?. 5,1 +?.????..?#?.???? 2,1,2,3 +??#?.?#?????..??###. 2,6,4 +.??.????.??????## 1,4,5,2 +.?..??.??? 1,2,1 +.??.?????#??????. 1,1,1,1,4 +????#?...??#??. 1,3 +??????.?.?#????. 1,3,1,1,1 +.#?..?#?.??####??#?? 2,2,9 +.??#.#???? 2,5 +.??????????.???#??. 3,2,6 +#??..???#..#.#??.#. 3,4,1,3,1 +???????#?#????.??? 11,2 +??#???#?.?.#??? 8,2,1 +???.???.?#?##? 1,1,1,4 +????##???.??#???.?? 5,2,3,1,1 +?????###?.???.?#??? 6,2 +?#??#???????????#?#? 6,11 +..???????#. 2,2,1 +????####?#?#?.???? 8,2,1 +?.????.???# 1,1,1 +??#??????##????.# 1,4,4,2,1 +.??..#?.?#?? 2,2,2 +?????????#?#??#.??? 1,10,1,2 +?????#?????. 2,2 +..??#??#??.??..# 3,1,1,1,1 +.??????.?#?. 5,2 +????????#?#. 2,3,3 +##??##????.. 2,2,2 +?.#..?#?#??. 1,1,1,1 +?.?##??##???###?.??? 1,6,6,1 +?????#??#????. 3,1,3 +#?.?.##?????#??#. 1,4,6 +.????####?#..??? 1,7,2 +#?.#..?????#?.?.#? 1,1,1,4,1,1 +.?#?#??????..??##?? 9,2 +????.#.????? 1,1,1,2 +#??#?????????#?.. 2,1,1,2,3 +#..#?#?#??#?#?#?? 1,13 +.???###??#.?.?..?. 9,1,1 +??#?#?#??????.?? 1,10,1 +#?#??.?????? 1,3,1,3 +?#?####.?#??? 7,4 +?.?.#.???. 1,1,2 +??????#??#.??? 7,1,2 +????????.#??. 3,2,1,1 +?..#?.?????? 1,1 +?????.?????#?????? 2,1,1,1,2,5 +.?#?#??#???#?.?.?#?. 12,3 +#????#??????.?.?#? 1,4,1,1,1,3 +??#??##??.???? 7,1,1,1 +#???#?.##??. 3,1,4 +??..???????#??.??#.? 1,1,7,1,1 +??????#??? 1,3 +???#?.??????##? 1,2,1,1,2 +???#?#??#?#?????. 1,1,4,3,1 +???##?????.??..??#? 8,1,2 +????.???????.???.#? 1,1,7,3,1 +??#???#?#?. 2,1,1 +??.????#??#??? 6,3 +#?????????# 6,1,1 +???????##??? 1,1,5 +.?.???.#???? 1,5 +????????????? 1,1,3,1 +???#????#.???##??# 1,1,1,1,1,6 +#.??##???#?????? 1,1,6,2 +??#?#??.???#?#??.?.? 4,6 +.?#???.??? 1,2 +?#.#.??.??????#?.?.? 1,1,7,1,1 +.#??.#???? 2,1,1 +???#???.?#??#????? 1,1,1,6,1 +?##????.?#??# 5,5 +????.??????. 1,6 +?.?...##??????#? 1,2,3,1 +???##??.???..???#?? 2,4,2,2 +????#?#??##?##??? 1,1,11 +??????###?#.? 1,5 +.?#???????..?#? 3,1,1 +..#..???#??????????# 1,1,5,3,2 +??????#??#?.????#?.? 10,1,2 +.??????..??#?#? 3,1,4 +#?????.??.???.##? 1,3,1,1,3 +???.#..#??#????#?# 3,1,1,7,1 +.##?#??#??.? 5,1,1 +.#?#???#?..#??????? 4,2,1,1,2 +?????????# 3,2,2 +????.?.??##.?.. 2,1,3 +??.?.????#?#?? 1,1,1,5 +?.#????.#?? 2,1,1 +...#?#????????##? 7,4 +?.????????##?.#???#. 1,8,2,1 +?##?.??.?#?.?# 2,2,2,1 +#?????.#????#???? 4,1,1,5 +#????#????#??.#???? 1,6,1,1,1,1 +???????.??#?#...?. 1,2,3,1,1 +?#.?????##?#?????? 1,13,1 +??..##?????##.?. 2,6,2,1 +?#??###..?#????????? 6,1,3 +?##?.????????? 3,4 +?.?????.?#? 5,3 +.?..??.?##?#?.???#.? 1,1,6,1,2,1 +?#.?.?.?##????????#? 1,1,1,4,2,1 +???###?#???.???? 7,2 +??#????#?#.#???# 1,1,4,1,1 +.??.?#??#?#??#?????? 2,11,1 +?##???.????.?#?.? 6,2,2 +??#.??????#?..?? 1,1,5,2 +.???##???#? 5,1 +??.?.#?..#??? 1,1,1,1 +#.?.??##???.. 1,7 +.#.##?###?#? 1,9 +#?.??.#?##?#?#?##?. 1,1,4,6 +..??????????#?.?? 2,5,1,2 +..??#???????##????? 2,11 +#???#??###??? 2,3,3,1 +??.???.?#?.##. 1,2,2,2 +?#???????#?. 6,4 +?????.?##.? 1,3 +??.??...?.????##? 1,1,1,6 +.##????.?#? 2,1,2 +??##?###??..?? 7,1 +?????#???##???#?.?? 11,2,1 +?#??##??????? 2,3,1,3 +?#????????? 2,4 +??#??????.?????? 5,1,4 +#?#????#.#?????.?? 4,1,1,1,1,2 +?.#?#?#?#?.???#? 1,6,5 +???#?????.??.? 4,1 +?.??????.?#.?? 1,2 +????#???#???? 5,2 +??#.??????????.?#? 1,5,1,1,1 +?.???#..??#.?#?#?? 2,1,3,6 +.?#.??????. 2,3,1 +??.??###?# 1,5 +#.???#?##??.#?#.?. 1,2,2,1,1,1 +?#?#?####??????? 1,1,10 +#?????????#?#????. 1,1,10 +?.?#???????#. 1,2,1,4 +???.?????.?????? 3,2,1,1 +?????.????.??#? 3,3,2 +.?#???#?#?##?##? 2,7,2 +?.????.??.?? 4,1,1 +.??#??????#??? 3,6 +????.??##?..#. 2,3,1 +??.???.??##. 1,4 +?#..??.??????? 1,1,4,1 +##??#?#???#?#?? 7,6 +#???????????..#?? 5,3,1,3 +?.????#???.#??? 1,5,1,1,1 +??#?.???#???? 3,4 +???????#?? 1,1 +?###??????..???. 9,2 +??????#.#?.#??#?? 2,1,1,1,5 +#???????.??. 2,1,2 +??.?????????? 1,2,1 +??.?#?#?#???????. 2,1,4,2 +#??.##?????? 1,1,5,1 +????.????#?#? 3,5 +??.??#??????#?#? 1,4,1,1,2 +?.#?#?...??.?#. 4,2 +??????##??? 2,5 +???##?.???????????. 6,2,4,2 +?.???????????#??#? 1,1,2,1,2,1 +?????.#?#??#??????#? 1,2,1,1,10 +.??????#.?.?. 7,1 +?#?#??#???##?????? 13,1 +??????????#.????# 10,1,1 +#?#?..???? 1,1,3 +????.???????? 2,1,2,1 +#??#?#??#???.???? 4,6,1,1 +..??##???##????? 9,1 +?????##?????????? 2,3,6,1 +?#????????. 2,1,1 +??.?#???##?#???? 1,9,1 +.??????#??.???## 8,3 +.??.?.####. 2,4 +.#.??#??..?. 1,2 +.???..#??#??#???##?# 2,1,2,8 +#?#????##???#?.????? 1,1,10,1,1 +???.??#???#???#?# 1,7,1,1 +??.????#?#???????.? 4,1 +????#?.?.#..?? 4,1 +??#??#.??.????????# 2,1,1,3,5 +????.?##?????????#?? 1,1,8,5 +.?#?##????????##? 8,4 +?..??.?#.##?.?? 1,1,1,3 +??????????## 1,1,5 +#?..??#?????? 1,1,5,1 +?.#??#??#.?.? 7,1 +.?#?.?##????#?? 1,9 +??###.??.??#??#? 1,3,1,5 +??..?#???#???.?. 1,5,1,1 +?.#??#.??#?#??.?.? 1,4,6 +?.?????#??.??.???.? 7,2,2,1 +?#??#???.?. 6,1 +.?#?##?????.?#. 10,1 +???#??#??#??#?#.?? 1,2,2,1,4,2 +????#?#???????.??#. 1,5,2,1,1 +##?#?.#????????#??? 5,1,5,2,1 +??????#??? 1,7 +.????????????#??. 8,2 +#??#?#?##?#??????? 2,12 +???????#????#?###?.? 2,1,9 +??.#??.????? 1,3,1 +?#.???.??..??#??.. 2,1,1,1,1,2 +?##?#???.#????? 7,2,2 +??#?????.???##? 5,1,2,3 +?????#..??.?? 4,1,1 +??.???#..???#? 2,2 +..?.#??#?.? 1,4,1 +?#?#??????#?###????? 5,6,1 +???#??.#?.? 3,1,2 +????????#???.#???#?# 1,7,2,1,1 +?????#???????????.?? 13,1 +??##?#.#??..#????? 1,4,1,4 +??????????.?. 3,2,1 +??.#.?.#?#?#????# 1,1,1,8,1 +?????.??#. 2,1 +?.?##??#?#??? 3,1,2,1 +#.#?..#???????####?? 1,2,1,9 +#?#??#???#?#???? 1,1,10 +???#???????###???.?# 1,2,2,3,1,1 +?????????#??.# 1,1,4,1 +??.?????#??#??.???? 9,1 +.???##????#???# 6,1,1,1 +##????????.????# 2,6,5 +#?#?##??##???##????? 15,2 +??#??????.? 4,1,1 +?#????#?????.??? 3,2,3,1 +????.?#?.#.???.?#? 1,2,1,2,2 +??###????#???? 3,2 +#?##?#??????.? 8,1,1 +????.??#??#???? 1,1,7 +?.??#??###???.?? 9,1 +#???####.?.?? 1,5,1,1 +?..??#????????? 3,5 +..???.?#?#.?# 1,1,4,1 +.??#??#?.???????.?? 5,4,1,1 +??..?##??#??#??.?#?? 2,10,2 +??#????#?????.??#?. 8,1,1,2 +???#?????#??????? 1,3,2,2 +#..?##?.#.?#??.??? 1,4,1,1,1,1 +?#??????#.? 1,1,1 +.???#??#.????#.???# 5,1,1,3,4 +.??#?##?.?????? 1,1,2,1,1 +???.??#?.? 2,1,1 +???#??????????# 3,1,4 +?.#???.####.??#?? 1,4,5 +?#????#####????? 10,1 +#.#.?????# 1,1,1 +??????.??????? 6,4 +???.??.??.????#????? 1,1,2,1,10 +?????????????#.?#?? 13,1,1 +???.????????.?? 1,2,3,1 +.??#??????#.?? 3,6 +?????.???# 1,1,1 +?????..#??? 2,1,1 +#??.##?#??????? 2,5,1,2 +#?#?.?.????. 4,3 +???.??##??#??? 2,9 +??#???..??.???? 1,1,1,1,2 +???#?#???.????..?. 9,3 +.??#???#????#? 2,3,3 +.?###.?#?##?#???.? 3,9 +??.??#?#?.???.#??#.? 1,3,2,2,1,1 +?#?#???#.?.??.?? 4,2,2 +??.??????????#??## 1,5,1,3 +??????#.??? 1,2,1 +?#??#??.?#?#.. 1,3,2,1 +?#?.##????.? 2,4,1 +?????###??????. 2,4,1 +??#?##?#????#??#???? 8,6 +#?????????#???? 1,2,1,1,5 +?#?.??##??????.#? 2,6,2 +??.????????###??#??# 10,4 +?##??.?#????? 2,7 +.???..??????#???#?? 1,10 +?????????#?????#? 2,7,1,1 +?.??#?????. 1,2,3 +?..??..#?#?? 1,2,3 +.??.?????? 1,1,2 +??#?#????#?.#??? 6,1,1 +?#??.????#? 3,1,4 +?.??????????#???.??. 1,4 +.#?..????.?????? 2,2,4 +#???##?????????.?#? 1,1,2,1,5,2 +????##???.?? 2,6,1 +#.?#??..##.##?##???? 1,3,2,6,1 +.???.###??????#..?.? 3,2 +?#???#??.???#.# 1,2,1,1,1 +?.?#???..? 3,1 +..??????.???##?#? 3,6 +??.####??###???? 4,4,1 +?????????. 1,2 +..??.?#?#?? 2,4 +##????##?. 4,4 +#????#????#?? 1,4,3 +?.??.#????.#??? 1,1,2,3 +#?..##???????#?????? 1,3,2,1,2,1 +.##??#?.??.?? 3,1,1,1 +?##?#.?..#??????? 5,1,4,1,1 +?..???##??????#?#??? 6,6 +?##???#??#???? 2,5 +???##?#???.????.? 8,1 +???###??..?????# 5,1,2,1 +??????.?.#??#??# 1,2,1,2,1 +??????????#.??????# 2,3,1,1,1,1 +????????##????#. 1,11 +?#??.#??#?##??? 2,4,5 +?#.?????.? 2,1 +??##???#?#??## 5,1,1,3 +.?..????#? 1,1,1 +..#??#???.???.???? 6,3,1 +#?????.?#???.#??. 4,4,3 +.??##?#.??.? 4,1,1 +?#?????.?? 3,1,1 +#?????#???#??#???? 8,5 +.?##????#?? 3,4 +??#??#?..?###?. 5,4 +#?#???????????.?. 3,3,6,1 +?????#??#??#. 1,2,1,1 +??#..??##?#??? 1,1,6,1 +.???#??#?.????#?. 8,2 +????#????##?.? 1,3 +???#?.?#???#. 1,2,5 +#????????.??#? 1,4,2,3 +?.??????#? 1,5 +?????????##?.????# 1,1,5,1,1,1 +#????#????#????#??? 1,9,2,1,1 +??.?###?#???????# 6,1,1,1 +?.?##?##??##? 3,6 +..???###?##?#.???# 9,1,1,2 +??????..#? 4,2 +??.????.#.?????#### 1,1,1,1,8 +.#?.??.?.#?? 2,1,2 +##??#?????.???#?. 7,1,5 +#???#???.? 1,1,1 +??#????.?# 3,1,2 +.?????#??#????? 3,7,1 +#???.????.?##?? 2,1,4 +??#?.??.?. 1,1,1 +..#.???#??#??? 1,4 +??????.??##?? 1,2,4,1 +?#????#.#. 1,1,1 +????#??.??..#??.? 3,1 +.????.?#?##???.? 4,1,5 +?.?#???????..#????? 1,7,1,1,4 +?.??????#????#??? 2,12 +.????.????? 2,1,1 +.???.???#??#??? 2,7 +?.?#??#?#?..?? 7,1 +?.?#?.?#??? 2,3 +.?#?????.#..??#?? 3,1,1,3,1 +???.#?#.??#?? 1,3,2 +?.?#???#??#???.?.? 1,1,1,1,1,1 +.#.?.??#.??.#.?????? 1,1,2,1,1,4 +.??#???#??#??#?#? 10,4 +.##?#.????????? 4,1,1,1,1 +???????????????. 12,1 +#??..?????##? 3,1,2,3 +?????##???##..?. 2,8 +????????#????#?# 2,3,3,4 +???????.#????.?.?? 2,1,3,1,1,1 +????#??????.? 3,1,3,1 +?#?#??????.?.??? 1,1,2,1,2 +?#????#??.?##??#? 6,3,1 +?#??.????. 3,1,2 +.#????#????????#?.#? 12,3,1 +??????????#???.#. 8,4,1 +???###?.?..??.? 6,1,1,1 +????.????#???#??.? 3,4,4 +#?#?#?#????#????#?? 1,1,6,2,1,2 +???#.????#?#? 2,1,1,4 +??#??#???.???#.? 5,1,1,1 +..?#??#???????# 4,3,1 +???#???.?#? 4,1 +??#?#??####???.???#. 2,8,1,1 +##?.????##?#.?#?? 3,6,1 +??.???????.?.?? 1,1,4,1 +#?#???.???.??..#. 4,1,1,1,1 +.?..????#?????#?? 1,1,9 +??.?#?###?.??? 6,1 +#.?#????.??.?#????? 1,2,3,1,4 +?#??##??#????????? 13,2 +.??.??##?????.. 1,6,2 +????#.????? 3,1 +.?????..?#..???.. 5,1,2 +????#????.??.?#?# 1,2,3,2,4 +?????#??.??#?.??#. 6,3,2 +?????#????? 3,3,1 +?#.??#??????? 1,4,2 +#??????.?#??????? 1,2,1,5 +?#.????#?##??????? 1,1,11 +????##???.????## 1,2,1,1,2 +.???????#?#??????#?? 3,2,1,1,1,3 +?#????#?#??.??.????? 1,1,6,1,2,1 +...#?.?.?. 1,1 +???##?#.#..?.?? 1,4,1,1,1 +???#??????#?#? 7,3 +???????#?.. 1,5 +?.?#??????.????? 4,1,1,1,1 +?.???.?.??#???#??#?? 2,7,4 +?.?.???###???##?? 1,11 +???#?..?#?????#? 5,2,1,2 +???.?????#???#?#?? 1,1,1,6,3 +.#..?????? 1,1,1 +.???????????#???? 1,9 +?#????#.?.? 3,1,1 +??????.??#??? 1,1,4 +.??#?#????#?.##??? 5,3,4 +#???.?#??#???? 1,1,7,1 +???#?.??.?.#??# 5,2,1,1,1 +?..#???#??.#.?..?? 1,1,4,1,1,1 +?#???.?#???#??#?? 4,9 +?.#?.?###? 2,3 +?????#?.?##?.?.??. 5,2,1 +?.???###???#?#?????? 1,9,1,1 +.?..?????#???. 1,3 +.????###??#?????? 1,4,1,3,1 +??????.??.? 4,1 +?#???????? 1,3 +?????????#.?????#?? 4,1,1,1,5 +?????#???#.???#? 1,7,5 +???#?????#?? 1,5,1,1 +???#.??#???.???? 1,3,1,1,1 +??##?.?##.??#?? 2,2,1 +??#???.??.?.??### 4,2,4 +?..??#.??.?##? 1,1,2,3 +?????#??#?#.#???.??? 7,3,3 +.#??#.?.#? 2,1,1 +.##???#.#???? 6,1 +.?.##?..?? 3,1 +???.?#??#??? 1,1,2,1 +.??????.????#?????# 1,1,10 +??????#??.??????#??? 1,1,4,1,5,1 +#?#???#??????? 3,2,2 +#??.??#?#??#???#? 2,12 +??#???????. 3,1 +????#.?..?????##?.?. 2,2,1,1,6,1 +.????.??#. 4,1 +??????#??.#.??.? 1,2,1,2,1 +#?????..?##?? 4,1,3 +???##????#..#? 6,2,2 +.?.?????#??.?#? 7,1 +??#?.???.. 1,3 +.?????????#? 8,2 +?..????#??? 2,1,1 +??????.????.#? 5,2,1 +?.?#.????#??? 1,5 +??###.???..???#? 5,1,1,2 +#?##??#??##.? 7,3 +??#???.???#?#?? 2,4 +#???.#???????#? 1,1,3,6 +??#.????###.?. 3,6 +#???#.##??? 1,3,4 +?.#?#?##?..?? 6,1 +#..#???#?#?????##? 1,1,13 +#?#???###?#?.????? 4,4,1,1,2 +????#.???#??????.? 4,8 +.??#.??..?#?#??.#? 2,2,5,1 +?????#??###?#????? 1,1,1,6,1,1 +?#??#????###????#? 7,4,1,2 +.#?#?#?##?????.???? 5,4,1 +#?#?????###. 1,9 +????#???##??????? 10,2 +?.??#???##???#??.# 1,1,1,3,4,1 +??????#???#?#?? 6,6 +##?????####??????? 11,4 +.?????#??.?#?#????? 1,2,1,1,5,2 +??#?..??#.?#?#?? 2,1,1,1,2 +.#??#?.#..???????# 4,1,4,1 +??#.??.?????#? 1,1,1,2 +?????##??.# 2,4,1 +?????#????#?#?##??? 3,3,10 +?..?????###?? 1,8,1 +##????.#???#??.??? 2,1,7,1,1 +???#??????#?.? 2,1,3,1 +.#?#???#?.????#??. 7,6 +?.??????.###????.? 1,1,1,2,4,2 +.?????#??#??#?##?## 2,1,4,8 +??.???#???????# 1,1,3,6 +?.#..?????#.. 1,2,1 +??#???#??. 2,1,1 +#????#???#????? 10,1,1 +?????????? 3,4 +??#?????????##??#?# 2,2,5,4 +???###???#?#??#??# 6,5,1,1 +????.??#??.? 2,2 +.???##??##?????? 1,10 +##??????.?.#??? 6,1,1,1 +??##??##?..?# 2,2,2 +#?#.???#.????. 3,4,1,1 +#????##?##.???????. 3,3,2,4 +??????#?#????#.? 1,9 +?.??.?.?#???#???.?.? 1,1,1,2,4,1 +??#?#?##??.????.? 4,3,2,1,1 +??????.#??.???#.???? 4,1,1,4,1,1 +?.??????.#?? 1,6,1 +??.???????#? 1,7 +??????.?##?##?#?.? 2,1,9 +???????#???.??#.#. 5,5,1,1,1 +.??????##?????#? 1,8,2 +?.?#..???.???.?. 1,1 +?????##?.??###?#? 2,5,6 +???.?.?.#. 1,1,1 +#???##??.#? 1,6,1 +????#???#??.???..#? 1,5,1,1,2,1 +????#??###??.?? 1,1,1,6,1 +#?.#???#????.?#????? 1,2,1,1,6 +?..??##??#...?.?? 5,1 +???.#?.?.?? 3,2,1 +#????????#??# 1,1,7 +???#?#??????#?#?.?? 8,3,1 +????????##? 1,1,3 +??#???.??##? 1,1,3 +?????.???????#? 3,1,2,3 +#.##?..??.??.?#?#. 1,2,2,1,1,1 +??.???????#?????? 1,1,5,1,1 +.??.?.?#??? 2,2,2 +???????###?. 1,6 +?#?#?.?????? 5,3 +?#?##?#.????#???? 6,4 +??##?..??? 3,1 +.????.#??#??####??#? 3,13 +#????.?????? 1,1,1,1 +.???.#????? 2,3 +?#.?????#???? 2,1,3 +??????#????.??? 1,6,1,3 +#?##????????#??.??? 15,1 +???#?.??##?#??????.. 4,10,1 +?#??#?????.?.??? 4,1,1,1,1 +??????????#??#?.?. 1,1,3,1,1,1 +???..??????.###?..# 3,1,1,4,1 +??#.?#?#??????# 1,6,1 +?#??#??#??.???????? 5,1,1,5 +?.##??###????.?? 3,3,1,2 +??.????#???#?#?..# 6,3,1 +.????#???.??#. 1,3,1,2 +?#??#?#?.?. 1,4 +.#?#?.????? 3,1,1 +????#????#?.?????. 2,1,1,2,1,2 +?#??#?.?.##???.? 6,2,1,1 +??????????.???. 2,1,2 +?????#.????#??#?? 2,2,6 +???#??#?##?????.??# 11,1,2 +.??????#????? 1,7,1 +?####??????.?#? 5,2,1 +.?????##?#??.?? 9,1 +#.?#???... 1,1,1 +?#?..?#?#?#.???.?.# 1,6,1,1,1 +.????.???? 4,2 +?????##???..??#?? 1,3,1,3 +????#??.?.?.??. 6,1,1,1 +???#??.?#.?? 2,1,1 +#??????.??#? 1,1,1,1 +?..??###????.? 1,7 +.??###?.##??. 3,2 +.#?????#?#??#? 5,1,1,2 +.#?#????##?#??#?.? 9,5 +.#?#???#.???##? 1,3,1,6 +#???.????###??? 3,4 +?????????#??#???#.? 1,1,8,1,1 +??#??#?.?? 6,1 +??#??####.??#?# 2,4,4 +?#????#??.?.? 1,5,1,1 +??????.#???#?.?? 1,2,1,3,2 +??????.##. 5,2 +??#?.#?.??.?.#? 4,1,1,1,2 +????#.??#????#??.??? 2,1,3,1,3,2 +.#????.??. 2,1 +??#???????#????? 5,3,2 +?#?????.??#????.?## 2,2,2,3,2 +.??#????.???#???#. 3,1,1,3,1 +??.???##???????? 1,2,3 +?????#..?? 1,1,1 +.??##?#?#?? 4,5 +????#????..????.?#? 7,4,1 +?..???#??#???###? 7,3 +?..??.?.#? 1,2,1 +?.??#?..#???#??# 1,8 +.#?????#??..??????.. 1,3,3 +???#?#??.????????? 7,1,1,2,1 +?.?##??.?#? 4,1 +#??#???#?..? 4,1,1 +.#??.#??????#..#???? 3,3,1,1,5 +??#?????..? 7,1 +.??.#?####?##? 1,1,8 +.?#???????.?##?.? 6,4 +?.#????.?#??.?# 2,1,1,1,1 +?.##.??????#? 2,4 +??????#????#?#??? 2,10,1 +???#?##??##? 7,3 +?##???????????..? 5,1,1 +??.?.??????.? 1,6 +??????#?##?? 1,1,5 +#???#.#?.#? 5,1,1 +..???.???#?????.?? 3,1,2,3,2 +???????#?? 4,1 +????.??#??????????? 2,1,11,1 +?##?##?????# 8,2 +??????#????? 1,4,1 +??#???#?#?? 8,1 +.?????#??.?#?#? 3,5 +??#?#???????# 8,1,1 +#?...??.??#?? 2,4 +??##?.?????.? 5,2,1,1 +#????.??.??.?????? 5,2,3 +?#???????????? 1,1,1,3 +??????...?#??. 2,3 +#???.????? 1,1,1 +????#??..??? 1,2,1,1 +.#???????..#? 5,2,2 +?#???#?.??? 6,1,1 +???..??.?.??? 1,2,1,3 +?#??#?#?.???# 2,4,1,1 +?.?.????..#??#?.?? 1,4,1,2,2 +##?..#..???.. 3,1,2 +.#??#????? 6,2 +.??.???????##??#???# 1,1,2,9 +..??.??#?#???? 1,8 +?????#???? 5,1 +??#??##?.?#?.??.#??? 3,4,2,1,4 +?????.??#????#???? 2,1,6,1,1 +.???#?##??#?.?#?. 9,2 +?#???..???? 1,1 +???#.#?#???. 3,5 +?.???????#??? 1,2,4,2 +????#???????? 2,4,2 +?????.#?.? 4,1,1 +#??#?#????...#??? 7,1,1,1 +?##??.#??? 2,1,2 +.?...????? 1,2,1 +???.??????#???##?.? 1,1,8 +???.??#.#????# 1,3,6 +?#??...???#?#??????? 2,7 +??#???????#.?? 3,3,3,1 +.?#?#????#???. 4,4 +#?.????#?#??##.??? 1,2,8,1 +??#?#??????? 1,3,1,1 +??.??##..?.##. 4,1,2 +#?????#????# 1,1,6 +?#?#????????.??# 1,3,3,1,1 +#.???..??##?#?#? 1,3,9 +??.?.#?###?.?????#?? 5,2 +.???#?.?????#?.??#? 1,2,5,3 +????????#????#???? 1,13 +????????????#?? 1,3,2 +??.???????#??## 3,1,5 +.?.??????.???? 1,2,1,3 +#?.?#??????#### 2,1,1,1,5 +??#??##?.??.?? 3,3,1,1 +.?..??.##?????.? 1,1,4,2,1 +.???.##???? 2,2 +#?#??????. 4,4 +?????????????#?????. 2,3,1,7 +????#????#?#?? 2,1,1,5 +????????##.?? 2,4,1 +?#??????.??.???? 3,1,2,1,1 +?.?#????.????#? 3,1,2 +??.????????#.????.? 1,3,3,2 +.??#?????.?.??? 8,1,1,1 +.?#??.?#?. 2,1 +?.#???#?#??.?. 1,9 +???#????.??##????? 5,5,1 +?#??.??#???.??.?? 4,1,3,1,2 +?#?..??????#? 3,1,1,1 +.?????.???? 1,1 +#????????.?? 1,5,1,1 +..???#??#?. 4,1 +#?.???#?#????? 1,1,8 +#??.??.#???.?#??? 2,2,2,3 +???#.?#??#??##?? 3,9 +?.#??##?#???.#? 1,7,1 +#??????#.##.??? 1,1,3,2,2 +?#?????.?###??????# 3,6,1 +?..??#?#????.??? 8,3 +?????#?????????? 8,1 +??????#.??...?? 1,1,2,1,1 +??.#????#???.?.#.??? 1,6,1,1,1,3 +?#??????.??? 1,2,1,2 +?.##?.???#?????. 3,5 +.????.?.?###??#?### 2,11 +??#.?.#?.???#??? 3,1,1,5,1 +?????##.?.?#?#?? 3,2,1,5 +?##?#??.?##.#?#? 6,3,4 +.#??????.?#..? 3,1,2 +???.????.??#??. 1,3,4 +???##?????.#? 6,1,1,1 +.?#????#??.??? 2,1,3,1 +#??#?.???#?.???. 1,3,1,1,1 +.??#??????? 1,3,2 +#?####??????#???? 7,6,1 +##??.?????????? 3,2,1,1,1 +??????#??##???#???.. 1,3,4,3 +??#??.#?.? 5,1,1 +?.??????#?. 1,2,1 +????.??#?#???. 3,1,1,1 +???????..??# 1,2,1,2 +?.#?????#?.?? 4,1 +..??#?#.#?#???#??#? 5,5,1,1 +?????#????. 1,4,1 +??.??#??###.???? 2,7,1,1 +.?????#?.??##?.?#?. 5,3,2 +???#???.#? 4,2 +?????.#??.#???? 2,1,1,1,5 +?#????#???#?#?#.??? 7,3,1,1 +?????#.??. 4,1 +??#?.?#.?. 1,1,1 +????????##.#? 1,1,2,1 +???????.???##?.?. 3,6,1 +#?#???????????#..? 3,8 +.??#??.?.??#??? 3,2,1 +??????#???..? 1,5 +#.??#??##??????.#??? 1,8,1,2,1,1 +????#?#???????#????? 6,5 +????.?##?????.# 2,1,5,1,1 +??.#???##?#??? 1,5 +.?#????.??????#??##? 5,1,8 +?#.??#????#???..?#?. 2,1,6,1,2 +?##?.??.?.##??#??.?? 2,2,7 +?#?#??#????#? 5,1,1,2 +#???#????### 1,1,1,3 diff --git a/src/main.rs b/src/main.rs index 64ec9dd..c2985be 100644 --- a/src/main.rs +++ b/src/main.rs @@ -11,149 +11,67 @@ )] extern crate test; mod util; -pub use util::prelude::*; - -#[repr(u8)] -#[derive(Copy, Clone, PartialEq, Eq)] -enum Element { - #[allow(dead_code)] - Space = b'.', - Galaxy = b'#', - #[allow(dead_code)] - New = 10, -} - -impl Element { - #[inline] - fn galaxy(self) -> bool { - self == Self::Galaxy - } -} - -impl std::fmt::Debug for Element { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - if *self as u8 == 10 { - return write!(f, "@"); - } - write!(f, "{}", *self as u8 as char) - } -} - -const S: u8 = 140; -const W: u16 = S as u16 + 1; - -struct Map<'a> { - map: &'a [Element], -} - -impl<'a> std::ops::Index<u16> for Map<'a> { - type Output = Element; - - fn index(&self, index: u16) -> &'a Self::Output { - unsafe { self.map.get_unchecked(index.nat()) } - } -} - -pub unsafe fn galaxies(line: &[u8]) -> usize { - use std::arch::x86_64::*; - let galaxy = _mm256_set1_epi8(b'#' as i8); - let mut counts = _mm256_setzero_si256(); - for i in 0..4 { - counts = _mm256_sub_epi8( - counts, - _mm256_cmpeq_epi8( - _mm256_loadu_si256(line.as_ptr().add(i * 32) as *const _), - galaxy, - ), - ); - } - const MASK: [u8; 64] = [ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - ]; - counts = _mm256_sub_epi8( - counts, - _mm256_and_si256( - _mm256_cmpeq_epi8( - _mm256_loadu_si256(line.as_ptr().add(108) as *const _), - galaxy, - ), - _mm256_loadu_si256(MASK.as_ptr().add(12) as *const _), - ), - ); - - let sums = _mm256_sad_epu8(counts, _mm256_setzero_si256()); - (_mm256_extract_epi64(sums, 0) - + _mm256_extract_epi64(sums, 1) - + _mm256_extract_epi64(sums, 2) - + _mm256_extract_epi64(sums, 3)) as usize -} +use std::ops::ControlFlow; -impl Map<'_> { - fn at(&self, x: u8, y: u8) -> Element { - self[y.widen() * W + x.widen()] - } +pub use util::prelude::*; - fn solve(&self) -> usize { - let mut sum = 0; - let mut above = 0; - let mut upward = 0; - // const FACTOR: usize = 2; - const FACTOR: usize = 1000000; - for has in self.map.chunks(W.nat()).map(|x| { - #[cfg(target_feature = "avx")] - return unsafe { galaxies(std::mem::transmute(x)) }; - #[cfg(not(target_feature = "avx"))] - return x.iter().filter(|x| x.galaxy()).count(); - }) { - if has == 0 { - upward += above * FACTOR; - } else { - sum += upward * has; - above += has; - upward += above; +pub fn run(i: &str) -> impl Display { + i.行() + .map(|x| { + // AAA? + let (r, c) = x + .μ(' ') + .mr(|x| x.split(|&x| x == b',').κ::<u8>().collect::<Box<_>>()); + fn kill_me( + s: Vec<u8>, + n: usize, + max: usize, + p: &mut impl FnMut(&[u8]) -> ControlFlow<(), bool>, + ) -> Vec<Vec<u8>> { + if n == max { + return vec![s]; + } + let mut combinations = vec![]; + for c in [b'.', b'#'] { + let mut s = s.clone(); + s.push(c); + for thing in kill_me(s, n + 1, max, p) { + match p(&thing) { + ControlFlow::Break(()) => break, + ControlFlow::Continue(true) => combinations.push(thing), + _ => {} + } + } + } + combinations } - } - let mut beside = 0; - let mut left = 0; - #[cfg(target_feature = "avx")] - let mut x = [Element::Space; 140]; - for has in (0..S) - .map(move |x| (0..S).map(move |y| self.at(x, y))) - .map(|mut y| { - #[cfg(not(target_feature = "avx"))] - return y.filter(|x| x.galaxy()).count(); - #[cfg(target_feature = "avx")] - return { - y.ν(&mut x); - unsafe { galaxies(&std::mem::transmute::<_, [u8; 140]>(x)) } - }; + let why = kill_me(vec![], 0, r.len(), &mut |x| { + for (&x, &y) in r.iter().zip(x.iter()) { + if matches!(x, b'.' | b'#' if y != x) { + return ControlFlow::Break(()); + } + } + let mut huh = vec![]; + let mut len = 0; + for &x in x { + match x { + b'#' => len += 1, + b'.' if len != 0 => { + huh.push(len); + len = 0; + } + _ => {} + } + } + if len != 0 { + huh.push(len); + } + ControlFlow::Continue(&*huh == &*c) }) - { - if has == 0 { - left += beside * FACTOR; - } else { - sum += left * has; - beside += has; - left += beside; - } - } - sum - } -} - -impl From<&[u8]> for Map<'_> { - fn from(i: &[u8]) -> Self { - Self { - map: &unsafe { core::mem::transmute::<_, &[Element]>(i) }[..(W.nat() * S.nat()) - 1], - } - } -} - -pub fn run(i: &str) -> impl Display { - let map = Map::from(i.as_bytes()); - map.solve() + .len(); + why + }) + .sum::<usize>() } fn main() { diff --git a/src/util.rs b/src/util.rs index eef3ce0..ee6b9c3 100644 --- a/src/util.rs +++ b/src/util.rs @@ -6,8 +6,8 @@ use std::{ pub mod prelude { pub use super::{ - gcd, lcm, pa, GreekTools, IntoCombinations, IntoLines, IterͶ, NumTupleIterTools, Skip, - TakeLine, TupleIterTools, TupleUtils, UnifiedTupleUtils, Widen, Ͷ, Α, Κ, Λ, Μ, + gcd, lcm, pa, GreekTools, IntoCombinations, IntoLines, IterͶ, NumTupleIterTools, ParseIter, + Skip, TakeLine, TupleIterTools, TupleUtils, UnifiedTupleUtils, Widen, Ͷ, Α, Κ, Λ, Μ, }; pub use itertools::izip; pub use itertools::Itertools; @@ -285,6 +285,21 @@ pub trait GreekTools<T>: Iterator { fn ν<const N: usize>(&mut self, into: &mut [T; N]) -> usize; } +pub trait ParseIter { + fn κ<T: FromStr>(&mut self) -> impl Iterator<Item = T> + where + <T as FromStr>::Err: std::fmt::Display; +} + +impl<'x, I: Iterator<Item = &'x [u8]>> ParseIter for I { + fn κ<T: FromStr>(&mut self) -> impl Iterator<Item = T> + where + <T as FromStr>::Err: std::fmt::Display, + { + self.flat_map(|x| x.κ()) + } +} + impl<T, I: Iterator<Item = T>> GreekTools<T> for I { #[track_caller] fn Δ(&mut self) -> T { |