heh
d12 part 1 (AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa)
bendn 2023-12-12
parent f493b21 · commit 93214e9
-rw-r--r--src/inp.txt1140
-rw-r--r--src/main.rs196
-rw-r--r--src/util.rs19
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 {