diff options
Diffstat (limited to 'src/16')
| -rw-r--r-- | src/16/input | 4148 | ||||
| -rw-r--r-- | src/16/part1 | 136 | ||||
| -rw-r--r-- | src/16/part2 | 32 | ||||
| -rw-r--r-- | src/16/solve.py | 109 |
4 files changed, 4425 insertions, 0 deletions
diff --git a/src/16/input b/src/16/input new file mode 100644 index 0000000..71f3ecd --- /dev/null +++ b/src/16/input @@ -0,0 +1,4148 @@ +Before: [1, 1, 0, 1]
+0 1 0 1
+After: [1, 1, 0, 1]
+
+Before: [2, 2, 2, 1]
+2 1 2 2
+After: [2, 2, 1, 1]
+
+Before: [1, 3, 2, 2]
+1 2 2 0
+After: [4, 3, 2, 2]
+
+Before: [2, 2, 1, 1]
+8 0 2 1
+After: [2, 3, 1, 1]
+
+Before: [0, 1, 2, 2]
+7 3 1 1
+After: [0, 3, 2, 2]
+
+Before: [1, 2, 2, 0]
+8 2 0 1
+After: [1, 3, 2, 0]
+
+Before: [2, 2, 2, 0]
+2 1 2 0
+After: [1, 2, 2, 0]
+
+Before: [0, 1, 1, 1]
+3 1 0 1
+After: [0, 1, 1, 1]
+
+Before: [2, 3, 2, 2]
+15 1 2 2
+After: [2, 3, 6, 2]
+
+Before: [0, 3, 1, 1]
+9 0 0 3
+After: [0, 3, 1, 0]
+
+Before: [2, 0, 1, 1]
+4 2 3 2
+After: [2, 0, 0, 1]
+
+Before: [1, 1, 3, 3]
+6 0 3 3
+After: [1, 1, 3, 0]
+
+Before: [3, 2, 3, 2]
+11 1 3 3
+After: [3, 2, 3, 1]
+
+Before: [3, 2, 1, 2]
+14 3 3 1
+After: [3, 6, 1, 2]
+
+Before: [1, 0, 1, 2]
+10 1 0 1
+After: [1, 1, 1, 2]
+
+Before: [1, 2, 0, 2]
+11 1 3 2
+After: [1, 2, 1, 2]
+
+Before: [3, 3, 0, 0]
+14 0 3 2
+After: [3, 3, 9, 0]
+
+Before: [2, 0, 2, 3]
+6 0 3 1
+After: [2, 0, 2, 3]
+
+Before: [3, 2, 2, 2]
+11 1 3 1
+After: [3, 1, 2, 2]
+
+Before: [2, 2, 0, 2]
+13 1 2 1
+After: [2, 4, 0, 2]
+
+Before: [2, 2, 2, 0]
+8 3 1 3
+After: [2, 2, 2, 2]
+
+Before: [2, 3, 1, 3]
+6 0 3 2
+After: [2, 3, 0, 3]
+
+Before: [3, 3, 1, 1]
+14 1 3 1
+After: [3, 9, 1, 1]
+
+Before: [2, 2, 1, 3]
+6 0 3 2
+After: [2, 2, 0, 3]
+
+Before: [2, 3, 2, 3]
+15 3 3 0
+After: [9, 3, 2, 3]
+
+Before: [1, 0, 0, 3]
+10 1 0 1
+After: [1, 1, 0, 3]
+
+Before: [1, 3, 1, 3]
+15 1 3 3
+After: [1, 3, 1, 9]
+
+Before: [1, 1, 2, 3]
+15 1 2 3
+After: [1, 1, 2, 2]
+
+Before: [1, 1, 3, 0]
+0 1 0 0
+After: [1, 1, 3, 0]
+
+Before: [1, 2, 3, 2]
+13 3 2 2
+After: [1, 2, 4, 2]
+
+Before: [0, 1, 1, 2]
+9 0 0 0
+After: [0, 1, 1, 2]
+
+Before: [2, 2, 0, 0]
+12 1 1 3
+After: [2, 2, 0, 1]
+
+Before: [1, 0, 2, 3]
+6 0 3 2
+After: [1, 0, 0, 3]
+
+Before: [1, 1, 0, 3]
+6 0 3 3
+After: [1, 1, 0, 0]
+
+Before: [0, 2, 0, 0]
+9 0 0 2
+After: [0, 2, 0, 0]
+
+Before: [0, 2, 2, 3]
+5 0 3 0
+After: [3, 2, 2, 3]
+
+Before: [1, 0, 2, 1]
+5 1 2 3
+After: [1, 0, 2, 2]
+
+Before: [1, 1, 3, 3]
+0 1 0 2
+After: [1, 1, 1, 3]
+
+Before: [2, 0, 3, 1]
+12 2 3 0
+After: [0, 0, 3, 1]
+
+Before: [0, 3, 2, 0]
+5 0 2 0
+After: [2, 3, 2, 0]
+
+Before: [2, 1, 2, 2]
+1 2 2 0
+After: [4, 1, 2, 2]
+
+Before: [1, 2, 1, 3]
+6 0 3 2
+After: [1, 2, 0, 3]
+
+Before: [0, 2, 3, 1]
+14 1 3 2
+After: [0, 2, 6, 1]
+
+Before: [1, 3, 3, 3]
+5 0 3 2
+After: [1, 3, 3, 3]
+
+Before: [3, 1, 0, 3]
+14 3 2 3
+After: [3, 1, 0, 6]
+
+Before: [2, 0, 3, 3]
+12 3 2 0
+After: [1, 0, 3, 3]
+
+Before: [1, 2, 1, 2]
+11 1 3 3
+After: [1, 2, 1, 1]
+
+Before: [2, 1, 2, 1]
+1 0 2 1
+After: [2, 4, 2, 1]
+
+Before: [0, 1, 1, 0]
+3 1 0 1
+After: [0, 1, 1, 0]
+
+Before: [0, 2, 3, 0]
+9 0 0 2
+After: [0, 2, 0, 0]
+
+Before: [3, 1, 2, 3]
+15 2 3 3
+After: [3, 1, 2, 6]
+
+Before: [0, 1, 0, 0]
+3 1 0 0
+After: [1, 1, 0, 0]
+
+Before: [0, 0, 1, 2]
+5 2 3 2
+After: [0, 0, 3, 2]
+
+Before: [0, 2, 2, 2]
+8 0 3 1
+After: [0, 2, 2, 2]
+
+Before: [1, 2, 0, 3]
+15 0 1 0
+After: [2, 2, 0, 3]
+
+Before: [2, 1, 0, 3]
+6 0 3 2
+After: [2, 1, 0, 3]
+
+Before: [0, 2, 3, 2]
+11 1 3 1
+After: [0, 1, 3, 2]
+
+Before: [1, 1, 2, 1]
+0 1 0 1
+After: [1, 1, 2, 1]
+
+Before: [2, 2, 2, 0]
+12 1 1 1
+After: [2, 1, 2, 0]
+
+Before: [3, 1, 2, 2]
+1 2 2 2
+After: [3, 1, 4, 2]
+
+Before: [0, 1, 3, 0]
+3 1 0 3
+After: [0, 1, 3, 1]
+
+Before: [3, 0, 2, 0]
+1 2 2 2
+After: [3, 0, 4, 0]
+
+Before: [2, 3, 3, 2]
+15 1 3 2
+After: [2, 3, 6, 2]
+
+Before: [3, 0, 2, 0]
+1 2 2 0
+After: [4, 0, 2, 0]
+
+Before: [3, 2, 3, 2]
+12 1 1 0
+After: [1, 2, 3, 2]
+
+Before: [2, 3, 3, 2]
+13 0 2 0
+After: [4, 3, 3, 2]
+
+Before: [1, 0, 2, 2]
+10 1 0 0
+After: [1, 0, 2, 2]
+
+Before: [2, 0, 0, 0]
+8 1 0 1
+After: [2, 2, 0, 0]
+
+Before: [0, 2, 2, 1]
+12 2 1 0
+After: [1, 2, 2, 1]
+
+Before: [0, 3, 2, 1]
+9 0 0 3
+After: [0, 3, 2, 0]
+
+Before: [2, 2, 2, 1]
+1 0 2 1
+After: [2, 4, 2, 1]
+
+Before: [0, 1, 2, 3]
+3 1 0 2
+After: [0, 1, 1, 3]
+
+Before: [1, 1, 0, 2]
+0 1 0 0
+After: [1, 1, 0, 2]
+
+Before: [3, 2, 1, 2]
+11 1 3 0
+After: [1, 2, 1, 2]
+
+Before: [3, 1, 3, 3]
+8 1 0 0
+After: [3, 1, 3, 3]
+
+Before: [3, 1, 2, 3]
+15 0 2 2
+After: [3, 1, 6, 3]
+
+Before: [0, 2, 2, 1]
+2 1 2 3
+After: [0, 2, 2, 1]
+
+Before: [1, 1, 0, 2]
+0 1 0 3
+After: [1, 1, 0, 1]
+
+Before: [2, 2, 3, 2]
+11 1 3 0
+After: [1, 2, 3, 2]
+
+Before: [1, 1, 3, 1]
+0 1 0 2
+After: [1, 1, 1, 1]
+
+Before: [1, 2, 3, 0]
+8 3 1 0
+After: [2, 2, 3, 0]
+
+Before: [1, 0, 2, 3]
+10 1 0 0
+After: [1, 0, 2, 3]
+
+Before: [1, 3, 3, 1]
+12 1 2 1
+After: [1, 1, 3, 1]
+
+Before: [0, 1, 2, 2]
+3 1 0 0
+After: [1, 1, 2, 2]
+
+Before: [2, 2, 2, 3]
+6 0 3 2
+After: [2, 2, 0, 3]
+
+Before: [3, 2, 3, 0]
+13 1 2 0
+After: [4, 2, 3, 0]
+
+Before: [0, 1, 0, 1]
+9 0 0 2
+After: [0, 1, 0, 1]
+
+Before: [2, 3, 3, 2]
+13 3 2 1
+After: [2, 4, 3, 2]
+
+Before: [2, 2, 1, 3]
+4 1 2 2
+After: [2, 2, 1, 3]
+
+Before: [1, 3, 0, 1]
+8 0 1 2
+After: [1, 3, 3, 1]
+
+Before: [0, 1, 2, 0]
+3 1 0 1
+After: [0, 1, 2, 0]
+
+Before: [0, 2, 0, 2]
+11 1 3 1
+After: [0, 1, 0, 2]
+
+Before: [3, 2, 3, 1]
+14 2 3 3
+After: [3, 2, 3, 9]
+
+Before: [0, 1, 1, 3]
+3 1 0 0
+After: [1, 1, 1, 3]
+
+Before: [2, 2, 2, 1]
+2 1 2 0
+After: [1, 2, 2, 1]
+
+Before: [0, 2, 1, 2]
+4 3 3 3
+After: [0, 2, 1, 0]
+
+Before: [0, 1, 1, 2]
+7 3 1 3
+After: [0, 1, 1, 3]
+
+Before: [1, 0, 1, 0]
+10 1 0 0
+After: [1, 0, 1, 0]
+
+Before: [3, 2, 2, 1]
+12 1 1 3
+After: [3, 2, 2, 1]
+
+Before: [0, 1, 0, 0]
+9 0 0 2
+After: [0, 1, 0, 0]
+
+Before: [2, 2, 2, 1]
+2 1 2 1
+After: [2, 1, 2, 1]
+
+Before: [1, 3, 0, 3]
+2 1 3 0
+After: [1, 3, 0, 3]
+
+Before: [1, 1, 2, 2]
+0 1 0 2
+After: [1, 1, 1, 2]
+
+Before: [0, 2, 0, 2]
+11 1 3 3
+After: [0, 2, 0, 1]
+
+Before: [0, 2, 3, 2]
+11 1 3 0
+After: [1, 2, 3, 2]
+
+Before: [2, 3, 2, 1]
+7 3 2 0
+After: [3, 3, 2, 1]
+
+Before: [2, 1, 1, 3]
+14 3 2 0
+After: [6, 1, 1, 3]
+
+Before: [1, 1, 3, 2]
+0 1 0 0
+After: [1, 1, 3, 2]
+
+Before: [2, 2, 2, 3]
+1 0 2 2
+After: [2, 2, 4, 3]
+
+Before: [1, 1, 0, 3]
+0 1 0 3
+After: [1, 1, 0, 1]
+
+Before: [1, 0, 3, 0]
+10 1 0 2
+After: [1, 0, 1, 0]
+
+Before: [0, 2, 0, 2]
+11 1 3 2
+After: [0, 2, 1, 2]
+
+Before: [1, 3, 2, 1]
+7 3 2 0
+After: [3, 3, 2, 1]
+
+Before: [2, 2, 1, 0]
+14 0 3 2
+After: [2, 2, 6, 0]
+
+Before: [0, 1, 0, 0]
+5 0 1 3
+After: [0, 1, 0, 1]
+
+Before: [0, 2, 2, 3]
+15 2 3 0
+After: [6, 2, 2, 3]
+
+Before: [3, 3, 0, 3]
+15 0 3 0
+After: [9, 3, 0, 3]
+
+Before: [0, 3, 3, 0]
+14 2 3 0
+After: [9, 3, 3, 0]
+
+Before: [0, 1, 1, 2]
+7 3 1 2
+After: [0, 1, 3, 2]
+
+Before: [1, 3, 1, 3]
+2 1 3 0
+After: [1, 3, 1, 3]
+
+Before: [1, 0, 3, 3]
+10 1 0 2
+After: [1, 0, 1, 3]
+
+Before: [0, 1, 3, 2]
+3 1 0 3
+After: [0, 1, 3, 1]
+
+Before: [0, 1, 3, 1]
+3 1 0 2
+After: [0, 1, 1, 1]
+
+Before: [1, 1, 2, 0]
+0 1 0 1
+After: [1, 1, 2, 0]
+
+Before: [0, 3, 0, 2]
+15 1 3 3
+After: [0, 3, 0, 6]
+
+Before: [0, 2, 1, 1]
+4 1 2 2
+After: [0, 2, 1, 1]
+
+Before: [0, 2, 2, 1]
+4 3 3 0
+After: [0, 2, 2, 1]
+
+Before: [1, 2, 1, 2]
+8 1 0 1
+After: [1, 3, 1, 2]
+
+Before: [1, 2, 2, 0]
+15 0 2 1
+After: [1, 2, 2, 0]
+
+Before: [2, 2, 3, 1]
+4 3 3 1
+After: [2, 0, 3, 1]
+
+Before: [1, 2, 1, 0]
+8 3 1 3
+After: [1, 2, 1, 2]
+
+Before: [3, 0, 2, 2]
+8 1 0 2
+After: [3, 0, 3, 2]
+
+Before: [0, 0, 2, 0]
+9 0 0 2
+After: [0, 0, 0, 0]
+
+Before: [1, 2, 2, 3]
+4 1 0 2
+After: [1, 2, 1, 3]
+
+Before: [2, 1, 2, 2]
+1 3 2 1
+After: [2, 4, 2, 2]
+
+Before: [2, 3, 0, 3]
+2 1 3 1
+After: [2, 1, 0, 3]
+
+Before: [1, 2, 0, 2]
+11 1 3 1
+After: [1, 1, 0, 2]
+
+Before: [3, 1, 0, 2]
+7 3 1 1
+After: [3, 3, 0, 2]
+
+Before: [0, 2, 2, 3]
+1 1 2 3
+After: [0, 2, 2, 4]
+
+Before: [1, 2, 3, 3]
+6 0 3 0
+After: [0, 2, 3, 3]
+
+Before: [2, 0, 2, 1]
+7 3 2 0
+After: [3, 0, 2, 1]
+
+Before: [0, 2, 2, 2]
+8 0 3 2
+After: [0, 2, 2, 2]
+
+Before: [1, 0, 3, 1]
+10 1 0 2
+After: [1, 0, 1, 1]
+
+Before: [0, 1, 2, 1]
+4 3 3 2
+After: [0, 1, 0, 1]
+
+Before: [0, 2, 2, 0]
+2 1 2 3
+After: [0, 2, 2, 1]
+
+Before: [0, 0, 2, 2]
+5 1 2 0
+After: [2, 0, 2, 2]
+
+Before: [1, 0, 0, 3]
+10 1 0 3
+After: [1, 0, 0, 1]
+
+Before: [1, 0, 3, 1]
+10 1 0 3
+After: [1, 0, 3, 1]
+
+Before: [0, 0, 3, 2]
+9 0 0 3
+After: [0, 0, 3, 0]
+
+Before: [1, 0, 1, 3]
+10 1 0 2
+After: [1, 0, 1, 3]
+
+Before: [3, 2, 3, 2]
+4 3 3 2
+After: [3, 2, 0, 2]
+
+Before: [0, 1, 1, 3]
+3 1 0 2
+After: [0, 1, 1, 3]
+
+Before: [1, 2, 3, 3]
+4 1 0 1
+After: [1, 1, 3, 3]
+
+Before: [0, 0, 0, 2]
+9 0 0 1
+After: [0, 0, 0, 2]
+
+Before: [1, 0, 2, 1]
+10 1 0 1
+After: [1, 1, 2, 1]
+
+Before: [1, 2, 3, 2]
+5 0 3 2
+After: [1, 2, 3, 2]
+
+Before: [2, 2, 3, 2]
+12 1 1 0
+After: [1, 2, 3, 2]
+
+Before: [2, 2, 2, 2]
+12 2 1 2
+After: [2, 2, 1, 2]
+
+Before: [2, 2, 2, 3]
+1 2 2 1
+After: [2, 4, 2, 3]
+
+Before: [3, 1, 3, 2]
+7 3 1 2
+After: [3, 1, 3, 2]
+
+Before: [2, 2, 0, 0]
+13 0 2 1
+After: [2, 4, 0, 0]
+
+Before: [0, 2, 1, 3]
+15 1 3 1
+After: [0, 6, 1, 3]
+
+Before: [0, 1, 1, 2]
+3 1 0 0
+After: [1, 1, 1, 2]
+
+Before: [2, 1, 0, 0]
+8 3 0 1
+After: [2, 2, 0, 0]
+
+Before: [0, 1, 3, 3]
+15 2 3 0
+After: [9, 1, 3, 3]
+
+Before: [0, 1, 1, 2]
+3 1 0 1
+After: [0, 1, 1, 2]
+
+Before: [0, 1, 1, 1]
+8 0 2 0
+After: [1, 1, 1, 1]
+
+Before: [1, 2, 2, 3]
+12 1 1 3
+After: [1, 2, 2, 1]
+
+Before: [3, 3, 1, 2]
+12 1 0 1
+After: [3, 1, 1, 2]
+
+Before: [3, 0, 0, 3]
+14 3 2 2
+After: [3, 0, 6, 3]
+
+Before: [3, 3, 3, 1]
+12 2 3 3
+After: [3, 3, 3, 0]
+
+Before: [2, 3, 2, 0]
+14 2 3 1
+After: [2, 6, 2, 0]
+
+Before: [2, 3, 0, 2]
+15 1 3 2
+After: [2, 3, 6, 2]
+
+Before: [3, 2, 3, 2]
+11 1 3 1
+After: [3, 1, 3, 2]
+
+Before: [1, 2, 2, 1]
+15 3 2 1
+After: [1, 2, 2, 1]
+
+Before: [1, 2, 2, 1]
+5 0 2 1
+After: [1, 3, 2, 1]
+
+Before: [1, 2, 3, 3]
+6 0 3 2
+After: [1, 2, 0, 3]
+
+Before: [1, 2, 2, 0]
+5 0 2 2
+After: [1, 2, 3, 0]
+
+Before: [3, 0, 0, 2]
+4 3 3 1
+After: [3, 0, 0, 2]
+
+Before: [1, 2, 1, 3]
+8 1 0 2
+After: [1, 2, 3, 3]
+
+Before: [2, 0, 2, 1]
+1 2 2 1
+After: [2, 4, 2, 1]
+
+Before: [2, 1, 2, 3]
+1 2 2 3
+After: [2, 1, 2, 4]
+
+Before: [1, 1, 0, 1]
+14 3 2 1
+After: [1, 2, 0, 1]
+
+Before: [1, 0, 2, 1]
+1 2 2 1
+After: [1, 4, 2, 1]
+
+Before: [2, 2, 0, 3]
+15 0 3 3
+After: [2, 2, 0, 6]
+
+Before: [3, 0, 2, 2]
+1 3 2 0
+After: [4, 0, 2, 2]
+
+Before: [2, 2, 3, 2]
+13 3 2 1
+After: [2, 4, 3, 2]
+
+Before: [1, 1, 2, 1]
+0 1 0 2
+After: [1, 1, 1, 1]
+
+Before: [0, 2, 3, 2]
+11 1 3 2
+After: [0, 2, 1, 2]
+
+Before: [2, 1, 1, 2]
+7 3 1 0
+After: [3, 1, 1, 2]
+
+Before: [3, 0, 2, 0]
+14 2 3 3
+After: [3, 0, 2, 6]
+
+Before: [2, 2, 0, 2]
+14 0 3 3
+After: [2, 2, 0, 6]
+
+Before: [0, 0, 3, 2]
+9 0 0 0
+After: [0, 0, 3, 2]
+
+Before: [1, 1, 3, 1]
+0 1 0 1
+After: [1, 1, 3, 1]
+
+Before: [1, 1, 1, 1]
+0 1 0 1
+After: [1, 1, 1, 1]
+
+Before: [1, 0, 2, 0]
+10 1 0 1
+After: [1, 1, 2, 0]
+
+Before: [1, 1, 0, 3]
+0 1 0 0
+After: [1, 1, 0, 3]
+
+Before: [0, 1, 0, 2]
+13 3 2 1
+After: [0, 4, 0, 2]
+
+Before: [2, 1, 0, 0]
+14 1 2 3
+After: [2, 1, 0, 2]
+
+Before: [3, 3, 2, 2]
+4 3 3 1
+After: [3, 0, 2, 2]
+
+Before: [0, 2, 0, 0]
+12 1 1 3
+After: [0, 2, 0, 1]
+
+Before: [1, 0, 2, 1]
+1 2 2 2
+After: [1, 0, 4, 1]
+
+Before: [0, 1, 2, 1]
+9 0 0 2
+After: [0, 1, 0, 1]
+
+Before: [1, 1, 3, 2]
+0 1 0 2
+After: [1, 1, 1, 2]
+
+Before: [3, 0, 3, 2]
+15 0 3 0
+After: [6, 0, 3, 2]
+
+Before: [2, 1, 2, 0]
+5 3 2 0
+After: [2, 1, 2, 0]
+
+Before: [3, 2, 2, 2]
+1 2 2 2
+After: [3, 2, 4, 2]
+
+Before: [1, 1, 0, 0]
+0 1 0 3
+After: [1, 1, 0, 1]
+
+Before: [1, 2, 0, 3]
+12 1 1 2
+After: [1, 2, 1, 3]
+
+Before: [2, 2, 2, 0]
+1 0 2 1
+After: [2, 4, 2, 0]
+
+Before: [0, 2, 1, 3]
+8 0 2 2
+After: [0, 2, 1, 3]
+
+Before: [3, 2, 0, 0]
+14 1 3 1
+After: [3, 6, 0, 0]
+
+Before: [0, 2, 2, 3]
+15 3 3 3
+After: [0, 2, 2, 9]
+
+Before: [1, 0, 3, 2]
+10 1 0 0
+After: [1, 0, 3, 2]
+
+Before: [1, 2, 2, 0]
+2 1 2 2
+After: [1, 2, 1, 0]
+
+Before: [0, 0, 3, 3]
+9 0 0 1
+After: [0, 0, 3, 3]
+
+Before: [0, 1, 2, 3]
+3 1 0 1
+After: [0, 1, 2, 3]
+
+Before: [1, 0, 1, 1]
+10 1 0 3
+After: [1, 0, 1, 1]
+
+Before: [2, 0, 2, 3]
+6 0 3 0
+After: [0, 0, 2, 3]
+
+Before: [0, 2, 3, 0]
+13 1 2 1
+After: [0, 4, 3, 0]
+
+Before: [0, 1, 3, 2]
+3 1 0 1
+After: [0, 1, 3, 2]
+
+Before: [1, 1, 0, 3]
+6 0 3 0
+After: [0, 1, 0, 3]
+
+Before: [3, 2, 0, 1]
+13 1 2 0
+After: [4, 2, 0, 1]
+
+Before: [2, 1, 3, 1]
+5 0 1 2
+After: [2, 1, 3, 1]
+
+Before: [1, 1, 3, 2]
+0 1 0 1
+After: [1, 1, 3, 2]
+
+Before: [2, 0, 0, 3]
+6 0 3 0
+After: [0, 0, 0, 3]
+
+Before: [1, 2, 1, 0]
+13 1 2 1
+After: [1, 4, 1, 0]
+
+Before: [2, 2, 1, 2]
+11 1 3 3
+After: [2, 2, 1, 1]
+
+Before: [0, 1, 2, 3]
+5 1 3 3
+After: [0, 1, 2, 3]
+
+Before: [2, 0, 3, 3]
+6 0 3 2
+After: [2, 0, 0, 3]
+
+Before: [2, 2, 1, 0]
+12 1 0 0
+After: [1, 2, 1, 0]
+
+Before: [2, 2, 2, 2]
+11 1 3 0
+After: [1, 2, 2, 2]
+
+Before: [1, 1, 0, 1]
+0 1 0 0
+After: [1, 1, 0, 1]
+
+Before: [0, 2, 2, 2]
+11 1 3 0
+After: [1, 2, 2, 2]
+
+Before: [2, 2, 0, 2]
+11 1 3 3
+After: [2, 2, 0, 1]
+
+Before: [2, 2, 2, 0]
+2 1 2 2
+After: [2, 2, 1, 0]
+
+Before: [3, 1, 1, 2]
+7 3 1 3
+After: [3, 1, 1, 3]
+
+Before: [0, 2, 1, 3]
+9 0 0 0
+After: [0, 2, 1, 3]
+
+Before: [0, 2, 2, 2]
+11 1 3 3
+After: [0, 2, 2, 1]
+
+Before: [3, 3, 3, 1]
+7 3 2 2
+After: [3, 3, 3, 1]
+
+Before: [2, 0, 3, 3]
+6 0 3 1
+After: [2, 0, 3, 3]
+
+Before: [0, 0, 2, 3]
+5 1 3 1
+After: [0, 3, 2, 3]
+
+Before: [3, 3, 2, 0]
+5 3 2 2
+After: [3, 3, 2, 0]
+
+Before: [3, 1, 2, 0]
+14 2 3 3
+After: [3, 1, 2, 6]
+
+Before: [1, 1, 2, 0]
+1 2 2 2
+After: [1, 1, 4, 0]
+
+Before: [1, 3, 1, 1]
+4 2 3 1
+After: [1, 0, 1, 1]
+
+Before: [1, 1, 2, 3]
+0 1 0 1
+After: [1, 1, 2, 3]
+
+Before: [3, 3, 3, 2]
+15 2 3 0
+After: [6, 3, 3, 2]
+
+Before: [1, 1, 0, 1]
+0 1 0 3
+After: [1, 1, 0, 1]
+
+Before: [2, 1, 1, 1]
+13 0 2 1
+After: [2, 4, 1, 1]
+
+Before: [3, 3, 2, 1]
+1 2 2 1
+After: [3, 4, 2, 1]
+
+Before: [0, 2, 2, 3]
+2 1 2 3
+After: [0, 2, 2, 1]
+
+Before: [2, 0, 1, 3]
+6 0 3 2
+After: [2, 0, 0, 3]
+
+Before: [1, 3, 3, 3]
+6 0 3 2
+After: [1, 3, 0, 3]
+
+Before: [0, 1, 0, 2]
+7 3 1 3
+After: [0, 1, 0, 3]
+
+Before: [0, 2, 2, 1]
+12 2 1 2
+After: [0, 2, 1, 1]
+
+Before: [1, 3, 2, 3]
+6 0 3 1
+After: [1, 0, 2, 3]
+
+Before: [1, 3, 1, 3]
+15 1 3 2
+After: [1, 3, 9, 3]
+
+Before: [0, 3, 2, 2]
+1 2 2 1
+After: [0, 4, 2, 2]
+
+Before: [3, 3, 2, 3]
+2 1 3 2
+After: [3, 3, 1, 3]
+
+Before: [0, 0, 2, 3]
+5 0 2 0
+After: [2, 0, 2, 3]
+
+Before: [3, 0, 2, 3]
+15 2 3 0
+After: [6, 0, 2, 3]
+
+Before: [2, 3, 0, 3]
+14 3 2 1
+After: [2, 6, 0, 3]
+
+Before: [2, 0, 2, 1]
+1 0 2 2
+After: [2, 0, 4, 1]
+
+Before: [0, 1, 3, 1]
+9 0 0 2
+After: [0, 1, 0, 1]
+
+Before: [1, 2, 2, 2]
+2 1 2 3
+After: [1, 2, 2, 1]
+
+Before: [0, 0, 3, 1]
+9 0 0 0
+After: [0, 0, 3, 1]
+
+Before: [0, 1, 3, 3]
+3 1 0 2
+After: [0, 1, 1, 3]
+
+Before: [2, 1, 2, 3]
+12 2 0 0
+After: [1, 1, 2, 3]
+
+Before: [1, 2, 3, 2]
+11 1 3 2
+After: [1, 2, 1, 2]
+
+Before: [3, 2, 0, 2]
+11 1 3 3
+After: [3, 2, 0, 1]
+
+Before: [2, 1, 2, 2]
+12 2 0 1
+After: [2, 1, 2, 2]
+
+Before: [0, 1, 0, 2]
+13 3 2 2
+After: [0, 1, 4, 2]
+
+Before: [0, 1, 1, 0]
+9 0 0 3
+After: [0, 1, 1, 0]
+
+Before: [2, 1, 1, 3]
+5 1 3 1
+After: [2, 3, 1, 3]
+
+Before: [0, 2, 2, 2]
+1 2 2 1
+After: [0, 4, 2, 2]
+
+Before: [0, 1, 1, 2]
+5 0 1 2
+After: [0, 1, 1, 2]
+
+Before: [1, 1, 1, 2]
+0 1 0 1
+After: [1, 1, 1, 2]
+
+Before: [3, 3, 1, 2]
+12 1 0 0
+After: [1, 3, 1, 2]
+
+Before: [3, 2, 1, 0]
+14 0 3 0
+After: [9, 2, 1, 0]
+
+Before: [2, 2, 1, 1]
+15 3 1 0
+After: [2, 2, 1, 1]
+
+Before: [1, 3, 2, 1]
+7 3 2 2
+After: [1, 3, 3, 1]
+
+Before: [0, 2, 0, 0]
+9 0 0 3
+After: [0, 2, 0, 0]
+
+Before: [1, 2, 1, 3]
+4 1 0 1
+After: [1, 1, 1, 3]
+
+Before: [1, 1, 3, 2]
+15 2 3 1
+After: [1, 6, 3, 2]
+
+Before: [2, 3, 3, 1]
+7 3 2 0
+After: [3, 3, 3, 1]
+
+Before: [0, 1, 2, 2]
+5 0 1 0
+After: [1, 1, 2, 2]
+
+Before: [3, 1, 0, 2]
+7 3 1 0
+After: [3, 1, 0, 2]
+
+Before: [1, 3, 3, 3]
+15 2 3 3
+After: [1, 3, 3, 9]
+
+Before: [3, 2, 2, 3]
+15 3 3 1
+After: [3, 9, 2, 3]
+
+Before: [0, 0, 0, 2]
+9 0 0 2
+After: [0, 0, 0, 2]
+
+Before: [2, 1, 3, 0]
+5 1 2 3
+After: [2, 1, 3, 3]
+
+Before: [3, 0, 2, 1]
+1 2 2 0
+After: [4, 0, 2, 1]
+
+Before: [1, 0, 2, 3]
+10 1 0 3
+After: [1, 0, 2, 1]
+
+Before: [0, 3, 1, 2]
+14 3 3 2
+After: [0, 3, 6, 2]
+
+Before: [0, 3, 3, 3]
+2 1 3 2
+After: [0, 3, 1, 3]
+
+Before: [0, 2, 2, 0]
+5 3 2 3
+After: [0, 2, 2, 2]
+
+Before: [1, 1, 2, 1]
+5 2 1 0
+After: [3, 1, 2, 1]
+
+Before: [1, 2, 0, 2]
+11 1 3 3
+After: [1, 2, 0, 1]
+
+Before: [3, 0, 2, 1]
+7 3 2 3
+After: [3, 0, 2, 3]
+
+Before: [0, 2, 1, 3]
+9 0 0 2
+After: [0, 2, 0, 3]
+
+Before: [2, 2, 2, 2]
+11 1 3 3
+After: [2, 2, 2, 1]
+
+Before: [1, 3, 2, 3]
+1 2 2 0
+After: [4, 3, 2, 3]
+
+Before: [1, 3, 1, 3]
+2 1 3 2
+After: [1, 3, 1, 3]
+
+Before: [0, 1, 2, 3]
+5 0 3 1
+After: [0, 3, 2, 3]
+
+Before: [2, 2, 1, 2]
+11 1 3 1
+After: [2, 1, 1, 2]
+
+Before: [1, 0, 3, 1]
+7 3 2 0
+After: [3, 0, 3, 1]
+
+Before: [1, 2, 1, 3]
+6 0 3 0
+After: [0, 2, 1, 3]
+
+Before: [3, 2, 2, 2]
+2 1 2 0
+After: [1, 2, 2, 2]
+
+Before: [3, 0, 0, 3]
+5 1 3 0
+After: [3, 0, 0, 3]
+
+Before: [2, 3, 3, 3]
+6 0 3 2
+After: [2, 3, 0, 3]
+
+Before: [1, 2, 3, 2]
+11 1 3 0
+After: [1, 2, 3, 2]
+
+Before: [2, 3, 3, 3]
+6 0 3 1
+After: [2, 0, 3, 3]
+
+Before: [2, 1, 0, 3]
+6 0 3 0
+After: [0, 1, 0, 3]
+
+Before: [3, 2, 3, 1]
+4 3 3 1
+After: [3, 0, 3, 1]
+
+Before: [1, 2, 2, 3]
+1 2 2 1
+After: [1, 4, 2, 3]
+
+Before: [0, 2, 0, 2]
+12 1 1 2
+After: [0, 2, 1, 2]
+
+Before: [3, 3, 1, 3]
+2 1 3 3
+After: [3, 3, 1, 1]
+
+Before: [1, 1, 2, 2]
+5 1 2 2
+After: [1, 1, 3, 2]
+
+Before: [0, 0, 2, 2]
+5 0 2 3
+After: [0, 0, 2, 2]
+
+Before: [0, 1, 3, 1]
+9 0 0 0
+After: [0, 1, 3, 1]
+
+Before: [0, 1, 0, 0]
+3 1 0 1
+After: [0, 1, 0, 0]
+
+Before: [1, 0, 0, 1]
+10 1 0 1
+After: [1, 1, 0, 1]
+
+Before: [1, 1, 1, 3]
+0 1 0 0
+After: [1, 1, 1, 3]
+
+Before: [0, 2, 2, 2]
+4 3 3 1
+After: [0, 0, 2, 2]
+
+Before: [1, 2, 1, 0]
+8 2 1 0
+After: [3, 2, 1, 0]
+
+Before: [0, 1, 2, 1]
+3 1 0 3
+After: [0, 1, 2, 1]
+
+Before: [1, 0, 2, 1]
+10 1 0 3
+After: [1, 0, 2, 1]
+
+Before: [1, 1, 3, 1]
+5 0 2 1
+After: [1, 3, 3, 1]
+
+Before: [2, 3, 2, 1]
+4 3 3 2
+After: [2, 3, 0, 1]
+
+Before: [3, 3, 0, 3]
+12 1 0 1
+After: [3, 1, 0, 3]
+
+Before: [3, 3, 1, 3]
+8 2 0 3
+After: [3, 3, 1, 3]
+
+Before: [1, 3, 3, 1]
+7 3 2 2
+After: [1, 3, 3, 1]
+
+Before: [3, 0, 3, 1]
+4 3 3 0
+After: [0, 0, 3, 1]
+
+Before: [1, 3, 2, 3]
+15 3 2 3
+After: [1, 3, 2, 6]
+
+Before: [3, 2, 2, 0]
+2 1 2 2
+After: [3, 2, 1, 0]
+
+Before: [3, 1, 2, 1]
+4 3 3 1
+After: [3, 0, 2, 1]
+
+Before: [2, 3, 1, 3]
+2 1 3 3
+After: [2, 3, 1, 1]
+
+Before: [2, 2, 0, 3]
+6 0 3 1
+After: [2, 0, 0, 3]
+
+Before: [2, 3, 2, 2]
+1 0 2 0
+After: [4, 3, 2, 2]
+
+Before: [0, 1, 3, 3]
+5 0 3 3
+After: [0, 1, 3, 3]
+
+Before: [2, 0, 3, 3]
+12 3 2 2
+After: [2, 0, 1, 3]
+
+Before: [1, 1, 3, 2]
+13 3 2 2
+After: [1, 1, 4, 2]
+
+Before: [1, 3, 3, 3]
+2 1 3 2
+After: [1, 3, 1, 3]
+
+Before: [3, 2, 2, 2]
+14 0 3 1
+After: [3, 9, 2, 2]
+
+Before: [1, 0, 3, 2]
+8 1 3 2
+After: [1, 0, 2, 2]
+
+Before: [0, 3, 3, 3]
+9 0 0 2
+After: [0, 3, 0, 3]
+
+Before: [3, 2, 0, 1]
+4 3 3 0
+After: [0, 2, 0, 1]
+
+Before: [3, 0, 3, 2]
+4 3 3 0
+After: [0, 0, 3, 2]
+
+Before: [3, 0, 3, 2]
+8 1 2 1
+After: [3, 3, 3, 2]
+
+Before: [0, 2, 1, 1]
+8 0 3 0
+After: [1, 2, 1, 1]
+
+Before: [2, 2, 2, 0]
+1 1 2 1
+After: [2, 4, 2, 0]
+
+Before: [2, 2, 1, 3]
+13 0 2 1
+After: [2, 4, 1, 3]
+
+Before: [0, 1, 3, 1]
+3 1 0 0
+After: [1, 1, 3, 1]
+
+Before: [0, 1, 2, 2]
+3 1 0 3
+After: [0, 1, 2, 1]
+
+Before: [1, 2, 2, 3]
+6 0 3 1
+After: [1, 0, 2, 3]
+
+Before: [3, 2, 0, 3]
+12 1 1 2
+After: [3, 2, 1, 3]
+
+Before: [2, 3, 1, 1]
+13 0 2 0
+After: [4, 3, 1, 1]
+
+Before: [2, 1, 1, 0]
+5 0 1 1
+After: [2, 3, 1, 0]
+
+Before: [3, 3, 2, 3]
+15 3 2 3
+After: [3, 3, 2, 6]
+
+Before: [0, 1, 0, 3]
+3 1 0 3
+After: [0, 1, 0, 1]
+
+Before: [1, 0, 3, 2]
+14 2 3 1
+After: [1, 9, 3, 2]
+
+Before: [0, 2, 3, 1]
+7 3 2 0
+After: [3, 2, 3, 1]
+
+Before: [2, 3, 0, 2]
+14 1 2 2
+After: [2, 3, 6, 2]
+
+Before: [2, 2, 3, 1]
+7 3 2 0
+After: [3, 2, 3, 1]
+
+Before: [0, 3, 3, 3]
+12 3 2 2
+After: [0, 3, 1, 3]
+
+Before: [0, 2, 2, 2]
+9 0 0 2
+After: [0, 2, 0, 2]
+
+Before: [0, 3, 1, 0]
+8 0 1 2
+After: [0, 3, 3, 0]
+
+Before: [0, 3, 3, 0]
+9 0 0 0
+After: [0, 3, 3, 0]
+
+Before: [0, 3, 0, 3]
+15 3 3 1
+After: [0, 9, 0, 3]
+
+Before: [2, 1, 1, 3]
+6 0 3 2
+After: [2, 1, 0, 3]
+
+Before: [2, 0, 0, 3]
+15 3 3 1
+After: [2, 9, 0, 3]
+
+Before: [0, 1, 0, 3]
+5 0 3 2
+After: [0, 1, 3, 3]
+
+Before: [1, 2, 2, 1]
+4 1 0 0
+After: [1, 2, 2, 1]
+
+Before: [0, 2, 3, 2]
+15 2 3 0
+After: [6, 2, 3, 2]
+
+Before: [0, 2, 2, 3]
+9 0 0 1
+After: [0, 0, 2, 3]
+
+Before: [3, 3, 3, 3]
+2 1 3 1
+After: [3, 1, 3, 3]
+
+Before: [1, 0, 2, 3]
+10 1 0 1
+After: [1, 1, 2, 3]
+
+Before: [2, 1, 1, 3]
+6 0 3 1
+After: [2, 0, 1, 3]
+
+Before: [0, 2, 2, 3]
+1 2 2 1
+After: [0, 4, 2, 3]
+
+Before: [1, 1, 1, 1]
+0 1 0 2
+After: [1, 1, 1, 1]
+
+Before: [0, 0, 2, 0]
+1 2 2 1
+After: [0, 4, 2, 0]
+
+Before: [1, 3, 0, 2]
+13 3 2 3
+After: [1, 3, 0, 4]
+
+Before: [1, 1, 0, 0]
+0 1 0 2
+After: [1, 1, 1, 0]
+
+Before: [1, 1, 1, 3]
+0 1 0 2
+After: [1, 1, 1, 3]
+
+Before: [1, 0, 3, 1]
+10 1 0 0
+After: [1, 0, 3, 1]
+
+Before: [2, 2, 1, 2]
+11 1 3 0
+After: [1, 2, 1, 2]
+
+Before: [0, 1, 0, 1]
+9 0 0 3
+After: [0, 1, 0, 0]
+
+Before: [0, 2, 1, 3]
+5 2 3 2
+After: [0, 2, 3, 3]
+
+Before: [1, 2, 2, 0]
+1 1 2 3
+After: [1, 2, 2, 4]
+
+Before: [1, 1, 0, 1]
+0 1 0 2
+After: [1, 1, 1, 1]
+
+Before: [0, 1, 2, 3]
+3 1 0 0
+After: [1, 1, 2, 3]
+
+Before: [0, 0, 2, 1]
+14 2 3 1
+After: [0, 6, 2, 1]
+
+Before: [2, 1, 2, 2]
+7 3 1 3
+After: [2, 1, 2, 3]
+
+Before: [1, 3, 3, 2]
+12 1 2 0
+After: [1, 3, 3, 2]
+
+Before: [3, 2, 2, 3]
+1 2 2 2
+After: [3, 2, 4, 3]
+
+Before: [0, 3, 2, 1]
+8 0 3 2
+After: [0, 3, 1, 1]
+
+Before: [1, 1, 0, 3]
+0 1 0 2
+After: [1, 1, 1, 3]
+
+Before: [3, 2, 1, 2]
+11 1 3 2
+After: [3, 2, 1, 2]
+
+Before: [0, 2, 1, 2]
+11 1 3 1
+After: [0, 1, 1, 2]
+
+Before: [1, 2, 1, 3]
+6 0 3 1
+After: [1, 0, 1, 3]
+
+Before: [2, 2, 2, 3]
+2 1 2 2
+After: [2, 2, 1, 3]
+
+Before: [3, 2, 2, 1]
+1 1 2 1
+After: [3, 4, 2, 1]
+
+Before: [1, 0, 0, 1]
+10 1 0 3
+After: [1, 0, 0, 1]
+
+Before: [0, 1, 0, 1]
+3 1 0 3
+After: [0, 1, 0, 1]
+
+Before: [1, 1, 1, 0]
+0 1 0 3
+After: [1, 1, 1, 1]
+
+Before: [1, 1, 1, 2]
+7 3 1 3
+After: [1, 1, 1, 3]
+
+Before: [3, 3, 1, 3]
+2 1 3 0
+After: [1, 3, 1, 3]
+
+Before: [1, 0, 0, 2]
+10 1 0 0
+After: [1, 0, 0, 2]
+
+Before: [0, 2, 1, 3]
+13 1 2 3
+After: [0, 2, 1, 4]
+
+Before: [1, 0, 2, 0]
+10 1 0 3
+After: [1, 0, 2, 1]
+
+Before: [2, 3, 3, 0]
+13 0 2 3
+After: [2, 3, 3, 4]
+
+Before: [3, 1, 2, 3]
+5 1 3 3
+After: [3, 1, 2, 3]
+
+Before: [1, 1, 1, 3]
+0 1 0 1
+After: [1, 1, 1, 3]
+
+Before: [2, 1, 2, 1]
+7 3 2 3
+After: [2, 1, 2, 3]
+
+Before: [1, 0, 0, 0]
+10 1 0 0
+After: [1, 0, 0, 0]
+
+Before: [1, 1, 0, 2]
+0 1 0 1
+After: [1, 1, 0, 2]
+
+Before: [3, 1, 2, 2]
+1 2 2 0
+After: [4, 1, 2, 2]
+
+Before: [1, 1, 1, 2]
+0 1 0 3
+After: [1, 1, 1, 1]
+
+Before: [1, 2, 3, 2]
+11 1 3 1
+After: [1, 1, 3, 2]
+
+Before: [3, 0, 2, 1]
+1 2 2 3
+After: [3, 0, 2, 4]
+
+Before: [0, 1, 0, 2]
+3 1 0 1
+After: [0, 1, 0, 2]
+
+Before: [1, 0, 3, 3]
+10 1 0 3
+After: [1, 0, 3, 1]
+
+Before: [1, 3, 1, 2]
+5 0 3 2
+After: [1, 3, 3, 2]
+
+Before: [1, 0, 0, 2]
+10 1 0 2
+After: [1, 0, 1, 2]
+
+Before: [1, 1, 1, 3]
+6 0 3 3
+After: [1, 1, 1, 0]
+
+Before: [1, 2, 0, 2]
+11 1 3 0
+After: [1, 2, 0, 2]
+
+Before: [1, 2, 1, 2]
+11 1 3 1
+After: [1, 1, 1, 2]
+
+Before: [0, 0, 2, 0]
+9 0 0 3
+After: [0, 0, 2, 0]
+
+Before: [3, 2, 2, 2]
+1 3 2 2
+After: [3, 2, 4, 2]
+
+Before: [0, 1, 3, 2]
+3 1 0 2
+After: [0, 1, 1, 2]
+
+Before: [2, 2, 1, 2]
+11 1 3 2
+After: [2, 2, 1, 2]
+
+Before: [1, 3, 0, 2]
+13 3 2 0
+After: [4, 3, 0, 2]
+
+Before: [2, 1, 2, 3]
+6 0 3 2
+After: [2, 1, 0, 3]
+
+Before: [0, 2, 1, 2]
+11 1 3 2
+After: [0, 2, 1, 2]
+
+Before: [2, 2, 2, 2]
+2 1 2 1
+After: [2, 1, 2, 2]
+
+Before: [3, 0, 2, 2]
+1 2 2 3
+After: [3, 0, 2, 4]
+
+Before: [0, 0, 3, 2]
+13 3 2 0
+After: [4, 0, 3, 2]
+
+Before: [1, 2, 1, 1]
+4 1 0 1
+After: [1, 1, 1, 1]
+
+Before: [1, 0, 2, 1]
+10 1 0 0
+After: [1, 0, 2, 1]
+
+Before: [2, 0, 2, 3]
+6 0 3 3
+After: [2, 0, 2, 0]
+
+Before: [1, 2, 3, 1]
+4 3 3 3
+After: [1, 2, 3, 0]
+
+Before: [1, 1, 1, 2]
+5 2 3 2
+After: [1, 1, 3, 2]
+
+Before: [1, 2, 3, 0]
+14 1 3 1
+After: [1, 6, 3, 0]
+
+Before: [0, 0, 1, 3]
+5 2 3 0
+After: [3, 0, 1, 3]
+
+Before: [0, 0, 0, 1]
+9 0 0 0
+After: [0, 0, 0, 1]
+
+Before: [2, 1, 3, 1]
+5 0 1 3
+After: [2, 1, 3, 3]
+
+Before: [2, 1, 2, 3]
+6 0 3 3
+After: [2, 1, 2, 0]
+
+Before: [2, 3, 1, 3]
+2 1 3 1
+After: [2, 1, 1, 3]
+
+Before: [1, 2, 1, 2]
+4 3 3 3
+After: [1, 2, 1, 0]
+
+Before: [2, 2, 3, 2]
+11 1 3 1
+After: [2, 1, 3, 2]
+
+Before: [2, 3, 3, 3]
+13 0 2 1
+After: [2, 4, 3, 3]
+
+Before: [1, 3, 2, 3]
+6 0 3 2
+After: [1, 3, 0, 3]
+
+Before: [2, 2, 1, 1]
+4 1 2 0
+After: [1, 2, 1, 1]
+
+Before: [1, 0, 3, 3]
+5 1 3 2
+After: [1, 0, 3, 3]
+
+Before: [3, 3, 2, 1]
+7 3 2 1
+After: [3, 3, 2, 1]
+
+Before: [1, 0, 2, 2]
+10 1 0 1
+After: [1, 1, 2, 2]
+
+Before: [2, 1, 1, 3]
+13 0 2 0
+After: [4, 1, 1, 3]
+
+Before: [1, 1, 0, 0]
+0 1 0 0
+After: [1, 1, 0, 0]
+
+Before: [2, 2, 2, 0]
+2 1 2 1
+After: [2, 1, 2, 0]
+
+Before: [0, 1, 1, 0]
+3 1 0 2
+After: [0, 1, 1, 0]
+
+Before: [1, 1, 2, 2]
+1 3 2 3
+After: [1, 1, 2, 4]
+
+Before: [2, 2, 1, 2]
+13 3 2 0
+After: [4, 2, 1, 2]
+
+Before: [0, 1, 0, 0]
+9 0 0 1
+After: [0, 0, 0, 0]
+
+Before: [1, 3, 1, 1]
+14 1 2 2
+After: [1, 3, 6, 1]
+
+Before: [1, 3, 0, 3]
+6 0 3 1
+After: [1, 0, 0, 3]
+
+Before: [1, 2, 2, 2]
+11 1 3 1
+After: [1, 1, 2, 2]
+
+Before: [1, 2, 0, 1]
+12 1 1 2
+After: [1, 2, 1, 1]
+
+Before: [3, 3, 2, 2]
+4 3 3 0
+After: [0, 3, 2, 2]
+
+Before: [0, 0, 0, 2]
+4 3 3 3
+After: [0, 0, 0, 0]
+
+Before: [1, 1, 2, 0]
+0 1 0 2
+After: [1, 1, 1, 0]
+
+Before: [3, 0, 2, 1]
+7 3 2 2
+After: [3, 0, 3, 1]
+
+Before: [3, 1, 2, 1]
+7 3 2 1
+After: [3, 3, 2, 1]
+
+Before: [0, 0, 2, 2]
+1 3 2 2
+After: [0, 0, 4, 2]
+
+Before: [0, 1, 3, 1]
+3 1 0 3
+After: [0, 1, 3, 1]
+
+Before: [1, 3, 2, 2]
+14 3 3 3
+After: [1, 3, 2, 6]
+
+Before: [1, 3, 3, 0]
+8 0 1 0
+After: [3, 3, 3, 0]
+
+Before: [1, 3, 2, 3]
+1 2 2 1
+After: [1, 4, 2, 3]
+
+Before: [0, 1, 3, 2]
+7 3 1 3
+After: [0, 1, 3, 3]
+
+Before: [3, 3, 2, 2]
+15 1 2 2
+After: [3, 3, 6, 2]
+
+Before: [0, 3, 3, 1]
+7 3 2 3
+After: [0, 3, 3, 3]
+
+Before: [2, 3, 3, 3]
+2 1 3 1
+After: [2, 1, 3, 3]
+
+Before: [1, 1, 3, 1]
+14 0 2 2
+After: [1, 1, 2, 1]
+
+Before: [2, 1, 0, 3]
+8 1 0 2
+After: [2, 1, 3, 3]
+
+Before: [1, 2, 2, 0]
+2 1 2 0
+After: [1, 2, 2, 0]
+
+Before: [1, 0, 0, 0]
+10 1 0 2
+After: [1, 0, 1, 0]
+
+Before: [1, 3, 3, 3]
+2 1 3 3
+After: [1, 3, 3, 1]
+
+Before: [0, 2, 2, 1]
+1 1 2 3
+After: [0, 2, 2, 4]
+
+Before: [1, 2, 2, 3]
+6 0 3 3
+After: [1, 2, 2, 0]
+
+Before: [3, 2, 0, 2]
+11 1 3 2
+After: [3, 2, 1, 2]
+
+Before: [2, 2, 2, 2]
+1 2 2 0
+After: [4, 2, 2, 2]
+
+Before: [1, 0, 0, 1]
+4 3 3 1
+After: [1, 0, 0, 1]
+
+Before: [3, 1, 1, 2]
+4 3 3 1
+After: [3, 0, 1, 2]
+
+Before: [1, 1, 2, 3]
+6 0 3 3
+After: [1, 1, 2, 0]
+
+Before: [0, 3, 1, 3]
+9 0 0 2
+After: [0, 3, 0, 3]
+
+Before: [1, 3, 0, 0]
+8 2 1 0
+After: [3, 3, 0, 0]
+
+Before: [3, 2, 0, 2]
+13 1 2 3
+After: [3, 2, 0, 4]
+
+Before: [0, 0, 1, 2]
+13 3 2 2
+After: [0, 0, 4, 2]
+
+Before: [0, 2, 0, 2]
+11 1 3 0
+After: [1, 2, 0, 2]
+
+Before: [0, 3, 1, 3]
+9 0 0 3
+After: [0, 3, 1, 0]
+
+Before: [2, 2, 0, 2]
+11 1 3 0
+After: [1, 2, 0, 2]
+
+Before: [0, 3, 1, 2]
+8 2 1 0
+After: [3, 3, 1, 2]
+
+Before: [0, 3, 2, 2]
+9 0 0 2
+After: [0, 3, 0, 2]
+
+Before: [3, 2, 0, 2]
+13 1 2 2
+After: [3, 2, 4, 2]
+
+Before: [0, 3, 1, 1]
+14 1 3 2
+After: [0, 3, 9, 1]
+
+Before: [2, 0, 2, 0]
+1 0 2 1
+After: [2, 4, 2, 0]
+
+Before: [3, 2, 3, 2]
+11 1 3 0
+After: [1, 2, 3, 2]
+
+Before: [0, 0, 3, 1]
+7 3 2 0
+After: [3, 0, 3, 1]
+
+Before: [2, 2, 0, 2]
+12 1 1 2
+After: [2, 2, 1, 2]
+
+Before: [0, 3, 2, 1]
+8 0 1 0
+After: [3, 3, 2, 1]
+
+Before: [2, 0, 3, 1]
+7 3 2 0
+After: [3, 0, 3, 1]
+
+Before: [0, 0, 1, 2]
+8 0 3 2
+After: [0, 0, 2, 2]
+
+Before: [1, 1, 3, 0]
+0 1 0 3
+After: [1, 1, 3, 1]
+
+Before: [1, 2, 0, 3]
+4 1 0 1
+After: [1, 1, 0, 3]
+
+Before: [1, 1, 2, 1]
+0 1 0 0
+After: [1, 1, 2, 1]
+
+Before: [2, 3, 2, 3]
+6 0 3 3
+After: [2, 3, 2, 0]
+
+Before: [2, 1, 3, 2]
+7 3 1 3
+After: [2, 1, 3, 3]
+
+Before: [1, 0, 0, 2]
+4 3 3 2
+After: [1, 0, 0, 2]
+
+Before: [0, 0, 1, 1]
+4 2 3 2
+After: [0, 0, 0, 1]
+
+Before: [1, 1, 0, 2]
+0 1 0 2
+After: [1, 1, 1, 2]
+
+Before: [0, 1, 0, 2]
+3 1 0 2
+After: [0, 1, 1, 2]
+
+Before: [2, 2, 0, 1]
+13 0 2 0
+After: [4, 2, 0, 1]
+
+Before: [2, 2, 0, 3]
+6 0 3 3
+After: [2, 2, 0, 0]
+
+Before: [0, 2, 0, 2]
+13 3 2 0
+After: [4, 2, 0, 2]
+
+Before: [2, 2, 2, 2]
+1 0 2 3
+After: [2, 2, 2, 4]
+
+Before: [1, 2, 2, 3]
+2 1 2 3
+After: [1, 2, 2, 1]
+
+Before: [1, 2, 0, 0]
+15 0 1 3
+After: [1, 2, 0, 2]
+
+Before: [2, 2, 0, 2]
+11 1 3 1
+After: [2, 1, 0, 2]
+
+Before: [1, 0, 2, 3]
+5 0 2 0
+After: [3, 0, 2, 3]
+
+Before: [1, 0, 0, 1]
+10 1 0 2
+After: [1, 0, 1, 1]
+
+Before: [3, 1, 1, 1]
+14 0 3 2
+After: [3, 1, 9, 1]
+
+Before: [0, 1, 3, 3]
+3 1 0 3
+After: [0, 1, 3, 1]
+
+Before: [2, 1, 2, 2]
+1 0 2 2
+After: [2, 1, 4, 2]
+
+Before: [0, 2, 2, 1]
+12 1 1 0
+After: [1, 2, 2, 1]
+
+Before: [1, 2, 1, 2]
+11 1 3 2
+After: [1, 2, 1, 2]
+
+Before: [0, 1, 2, 2]
+3 1 0 1
+After: [0, 1, 2, 2]
+
+Before: [2, 2, 3, 2]
+11 1 3 3
+After: [2, 2, 3, 1]
+
+Before: [0, 2, 1, 2]
+12 1 1 1
+After: [0, 1, 1, 2]
+
+Before: [2, 1, 1, 3]
+6 0 3 0
+After: [0, 1, 1, 3]
+
+Before: [1, 2, 1, 3]
+8 0 1 3
+After: [1, 2, 1, 3]
+
+Before: [0, 3, 0, 2]
+9 0 0 3
+After: [0, 3, 0, 0]
+
+Before: [0, 2, 2, 2]
+11 1 3 1
+After: [0, 1, 2, 2]
+
+Before: [0, 1, 0, 2]
+3 1 0 0
+After: [1, 1, 0, 2]
+
+Before: [2, 0, 1, 2]
+13 0 2 2
+After: [2, 0, 4, 2]
+
+Before: [1, 0, 0, 2]
+10 1 0 3
+After: [1, 0, 0, 1]
+
+Before: [3, 1, 3, 2]
+14 0 3 3
+After: [3, 1, 3, 9]
+
+Before: [2, 2, 2, 3]
+15 2 3 0
+After: [6, 2, 2, 3]
+
+Before: [1, 0, 1, 0]
+10 1 0 2
+After: [1, 0, 1, 0]
+
+Before: [0, 2, 1, 0]
+9 0 0 3
+After: [0, 2, 1, 0]
+
+Before: [1, 2, 2, 2]
+11 1 3 0
+After: [1, 2, 2, 2]
+
+Before: [1, 2, 3, 1]
+15 3 1 0
+After: [2, 2, 3, 1]
+
+Before: [0, 0, 3, 1]
+8 0 2 2
+After: [0, 0, 3, 1]
+
+Before: [2, 0, 2, 1]
+14 0 3 1
+After: [2, 6, 2, 1]
+
+Before: [0, 0, 2, 3]
+15 2 3 1
+After: [0, 6, 2, 3]
+
+Before: [1, 2, 2, 0]
+12 1 1 2
+After: [1, 2, 1, 0]
+
+Before: [2, 2, 3, 0]
+12 1 0 2
+After: [2, 2, 1, 0]
+
+Before: [3, 2, 0, 2]
+11 1 3 1
+After: [3, 1, 0, 2]
+
+Before: [2, 2, 2, 3]
+6 0 3 3
+After: [2, 2, 2, 0]
+
+Before: [0, 1, 0, 0]
+3 1 0 2
+After: [0, 1, 1, 0]
+
+Before: [0, 1, 1, 3]
+3 1 0 3
+After: [0, 1, 1, 1]
+
+Before: [2, 0, 0, 3]
+6 0 3 1
+After: [2, 0, 0, 3]
+
+Before: [3, 1, 0, 0]
+8 1 0 0
+After: [3, 1, 0, 0]
+
+Before: [0, 1, 2, 1]
+3 1 0 1
+After: [0, 1, 2, 1]
+
+Before: [1, 0, 1, 0]
+10 1 0 3
+After: [1, 0, 1, 1]
+
+Before: [0, 0, 3, 1]
+12 2 3 3
+After: [0, 0, 3, 0]
+
+Before: [0, 1, 0, 1]
+4 3 3 2
+After: [0, 1, 0, 1]
+
+Before: [1, 0, 2, 1]
+7 3 2 2
+After: [1, 0, 3, 1]
+
+Before: [1, 1, 2, 2]
+15 0 2 0
+After: [2, 1, 2, 2]
+
+Before: [3, 3, 0, 3]
+2 1 3 2
+After: [3, 3, 1, 3]
+
+Before: [1, 0, 3, 3]
+10 1 0 0
+After: [1, 0, 3, 3]
+
+Before: [1, 3, 2, 1]
+14 2 3 2
+After: [1, 3, 6, 1]
+
+Before: [0, 1, 1, 1]
+3 1 0 0
+After: [1, 1, 1, 1]
+
+Before: [3, 3, 0, 1]
+4 3 3 3
+After: [3, 3, 0, 0]
+
+Before: [3, 3, 2, 1]
+7 3 2 2
+After: [3, 3, 3, 1]
+
+Before: [3, 2, 2, 1]
+2 1 2 3
+After: [3, 2, 2, 1]
+
+Before: [1, 1, 1, 3]
+6 0 3 0
+After: [0, 1, 1, 3]
+
+Before: [3, 0, 2, 3]
+5 1 3 3
+After: [3, 0, 2, 3]
+
+Before: [2, 2, 3, 3]
+15 1 3 2
+After: [2, 2, 6, 3]
+
+Before: [1, 2, 1, 2]
+8 2 1 3
+After: [1, 2, 1, 3]
+
+Before: [0, 2, 3, 1]
+15 3 1 0
+After: [2, 2, 3, 1]
+
+Before: [3, 3, 0, 3]
+12 3 0 2
+After: [3, 3, 1, 3]
+
+Before: [2, 2, 2, 2]
+11 1 3 2
+After: [2, 2, 1, 2]
+
+Before: [3, 0, 3, 0]
+8 1 2 1
+After: [3, 3, 3, 0]
+
+Before: [1, 1, 1, 2]
+5 0 3 2
+After: [1, 1, 3, 2]
+
+Before: [0, 3, 3, 2]
+9 0 0 2
+After: [0, 3, 0, 2]
+
+Before: [0, 3, 2, 1]
+9 0 0 0
+After: [0, 3, 2, 1]
+
+Before: [1, 3, 1, 3]
+5 2 3 3
+After: [1, 3, 1, 3]
+
+Before: [2, 1, 3, 3]
+6 0 3 3
+After: [2, 1, 3, 0]
+
+Before: [0, 1, 1, 0]
+9 0 0 0
+After: [0, 1, 1, 0]
+
+Before: [1, 0, 2, 3]
+6 0 3 0
+After: [0, 0, 2, 3]
+
+Before: [3, 3, 3, 1]
+7 3 2 0
+After: [3, 3, 3, 1]
+
+Before: [0, 1, 3, 0]
+3 1 0 2
+After: [0, 1, 1, 0]
+
+Before: [1, 2, 2, 2]
+4 3 3 1
+After: [1, 0, 2, 2]
+
+Before: [3, 2, 2, 2]
+11 1 3 3
+After: [3, 2, 2, 1]
+
+Before: [0, 1, 0, 2]
+9 0 0 0
+After: [0, 1, 0, 2]
+
+Before: [1, 0, 1, 3]
+10 1 0 0
+After: [1, 0, 1, 3]
+
+Before: [3, 3, 2, 3]
+2 1 3 1
+After: [3, 1, 2, 3]
+
+Before: [2, 3, 1, 0]
+8 3 0 1
+After: [2, 2, 1, 0]
+
+Before: [1, 1, 2, 1]
+0 1 0 3
+After: [1, 1, 2, 1]
+
+Before: [3, 3, 2, 3]
+15 3 2 1
+After: [3, 6, 2, 3]
+
+Before: [0, 2, 1, 2]
+4 1 2 3
+After: [0, 2, 1, 1]
+
+Before: [2, 2, 1, 0]
+13 1 2 1
+After: [2, 4, 1, 0]
+
+Before: [1, 0, 3, 3]
+10 1 0 1
+After: [1, 1, 3, 3]
+
+Before: [3, 3, 2, 0]
+1 2 2 2
+After: [3, 3, 4, 0]
+
+Before: [1, 2, 1, 2]
+11 1 3 0
+After: [1, 2, 1, 2]
+
+Before: [1, 3, 1, 3]
+6 0 3 3
+After: [1, 3, 1, 0]
+
+Before: [3, 3, 1, 3]
+8 2 1 1
+After: [3, 3, 1, 3]
+
+Before: [1, 0, 0, 1]
+4 3 3 0
+After: [0, 0, 0, 1]
+
+Before: [1, 2, 2, 2]
+11 1 3 3
+After: [1, 2, 2, 1]
+
+Before: [3, 1, 2, 1]
+8 1 0 0
+After: [3, 1, 2, 1]
+
+Before: [3, 0, 1, 2]
+8 1 3 3
+After: [3, 0, 1, 2]
+
+Before: [1, 1, 3, 3]
+0 1 0 3
+After: [1, 1, 3, 1]
+
+Before: [0, 0, 1, 2]
+13 3 2 1
+After: [0, 4, 1, 2]
+
+Before: [2, 3, 0, 1]
+13 0 2 0
+After: [4, 3, 0, 1]
+
+Before: [1, 2, 2, 0]
+2 1 2 1
+After: [1, 1, 2, 0]
+
+Before: [2, 3, 1, 0]
+13 0 2 2
+After: [2, 3, 4, 0]
+
+Before: [0, 1, 2, 3]
+3 1 0 3
+After: [0, 1, 2, 1]
+
+Before: [2, 3, 2, 2]
+15 1 3 1
+After: [2, 6, 2, 2]
+
+Before: [0, 1, 2, 0]
+3 1 0 3
+After: [0, 1, 2, 1]
+
+Before: [1, 2, 2, 2]
+15 0 2 2
+After: [1, 2, 2, 2]
+
+Before: [1, 2, 2, 1]
+12 1 1 2
+After: [1, 2, 1, 1]
+
+Before: [0, 1, 1, 0]
+3 1 0 0
+After: [1, 1, 1, 0]
+
+Before: [3, 3, 0, 1]
+14 0 3 1
+After: [3, 9, 0, 1]
+
+Before: [1, 0, 2, 1]
+10 1 0 2
+After: [1, 0, 1, 1]
+
+Before: [0, 3, 2, 3]
+9 0 0 2
+After: [0, 3, 0, 3]
+
+Before: [0, 2, 1, 2]
+11 1 3 3
+After: [0, 2, 1, 1]
+
+Before: [2, 0, 1, 3]
+6 0 3 1
+After: [2, 0, 1, 3]
+
+Before: [1, 1, 2, 3]
+0 1 0 3
+After: [1, 1, 2, 1]
+
+Before: [3, 0, 2, 2]
+1 2 2 1
+After: [3, 4, 2, 2]
+
+Before: [1, 3, 2, 0]
+5 3 2 3
+After: [1, 3, 2, 2]
+
+Before: [3, 3, 0, 3]
+8 2 0 1
+After: [3, 3, 0, 3]
+
+Before: [0, 0, 3, 3]
+9 0 0 3
+After: [0, 0, 3, 0]
+
+Before: [0, 3, 1, 3]
+8 2 1 3
+After: [0, 3, 1, 3]
+
+Before: [1, 1, 3, 2]
+0 1 0 3
+After: [1, 1, 3, 1]
+
+Before: [1, 0, 0, 3]
+10 1 0 2
+After: [1, 0, 1, 3]
+
+Before: [2, 0, 1, 2]
+13 3 2 3
+After: [2, 0, 1, 4]
+
+Before: [3, 2, 3, 2]
+13 1 2 0
+After: [4, 2, 3, 2]
+
+Before: [0, 1, 0, 2]
+3 1 0 3
+After: [0, 1, 0, 1]
+
+Before: [1, 1, 3, 1]
+0 1 0 0
+After: [1, 1, 3, 1]
+
+Before: [0, 1, 3, 0]
+3 1 0 0
+After: [1, 1, 3, 0]
+
+Before: [0, 1, 0, 1]
+3 1 0 1
+After: [0, 1, 0, 1]
+
+Before: [3, 2, 1, 2]
+4 1 2 2
+After: [3, 2, 1, 2]
+
+Before: [1, 1, 2, 3]
+0 1 0 0
+After: [1, 1, 2, 3]
+
+Before: [3, 2, 3, 2]
+11 1 3 2
+After: [3, 2, 1, 2]
+
+Before: [0, 1, 3, 1]
+3 1 0 1
+After: [0, 1, 3, 1]
+
+Before: [1, 1, 2, 0]
+0 1 0 3
+After: [1, 1, 2, 1]
+
+Before: [0, 1, 3, 0]
+9 0 0 3
+After: [0, 1, 3, 0]
+
+Before: [2, 2, 3, 1]
+14 2 3 2
+After: [2, 2, 9, 1]
+
+Before: [0, 1, 0, 1]
+3 1 0 2
+After: [0, 1, 1, 1]
+
+Before: [3, 3, 3, 3]
+15 0 3 3
+After: [3, 3, 3, 9]
+
+Before: [2, 1, 2, 3]
+6 0 3 0
+After: [0, 1, 2, 3]
+
+Before: [0, 2, 1, 2]
+8 0 3 1
+After: [0, 2, 1, 2]
+
+Before: [0, 2, 2, 1]
+2 1 2 1
+After: [0, 1, 2, 1]
+
+Before: [1, 0, 1, 2]
+10 1 0 0
+After: [1, 0, 1, 2]
+
+Before: [1, 2, 3, 3]
+15 1 3 3
+After: [1, 2, 3, 6]
+
+Before: [2, 1, 2, 3]
+15 1 2 3
+After: [2, 1, 2, 2]
+
+Before: [1, 2, 2, 1]
+14 1 3 3
+After: [1, 2, 2, 6]
+
+Before: [1, 1, 1, 0]
+0 1 0 1
+After: [1, 1, 1, 0]
+
+Before: [3, 2, 3, 1]
+4 3 3 0
+After: [0, 2, 3, 1]
+
+Before: [0, 2, 2, 2]
+11 1 3 2
+After: [0, 2, 1, 2]
+
+Before: [2, 1, 3, 1]
+14 3 2 3
+After: [2, 1, 3, 2]
+
+Before: [0, 2, 2, 3]
+2 1 2 0
+After: [1, 2, 2, 3]
+
+Before: [0, 1, 3, 3]
+5 0 3 2
+After: [0, 1, 3, 3]
+
+Before: [0, 3, 2, 2]
+15 1 2 0
+After: [6, 3, 2, 2]
+
+Before: [2, 2, 1, 2]
+14 3 3 1
+After: [2, 6, 1, 2]
+
+Before: [2, 2, 2, 2]
+11 1 3 1
+After: [2, 1, 2, 2]
+
+Before: [3, 2, 2, 2]
+11 1 3 0
+After: [1, 2, 2, 2]
+
+Before: [1, 3, 2, 1]
+15 0 2 0
+After: [2, 3, 2, 1]
+
+Before: [1, 2, 0, 0]
+15 0 1 2
+After: [1, 2, 2, 0]
+
+Before: [1, 2, 2, 3]
+1 1 2 1
+After: [1, 4, 2, 3]
+
+Before: [3, 2, 2, 1]
+7 3 2 0
+After: [3, 2, 2, 1]
+
+Before: [3, 2, 2, 0]
+12 1 1 2
+After: [3, 2, 1, 0]
+
+Before: [1, 0, 3, 3]
+6 0 3 1
+After: [1, 0, 3, 3]
+
+Before: [2, 0, 2, 1]
+1 0 2 3
+After: [2, 0, 2, 4]
+
+Before: [2, 0, 1, 2]
+13 0 2 0
+After: [4, 0, 1, 2]
+
+Before: [2, 2, 2, 2]
+12 2 1 0
+After: [1, 2, 2, 2]
+
+Before: [2, 2, 0, 2]
+13 3 2 1
+After: [2, 4, 0, 2]
+
+Before: [3, 3, 3, 0]
+14 2 3 1
+After: [3, 9, 3, 0]
+
+Before: [3, 1, 0, 2]
+4 3 3 3
+After: [3, 1, 0, 0]
+
+Before: [0, 2, 2, 3]
+1 1 2 0
+After: [4, 2, 2, 3]
+
+Before: [0, 1, 1, 2]
+9 0 0 1
+After: [0, 0, 1, 2]
+
+Before: [3, 3, 1, 0]
+14 1 3 2
+After: [3, 3, 9, 0]
+
+Before: [2, 0, 2, 3]
+5 1 2 2
+After: [2, 0, 2, 3]
+
+Before: [1, 1, 1, 2]
+0 1 0 0
+After: [1, 1, 1, 2]
+
+Before: [3, 2, 3, 3]
+15 1 3 0
+After: [6, 2, 3, 3]
+
+Before: [1, 3, 2, 1]
+14 1 3 0
+After: [9, 3, 2, 1]
+
+Before: [2, 0, 2, 2]
+1 2 2 0
+After: [4, 0, 2, 2]
+
+Before: [0, 2, 1, 2]
+11 1 3 0
+After: [1, 2, 1, 2]
+
+Before: [0, 1, 1, 1]
+3 1 0 3
+After: [0, 1, 1, 1]
+
+Before: [1, 0, 1, 0]
+10 1 0 1
+After: [1, 1, 1, 0]
+
+Before: [1, 1, 1, 1]
+4 3 3 3
+After: [1, 1, 1, 0]
+
+Before: [3, 2, 2, 2]
+14 0 3 3
+After: [3, 2, 2, 9]
+
+Before: [0, 1, 2, 1]
+9 0 0 0
+After: [0, 1, 2, 1]
+
+Before: [2, 0, 2, 3]
+1 2 2 0
+After: [4, 0, 2, 3]
+
+Before: [1, 1, 1, 3]
+0 1 0 3
+After: [1, 1, 1, 1]
+
+Before: [0, 1, 0, 3]
+3 1 0 1
+After: [0, 1, 0, 3]
+
+Before: [2, 0, 2, 1]
+5 1 2 0
+After: [2, 0, 2, 1]
+
+Before: [1, 3, 3, 1]
+14 0 2 0
+After: [2, 3, 3, 1]
+
+Before: [1, 0, 0, 3]
+6 0 3 1
+After: [1, 0, 0, 3]
+
+Before: [2, 3, 0, 3]
+6 0 3 3
+After: [2, 3, 0, 0]
+
+Before: [0, 1, 2, 2]
+1 3 2 3
+After: [0, 1, 2, 4]
+
+Before: [3, 1, 2, 3]
+1 2 2 2
+After: [3, 1, 4, 3]
+
+Before: [3, 1, 0, 3]
+8 2 0 3
+After: [3, 1, 0, 3]
+
+Before: [3, 3, 1, 2]
+14 0 3 3
+After: [3, 3, 1, 9]
+
+Before: [3, 0, 3, 2]
+4 3 3 3
+After: [3, 0, 3, 0]
+
+Before: [2, 3, 1, 0]
+8 2 1 0
+After: [3, 3, 1, 0]
+
+Before: [0, 1, 2, 1]
+3 1 0 2
+After: [0, 1, 1, 1]
+
+Before: [0, 1, 3, 2]
+3 1 0 0
+After: [1, 1, 3, 2]
+
+Before: [1, 1, 2, 0]
+15 0 2 1
+After: [1, 2, 2, 0]
+
+Before: [0, 3, 2, 2]
+1 3 2 0
+After: [4, 3, 2, 2]
+
+Before: [1, 0, 1, 2]
+10 1 0 3
+After: [1, 0, 1, 1]
+
+Before: [0, 2, 2, 0]
+12 1 1 0
+After: [1, 2, 2, 0]
+
+Before: [1, 1, 3, 3]
+0 1 0 1
+After: [1, 1, 3, 3]
+
+Before: [1, 0, 2, 0]
+10 1 0 2
+After: [1, 0, 1, 0]
+
+Before: [2, 3, 2, 1]
+15 1 2 1
+After: [2, 6, 2, 1]
+
+Before: [1, 2, 0, 0]
+8 1 0 1
+After: [1, 3, 0, 0]
+
+Before: [3, 2, 1, 2]
+11 1 3 3
+After: [3, 2, 1, 1]
+
+Before: [1, 1, 1, 1]
+0 1 0 3
+After: [1, 1, 1, 1]
+
+Before: [2, 3, 1, 3]
+6 0 3 3
+After: [2, 3, 1, 0]
+
+Before: [0, 2, 1, 3]
+13 1 2 2
+After: [0, 2, 4, 3]
+
+Before: [1, 0, 3, 1]
+7 3 2 3
+After: [1, 0, 3, 3]
+
+Before: [2, 1, 0, 0]
+8 3 0 3
+After: [2, 1, 0, 2]
+
+Before: [1, 1, 1, 2]
+0 1 0 2
+After: [1, 1, 1, 2]
+
+Before: [3, 2, 2, 2]
+1 3 2 3
+After: [3, 2, 2, 4]
+
+Before: [3, 1, 1, 1]
+14 0 3 3
+After: [3, 1, 1, 9]
+
+Before: [2, 2, 3, 3]
+6 0 3 0
+After: [0, 2, 3, 3]
+
+Before: [0, 1, 1, 2]
+3 1 0 2
+After: [0, 1, 1, 2]
+
+Before: [3, 2, 1, 2]
+14 0 3 0
+After: [9, 2, 1, 2]
+
+Before: [2, 0, 3, 1]
+7 3 2 3
+After: [2, 0, 3, 3]
+
+Before: [1, 2, 2, 1]
+2 1 2 0
+After: [1, 2, 2, 1]
+
+Before: [0, 0, 2, 1]
+4 3 3 3
+After: [0, 0, 2, 0]
+
+Before: [3, 2, 3, 3]
+12 3 0 3
+After: [3, 2, 3, 1]
+
+Before: [1, 1, 2, 2]
+0 1 0 3
+After: [1, 1, 2, 1]
+
+Before: [2, 3, 1, 1]
+14 1 3 2
+After: [2, 3, 9, 1]
+
+Before: [1, 0, 2, 1]
+15 0 2 1
+After: [1, 2, 2, 1]
+
+Before: [0, 1, 2, 3]
+9 0 0 3
+After: [0, 1, 2, 0]
+
+Before: [3, 0, 0, 2]
+4 3 3 0
+After: [0, 0, 0, 2]
+
+Before: [3, 0, 3, 1]
+7 3 2 3
+After: [3, 0, 3, 3]
+
+Before: [3, 2, 2, 3]
+12 2 1 1
+After: [3, 1, 2, 3]
+
+Before: [0, 3, 3, 3]
+2 1 3 1
+After: [0, 1, 3, 3]
+
+Before: [1, 0, 0, 0]
+10 1 0 1
+After: [1, 1, 0, 0]
+
+Before: [1, 3, 0, 3]
+2 1 3 3
+After: [1, 3, 0, 1]
+
+Before: [3, 2, 2, 3]
+12 3 0 2
+After: [3, 2, 1, 3]
+
+Before: [1, 1, 2, 0]
+0 1 0 0
+After: [1, 1, 2, 0]
+
+Before: [0, 2, 2, 1]
+2 1 2 2
+After: [0, 2, 1, 1]
+
+Before: [1, 0, 1, 2]
+10 1 0 2
+After: [1, 0, 1, 2]
+
+Before: [1, 0, 3, 0]
+14 0 2 2
+After: [1, 0, 2, 0]
+
+Before: [0, 2, 3, 2]
+11 1 3 3
+After: [0, 2, 3, 1]
+
+Before: [0, 1, 0, 3]
+3 1 0 2
+After: [0, 1, 1, 3]
+
+Before: [3, 3, 2, 1]
+12 1 0 0
+After: [1, 3, 2, 1]
+
+Before: [0, 2, 3, 3]
+13 1 2 0
+After: [4, 2, 3, 3]
+
+Before: [1, 1, 3, 0]
+0 1 0 1
+After: [1, 1, 3, 0]
+
+Before: [1, 2, 2, 2]
+2 1 2 2
+After: [1, 2, 1, 2]
+
+Before: [2, 1, 3, 3]
+13 0 2 2
+After: [2, 1, 4, 3]
+
+Before: [1, 0, 1, 3]
+10 1 0 3
+After: [1, 0, 1, 1]
+
+Before: [2, 1, 3, 2]
+7 3 1 1
+After: [2, 3, 3, 2]
+
+Before: [1, 1, 1, 0]
+0 1 0 0
+After: [1, 1, 1, 0]
+
+Before: [0, 2, 3, 2]
+13 3 2 3
+After: [0, 2, 3, 4]
+
+Before: [3, 2, 2, 3]
+12 3 0 3
+After: [3, 2, 2, 1]
+
+Before: [2, 3, 2, 3]
+2 1 3 1
+After: [2, 1, 2, 3]
+
+Before: [2, 3, 0, 3]
+6 0 3 1
+After: [2, 0, 0, 3]
+
+Before: [2, 2, 2, 3]
+1 2 2 0
+After: [4, 2, 2, 3]
+
+Before: [3, 2, 3, 2]
+4 3 3 1
+After: [3, 0, 3, 2]
+
+Before: [0, 2, 2, 0]
+12 1 1 1
+After: [0, 1, 2, 0]
+
+Before: [2, 2, 3, 2]
+11 1 3 2
+After: [2, 2, 1, 2]
+
+Before: [3, 0, 2, 3]
+1 2 2 2
+After: [3, 0, 4, 3]
+
+Before: [0, 3, 2, 0]
+9 0 0 0
+After: [0, 3, 2, 0]
+
+Before: [0, 2, 3, 1]
+9 0 0 2
+After: [0, 2, 0, 1]
+
+Before: [0, 1, 1, 1]
+3 1 0 2
+After: [0, 1, 1, 1]
+
+Before: [2, 2, 2, 3]
+2 1 2 0
+After: [1, 2, 2, 3]
+
+Before: [0, 1, 2, 3]
+15 3 2 0
+After: [6, 1, 2, 3]
+
+Before: [1, 1, 0, 2]
+7 3 1 3
+After: [1, 1, 0, 3]
+
+Before: [1, 1, 1, 1]
+0 1 0 0
+After: [1, 1, 1, 1]
+
+Before: [1, 2, 3, 3]
+15 0 1 3
+After: [1, 2, 3, 2]
+
+Before: [0, 3, 2, 3]
+2 1 3 1
+After: [0, 1, 2, 3]
+
+Before: [0, 3, 0, 0]
+8 2 1 3
+After: [0, 3, 0, 3]
+
+Before: [2, 0, 2, 3]
+1 0 2 0
+After: [4, 0, 2, 3]
+
+Before: [0, 3, 0, 3]
+5 0 3 3
+After: [0, 3, 0, 3]
+
+Before: [0, 1, 2, 0]
+3 1 0 0
+After: [1, 1, 2, 0]
+
+
+
+7 3 2 0
+7 2 1 1
+7 1 0 3
+8 1 0 1
+14 1 2 1
+1 2 1 2
+7 3 3 1
+7 2 0 0
+14 3 0 3
+13 3 2 3
+0 1 0 1
+14 1 1 1
+1 1 2 2
+7 2 2 1
+7 3 1 0
+7 1 0 3
+1 3 3 3
+14 3 3 3
+1 2 3 2
+3 2 1 0
+14 3 0 3
+13 3 0 3
+7 2 3 2
+14 2 0 1
+13 1 0 1
+6 3 2 2
+14 2 2 2
+1 0 2 0
+7 3 1 1
+7 2 2 3
+14 3 0 2
+13 2 0 2
+7 2 1 3
+14 3 3 3
+1 0 3 0
+7 0 0 3
+14 0 0 2
+13 2 3 2
+14 0 0 1
+13 1 1 1
+10 3 2 3
+14 3 2 3
+1 0 3 0
+3 0 1 1
+7 0 1 0
+7 1 1 2
+7 3 1 3
+9 3 2 0
+14 0 1 0
+1 1 0 1
+3 1 0 3
+14 0 0 2
+13 2 2 2
+7 3 2 1
+14 2 0 0
+13 0 1 0
+3 0 2 0
+14 0 2 0
+1 0 3 3
+3 3 2 1
+7 2 1 0
+14 2 0 2
+13 2 3 2
+14 0 0 3
+13 3 2 3
+8 0 2 2
+14 2 2 2
+1 1 2 1
+14 0 0 2
+13 2 0 2
+14 1 0 3
+13 3 1 3
+15 3 0 2
+14 2 1 2
+1 2 1 1
+3 1 0 0
+14 2 0 1
+13 1 3 1
+7 2 1 3
+7 2 0 2
+5 2 3 3
+14 3 2 3
+14 3 3 3
+1 0 3 0
+3 0 0 3
+7 1 1 2
+7 2 1 1
+7 3 0 0
+8 1 0 1
+14 1 2 1
+14 1 3 1
+1 3 1 3
+3 3 0 1
+7 0 0 3
+14 1 0 0
+13 0 0 0
+7 2 2 2
+7 3 2 0
+14 0 2 0
+1 1 0 1
+7 1 1 2
+14 2 0 3
+13 3 2 3
+7 3 3 0
+9 0 2 2
+14 2 1 2
+1 2 1 1
+3 1 2 2
+14 1 0 1
+13 1 0 1
+7 1 2 0
+7 3 1 3
+13 0 1 1
+14 1 1 1
+1 2 1 2
+3 2 0 1
+7 2 0 3
+7 2 3 2
+7 2 3 0
+5 0 3 2
+14 2 2 2
+1 1 2 1
+3 1 1 0
+14 0 0 1
+13 1 2 1
+14 0 0 2
+13 2 3 2
+14 2 0 3
+13 3 3 3
+8 1 2 1
+14 1 1 1
+1 1 0 0
+3 0 0 2
+7 3 3 0
+7 2 3 3
+7 0 0 1
+0 0 3 3
+14 3 2 3
+1 3 2 2
+3 2 0 3
+14 3 0 2
+13 2 2 2
+7 1 1 1
+12 2 0 0
+14 0 2 0
+1 0 3 3
+3 3 3 1
+7 0 2 3
+7 3 0 2
+7 2 3 0
+8 0 2 3
+14 3 3 3
+1 3 1 1
+7 3 3 3
+2 0 2 2
+14 2 2 2
+14 2 1 2
+1 2 1 1
+3 1 3 3
+7 1 0 0
+7 3 2 1
+7 2 3 2
+3 0 2 1
+14 1 1 1
+14 1 3 1
+1 1 3 3
+3 3 1 0
+14 1 0 1
+13 1 0 1
+7 3 2 2
+7 0 1 3
+7 2 1 1
+14 1 1 1
+1 0 1 0
+3 0 0 1
+7 2 0 0
+7 2 2 2
+7 2 2 3
+11 0 3 2
+14 2 3 2
+1 1 2 1
+14 1 0 2
+13 2 3 2
+7 0 3 3
+2 0 2 0
+14 0 2 0
+14 0 3 0
+1 1 0 1
+3 1 2 0
+7 2 3 2
+7 3 3 1
+7 3 2 3
+12 2 1 1
+14 1 3 1
+1 1 0 0
+7 0 0 1
+7 0 2 2
+7 2 0 3
+10 2 3 2
+14 2 3 2
+1 2 0 0
+3 0 3 1
+14 3 0 0
+13 0 0 0
+7 2 2 2
+5 2 3 3
+14 3 1 3
+1 3 1 1
+3 1 2 2
+7 1 0 3
+14 0 0 1
+13 1 2 1
+7 2 1 0
+4 0 3 1
+14 1 2 1
+1 2 1 2
+3 2 3 0
+7 3 1 3
+7 3 3 1
+7 1 0 2
+9 3 2 1
+14 1 3 1
+14 1 1 1
+1 0 1 0
+3 0 0 2
+7 0 3 3
+14 2 0 1
+13 1 3 1
+7 2 2 0
+12 0 1 0
+14 0 1 0
+1 0 2 2
+14 0 0 0
+13 0 2 0
+5 0 3 0
+14 0 2 0
+1 2 0 2
+3 2 2 0
+7 2 1 3
+7 2 1 2
+12 2 1 1
+14 1 2 1
+1 0 1 0
+3 0 2 2
+7 0 3 1
+7 2 3 0
+11 0 3 0
+14 0 3 0
+14 0 2 0
+1 0 2 2
+3 2 3 1
+7 1 0 0
+7 3 2 2
+7 3 3 3
+14 0 2 2
+14 2 2 2
+1 2 1 1
+3 1 3 2
+7 1 0 3
+7 3 1 1
+7 2 0 0
+15 3 0 3
+14 3 3 3
+1 3 2 2
+3 2 3 1
+7 1 0 3
+7 1 0 0
+14 1 0 2
+13 2 2 2
+1 0 3 3
+14 3 2 3
+14 3 2 3
+1 3 1 1
+3 1 2 3
+14 0 0 2
+13 2 3 2
+7 0 3 1
+13 0 1 1
+14 1 2 1
+1 1 3 3
+3 3 2 2
+14 3 0 3
+13 3 1 3
+7 2 0 1
+7 3 3 0
+1 3 3 1
+14 1 3 1
+1 1 2 2
+3 2 1 1
+7 2 2 0
+7 0 3 3
+7 2 1 2
+6 3 2 3
+14 3 1 3
+1 3 1 1
+3 1 1 3
+7 1 1 0
+7 1 0 1
+7 3 3 2
+14 1 2 2
+14 2 3 2
+14 2 1 2
+1 2 3 3
+7 3 3 1
+7 2 2 2
+3 0 2 2
+14 2 3 2
+1 2 3 3
+3 3 2 1
+7 0 3 3
+7 2 2 2
+7 3 2 0
+12 2 0 3
+14 3 3 3
+1 1 3 1
+7 0 3 3
+7 3 0 2
+14 1 0 0
+13 0 2 0
+2 0 2 2
+14 2 2 2
+1 1 2 1
+7 3 1 3
+7 3 0 2
+0 3 0 3
+14 3 1 3
+1 3 1 1
+14 2 0 3
+13 3 1 3
+4 0 3 3
+14 3 2 3
+14 3 1 3
+1 1 3 1
+3 1 1 0
+14 1 0 2
+13 2 2 2
+7 1 2 1
+7 0 2 3
+6 3 2 3
+14 3 1 3
+1 3 0 0
+3 0 2 3
+14 3 0 1
+13 1 0 1
+7 1 3 0
+3 0 2 0
+14 0 2 0
+14 0 2 0
+1 0 3 3
+14 0 0 0
+13 0 1 0
+7 0 0 2
+14 0 2 2
+14 2 1 2
+1 3 2 3
+7 2 2 2
+3 0 2 2
+14 2 3 2
+1 3 2 3
+3 3 2 2
+7 2 1 0
+7 2 0 3
+11 0 3 3
+14 3 2 3
+1 3 2 2
+3 2 0 0
+7 2 3 1
+7 0 2 3
+7 2 1 2
+6 3 2 3
+14 3 3 3
+14 3 1 3
+1 0 3 0
+7 0 3 3
+6 3 2 2
+14 2 1 2
+1 0 2 0
+14 0 0 3
+13 3 1 3
+7 1 0 1
+7 0 2 2
+14 1 2 2
+14 2 2 2
+14 2 2 2
+1 0 2 0
+3 0 1 3
+7 2 1 0
+7 3 3 2
+14 1 2 0
+14 0 2 0
+1 3 0 3
+3 3 0 0
+14 0 0 3
+13 3 2 3
+7 0 2 2
+10 2 3 2
+14 2 1 2
+1 2 0 0
+3 0 1 1
+14 0 0 2
+13 2 3 2
+14 1 0 3
+13 3 0 3
+7 3 2 0
+7 2 0 0
+14 0 1 0
+1 0 1 1
+7 0 1 2
+7 0 0 0
+7 2 1 3
+10 2 3 3
+14 3 2 3
+1 1 3 1
+7 2 0 3
+10 2 3 0
+14 0 1 0
+1 1 0 1
+7 2 3 2
+7 0 2 3
+7 3 1 0
+8 2 0 0
+14 0 3 0
+1 1 0 1
+7 3 0 3
+14 0 0 2
+13 2 0 2
+7 1 3 0
+9 3 2 3
+14 3 1 3
+1 1 3 1
+7 0 3 3
+7 3 2 2
+7 0 1 0
+10 3 2 3
+14 3 2 3
+1 1 3 1
+3 1 3 3
+7 3 3 0
+7 1 3 1
+7 0 2 2
+2 2 0 2
+14 2 1 2
+1 3 2 3
+3 3 1 1
+7 2 3 2
+7 2 0 0
+7 0 3 3
+6 3 2 2
+14 2 2 2
+1 2 1 1
+3 1 3 2
+7 1 2 1
+7 2 3 3
+15 1 0 3
+14 3 2 3
+14 3 3 3
+1 2 3 2
+7 1 0 3
+7 2 3 1
+4 0 3 0
+14 0 2 0
+1 0 2 2
+3 2 2 0
+14 2 0 2
+13 2 1 2
+7 0 3 3
+5 1 3 3
+14 3 1 3
+1 0 3 0
+3 0 2 1
+7 2 1 0
+7 1 3 3
+15 3 0 3
+14 3 3 3
+14 3 1 3
+1 1 3 1
+3 1 3 3
+7 1 2 1
+7 0 2 2
+7 1 1 0
+14 0 2 1
+14 1 2 1
+1 1 3 3
+3 3 1 2
+7 3 0 1
+7 2 0 0
+14 2 0 3
+13 3 1 3
+13 3 1 3
+14 3 2 3
+14 3 3 3
+1 3 2 2
+3 2 2 0
+7 0 0 2
+7 3 0 3
+9 3 2 1
+14 1 2 1
+14 1 3 1
+1 0 1 0
+7 0 1 3
+7 3 3 1
+7 2 0 2
+12 2 1 3
+14 3 1 3
+14 3 1 3
+1 3 0 0
+7 1 2 3
+14 0 0 2
+13 2 3 2
+1 3 3 3
+14 3 1 3
+1 3 0 0
+3 0 0 2
+7 2 2 3
+7 2 1 0
+11 0 3 0
+14 0 3 0
+1 0 2 2
+3 2 3 3
+7 3 1 2
+7 1 3 0
+13 0 1 2
+14 2 2 2
+1 3 2 3
+7 1 0 1
+7 2 1 0
+7 1 3 2
+15 1 0 1
+14 1 1 1
+14 1 1 1
+1 1 3 3
+3 3 3 0
+7 3 1 1
+7 3 1 3
+14 2 0 2
+13 2 0 2
+9 3 2 3
+14 3 2 3
+14 3 3 3
+1 3 0 0
+3 0 1 1
+7 2 1 0
+7 1 2 2
+7 2 1 3
+11 0 3 2
+14 2 2 2
+14 2 1 2
+1 1 2 1
+7 2 0 2
+7 0 2 0
+7 1 0 3
+1 3 3 3
+14 3 1 3
+1 1 3 1
+3 1 0 0
+14 2 0 1
+13 1 3 1
+7 0 2 2
+7 1 3 3
+1 3 3 2
+14 2 1 2
+1 0 2 0
+3 0 3 2
+7 0 3 0
+7 0 3 3
+7 2 2 1
+7 3 0 3
+14 3 1 3
+14 3 3 3
+1 2 3 2
+3 2 1 1
+7 2 2 2
+7 2 0 3
+7 3 0 0
+12 2 0 0
+14 0 3 0
+14 0 1 0
+1 0 1 1
+7 1 3 2
+7 2 0 0
+7 1 3 3
+4 0 3 3
+14 3 1 3
+1 3 1 1
+14 2 0 3
+13 3 0 3
+7 3 1 0
+14 0 0 2
+13 2 2 2
+6 3 2 3
+14 3 2 3
+1 3 1 1
+3 1 2 2
+7 0 0 1
+14 3 0 3
+13 3 1 3
+7 2 2 0
+15 3 0 0
+14 0 3 0
+1 2 0 2
+3 2 2 1
+7 0 0 2
+14 3 0 0
+13 0 3 0
+9 0 2 0
+14 0 2 0
+1 0 1 1
+7 2 2 0
+7 0 3 3
+7 3 1 2
+8 0 2 2
+14 2 1 2
+14 2 3 2
+1 2 1 1
+3 1 1 0
+14 1 0 1
+13 1 3 1
+7 2 0 2
+6 3 2 2
+14 2 3 2
+1 0 2 0
+3 0 1 1
+7 1 1 3
+7 2 0 0
+7 3 1 2
+7 2 3 0
+14 0 2 0
+1 0 1 1
+7 0 0 3
+14 0 0 0
+13 0 1 0
+10 3 2 2
+14 2 1 2
+1 2 1 1
+3 1 0 0
+14 3 0 2
+13 2 0 2
+7 0 2 1
+7 2 2 3
+10 2 3 1
+14 1 1 1
+1 0 1 0
+3 0 1 1
+14 2 0 0
+13 0 2 0
+7 3 1 2
+7 1 2 3
+8 0 2 0
+14 0 3 0
+1 1 0 1
+3 1 2 2
+7 2 3 1
+7 2 1 3
+7 2 3 0
+11 0 3 1
+14 1 1 1
+1 2 1 2
+3 2 0 1
+14 2 0 2
+13 2 2 2
+14 3 0 0
+13 0 3 0
+7 0 0 3
+6 3 2 2
+14 2 1 2
+1 1 2 1
+7 0 2 0
+7 2 1 2
+7 3 0 0
+14 0 3 0
+1 0 1 1
+3 1 0 3
+7 3 1 0
+7 3 3 2
+14 0 0 1
+13 1 2 1
+8 1 0 0
+14 0 3 0
+1 3 0 3
+3 3 2 1
+7 0 2 0
+7 0 2 3
+7 2 0 2
+6 3 2 2
+14 2 2 2
+14 2 3 2
+1 2 1 1
+3 1 1 0
+7 3 3 1
+7 1 3 3
+7 0 1 2
+9 1 2 1
+14 1 2 1
+1 0 1 0
+3 0 0 3
+7 2 0 1
+7 3 2 0
+9 0 2 2
+14 2 3 2
+1 2 3 3
+14 1 0 2
+13 2 2 2
+7 1 2 1
+12 2 0 1
+14 1 3 1
+14 1 1 1
+1 1 3 3
+3 3 1 2
+7 2 0 0
+7 1 2 3
+7 1 3 1
+4 0 3 1
+14 1 2 1
+14 1 3 1
+1 1 2 2
+7 3 3 1
+7 2 2 3
+12 0 1 0
+14 0 3 0
+1 0 2 2
+3 2 2 1
+7 3 1 2
+7 3 2 0
+0 0 3 2
+14 2 3 2
+1 1 2 1
+3 1 0 0
+7 2 1 2
+7 1 2 1
+15 1 3 2
+14 2 1 2
+14 2 2 2
+1 2 0 0
+3 0 2 1
+7 1 0 3
+7 1 2 2
+7 1 1 0
+1 3 3 2
+14 2 3 2
+14 2 2 2
+1 2 1 1
+3 1 0 2
+7 0 1 0
+7 2 3 1
+1 3 3 0
+14 0 1 0
+1 0 2 2
+3 2 0 0
+7 1 1 1
+7 2 0 3
+7 3 3 2
+15 1 3 3
+14 3 3 3
+1 0 3 0
+7 2 0 2
+7 0 1 3
+7 0 3 1
+6 3 2 1
+14 1 2 1
+14 1 1 1
+1 0 1 0
+3 0 2 3
+7 3 1 2
+7 3 3 0
+7 3 2 1
+7 2 0 2
+14 2 1 2
+1 2 3 3
+7 3 2 2
+7 1 2 1
+9 0 2 0
+14 0 2 0
+14 0 3 0
+1 3 0 3
+3 3 0 1
+7 1 3 3
+14 1 0 0
+13 0 3 0
+7 2 3 2
+12 2 0 3
+14 3 3 3
+1 1 3 1
+3 1 2 0
+7 3 1 2
+7 3 0 1
+7 1 1 3
+14 3 2 3
+14 3 2 3
+14 3 1 3
+1 0 3 0
+3 0 3 1
+7 1 3 3
+7 0 2 2
+7 2 3 0
+4 0 3 2
+14 2 2 2
+1 2 1 1
+7 1 2 0
+7 2 3 3
+7 0 0 2
+10 2 3 3
+14 3 1 3
+1 3 1 1
+7 3 1 3
+7 3 2 0
+2 2 0 2
+14 2 1 2
+14 2 1 2
+1 2 1 1
+14 2 0 0
+13 0 1 0
+7 3 0 2
+7 0 2 3
+7 2 0 0
+14 0 2 0
+1 0 1 1
+3 1 0 3
+14 1 0 0
+13 0 3 0
+7 2 0 2
+7 2 2 1
+8 2 0 1
+14 1 3 1
+14 1 3 1
+1 1 3 3
+3 3 2 2
+7 2 3 0
+7 2 1 3
+7 3 3 1
+0 1 0 3
+14 3 2 3
+14 3 1 3
+1 3 2 2
+3 2 3 1
+7 0 0 2
+7 3 0 0
+7 2 2 3
+9 0 2 0
+14 0 1 0
+1 0 1 1
+7 2 3 2
+7 0 1 3
+7 0 2 0
+5 2 3 2
+14 2 2 2
+1 1 2 1
+3 1 1 2
+7 2 0 1
+5 1 3 1
+14 1 1 1
+1 2 1 2
+3 2 3 1
+7 3 0 3
+7 0 0 2
+14 2 0 0
+13 0 1 0
+14 0 2 0
+14 0 3 0
+1 1 0 1
+3 1 1 3
+7 2 2 1
+7 3 2 0
+8 1 0 1
+14 1 3 1
+1 1 3 3
+3 3 2 1
+14 2 0 3
+13 3 0 3
+14 1 0 0
+13 0 0 0
+14 0 0 2
+13 2 3 2
+10 3 2 2
+14 2 1 2
+14 2 2 2
+1 1 2 1
+3 1 3 2
+7 2 3 0
+14 2 0 3
+13 3 1 3
+7 0 1 1
+1 3 3 1
+14 1 3 1
+1 1 2 2
+3 2 2 1
+14 0 0 2
+13 2 2 2
+7 1 1 0
+7 0 0 3
+3 0 2 0
+14 0 3 0
+1 0 1 1
+3 1 1 2
+7 2 2 3
+7 2 0 0
+7 3 0 1
+5 0 3 0
+14 0 3 0
+1 2 0 2
+7 2 3 0
+14 1 0 3
+13 3 0 3
+14 1 0 1
+13 1 1 1
+15 1 0 3
+14 3 1 3
+1 3 2 2
+3 2 2 1
+7 2 1 2
+14 0 0 3
+13 3 1 3
+7 0 1 0
+7 3 0 0
+14 0 2 0
+1 0 1 1
+3 1 1 2
+7 2 1 3
+7 3 0 1
+7 2 3 0
+11 0 3 3
+14 3 3 3
+1 2 3 2
+3 2 1 1
+7 2 2 3
+7 0 1 2
+14 1 0 0
+13 0 0 0
+10 2 3 2
+14 2 1 2
+14 2 3 2
+1 2 1 1
+7 3 3 0
+7 3 0 3
+7 3 2 2
+9 3 2 2
+14 2 1 2
+1 2 1 1
+3 1 2 2
+14 0 0 1
+13 1 0 1
+7 0 0 3
+7 1 1 0
+13 0 1 0
+14 0 1 0
+14 0 2 0
+1 2 0 2
+14 2 0 0
+13 0 2 0
+7 2 3 3
+11 0 3 1
+14 1 2 1
+1 1 2 2
+3 2 1 1
+7 3 3 3
+7 3 3 2
+2 0 2 3
+14 3 1 3
+14 3 3 3
+1 1 3 1
+3 1 0 3
+7 1 1 2
+7 3 0 1
+12 0 1 1
+14 1 2 1
+1 1 3 3
+3 3 3 1
+14 3 0 2
+13 2 0 2
+7 2 2 3
+11 0 3 3
+14 3 2 3
+1 1 3 1
+3 1 1 2
+7 3 3 1
+7 1 2 3
+4 0 3 3
+14 3 3 3
+14 3 2 3
+1 2 3 2
+3 2 0 0
+7 0 2 2
+14 2 0 3
+13 3 1 3
+1 3 3 1
+14 1 2 1
+14 1 2 1
+1 1 0 0
+3 0 2 2
+7 2 1 0
+7 1 0 1
+15 1 0 1
+14 1 2 1
+14 1 2 1
+1 2 1 2
+3 2 2 1
+7 3 3 3
+7 3 2 2
+8 0 2 0
+14 0 3 0
+1 0 1 1
+7 0 2 2
+7 2 1 3
+14 1 0 0
+13 0 3 0
+2 2 0 0
+14 0 3 0
+14 0 3 0
+1 0 1 1
+3 1 0 2
+7 2 2 0
+7 2 3 1
+11 0 3 0
+14 0 3 0
+14 0 1 0
+1 0 2 2
+3 2 2 3
+7 2 2 0
+7 1 3 2
+14 3 0 1
+13 1 3 1
+12 0 1 0
+14 0 2 0
+14 0 3 0
+1 3 0 3
+3 3 2 0
+7 2 2 2
+7 0 1 3
+6 3 2 3
+14 3 1 3
+1 3 0 0
diff --git a/src/16/part1 b/src/16/part1 new file mode 100644 index 0000000..d0582fd --- /dev/null +++ b/src/16/part1 @@ -0,0 +1,136 @@ +--- Day 16: Chronal Classification --- + +As you see the Elves defend their hot chocolate successfully, you go back to falling through time. +This is going to become a problem. + +If you're ever going to return to your own time, you need to understand how this device on your +wrist works. You have a little while before you reach your next destination, and with a bit of trial +and error, you manage to pull up a programming manual on the device's tiny screen. + +According to the manual, the device has four registers (numbered 0 through 3) that can be +manipulated by instructions containing one of 16 opcodes. The registers start with the value 0. + +Every instruction consists of four values: an [1m[97mopcode[0m, two [1m[97minputs[0m (named A and B), and an +[1m[97moutput[0m (named C), in that order. The opcode specifies the behavior of the instruction and how the +inputs are interpreted. The output, C, is always treated as a register. + +In the opcode descriptions below, if something says "[1m[97mvalue A[0m", it means to take the number given as +A [1m[97mliterally[0m. (This is also called an "immediate" value.) If something says "[1m[97mregister A[0m", it means to +use the number given as A to read from (or write to) the [1m[97mregister with that number[0m. So, if the +opcode addi adds register A and value B, storing the result in register C, and the instruction addi +0 7 3 is encountered, it would add 7 to the value contained by register 0 and store the sum in +register 3, never modifying registers 0, 1, or 2 in the process. + +Many opcodes are similar except for how they interpret their arguments. The opcodes fall into seven +general categories: + +Addition: + + + - addr (add register) stores into register C the result of adding register A and register B. + + - addi (add immediate) stores into register C the result of adding register A and value B. + + +Multiplication: + + + - mulr (multiply register) stores into register C the result of multiplying register A and register +B. + + - muli (multiply immediate) stores into register C the result of multiplying register A and value +B. + + +Bitwise AND: + + + - banr (bitwise AND register) stores into register C the result of the bitwise AND of register A +and register B. + + - bani (bitwise AND immediate) stores into register C the result of the bitwise AND of register A +and value B. + + +Bitwise OR: + + + - borr (bitwise OR register) stores into register C the result of the bitwise OR of register A and +register B. + + - bori (bitwise OR immediate) stores into register C the result of the bitwise OR of register A and +value B. + + +Assignment: + + + - setr (set register) copies the contents of register A into register C. (Input B is ignored.) + + - seti (set immediate) stores value A into register C. (Input B is ignored.) + + +Greater-than testing: + + + - gtir (greater-than immediate/register) sets register C to 1 if value A is greater than register +B. Otherwise, register C is set to 0. + + - gtri (greater-than register/immediate) sets register C to 1 if register A is greater than value +B. Otherwise, register C is set to 0. + + - gtrr (greater-than register/register) sets register C to 1 if register A is greater than register +B. Otherwise, register C is set to 0. + + +Equality testing: + + + - eqir (equal immediate/register) sets register C to 1 if value A is equal to register B. +Otherwise, register C is set to 0. + + - eqri (equal register/immediate) sets register C to 1 if register A is equal to value B. +Otherwise, register C is set to 0. + + - eqrr (equal register/register) sets register C to 1 if register A is equal to register B. +Otherwise, register C is set to 0. + + +Unfortunately, while the manual gives the [1m[97mname[0m of each opcode, it doesn't seem to indicate the +[1m[97mnumber[0m. However, you can monitor the CPU to see the contents of the registers before and after +instructions are executed to try to work them out. Each opcode has a number from 0 through 15, but +the manual doesn't say which is which. For example, suppose you capture the following sample: + +Before: [3, 2, 1, 1] +9 2 1 2 +After: [3, 2, 2, 1] + +This sample shows the effect of the instruction 9 2 1 2 on the registers. Before the instruction is +executed, register 0 has value 3, register 1 has value 2, and registers 2 and 3 have value 1. After +the instruction is executed, register 2's value becomes 2. + +The instruction itself, 9 2 1 2, means that opcode 9 was executed with A=2, B=1, and C=2. Opcode 9 +could be any of the 16 opcodes listed above, but only three of them behave in a way that would cause +the result shown in the sample: + + + - Opcode 9 could be mulr: register 2 (which has a value of 1) times register 1 (which has a value +of 2) produces 2, which matches the value stored in the output register, register 2. + + - Opcode 9 could be addi: register 2 (which has a value of 1) plus value 1 produces 2, which +matches the value stored in the output register, register 2. + + - Opcode 9 could be seti: value 2 matches the value stored in the output register, register 2; the +number given for B is irrelevant. + + +None of the other opcodes produce the result captured in the sample. Because of this, the sample +above [1m[97mbehaves like three opcodes[0m. + +You collect many of these samples (the first section of your puzzle input). The manual also includes +a small test program (the second section of your puzzle input) - you can [1m[97mignore it for now[0m. + +Ignoring the opcode numbers, [1m[97mhow many samples in your puzzle input behave like three or more +opcodes?[0m + + diff --git a/src/16/part2 b/src/16/part2 new file mode 100644 index 0000000..609807e --- /dev/null +++ b/src/16/part2 @@ -0,0 +1,32 @@ +--- Part Two --- + +Now that your FFT is working, you can decode the [1m[97mreal signal[0m. + +The real signal is your puzzle input [1m[97mrepeated 10000 times[0m. Treat this new signal as a single input +list. Patterns are still calculated as before, and 100 phases of FFT are still applied. + +The [1m[97mfirst seven digits[0m of your initial input signal also represent the [1m[97mmessage offset[0m. The message +offset is the location of the eight-digit message in the final output list. Specifically, the +message offset indicates [1m[97mthe number of digits to skip[0m before reading the eight-digit message. For +example, if the first seven digits of your initial input signal were 1234567, the eight-digit +message would be the eight digits after skipping 1,234,567 digits of the final output list. Or, if +the message offset were 7 and your final output list were 98765432109876543210, the eight-digit +message would be 21098765. (Of course, your real message offset will be a seven-digit number, not a +one-digit number like 7.) + +Here is the eight-digit message in the final output list after 100 phases. The message offset given +in each input has been highlighted. (Note that the inputs given below are repeated 10000 times to +find the actual starting input lists.) + + + - [1m[97m0303673[0m2577212944063491565474664 becomes 84462026. + + - [1m[97m0293510[0m9699940807407585447034323 becomes 78725270. + + - [1m[97m0308177[0m0884921959731165446850517 becomes 53553731. + + +After repeating your input signal 10000 times and running 100 phases of FFT, [1m[97mwhat is the eight-digit +message embedded in the final output list?[0m + + diff --git a/src/16/solve.py b/src/16/solve.py new file mode 100644 index 0000000..f9a11b6 --- /dev/null +++ b/src/16/solve.py @@ -0,0 +1,109 @@ +import sys
+sys.path.append("../common")
+import aoc
+
+def parse_log(ls):
+ data = list()
+ before = [int(v) for v in ls[0].split("[")[1].split("]")[0].split(",")]
+ ins = [int(v) for v in ls[1].split(" ")]
+ after = [int(v) for v in ls[2].split("[")[1].split("]")[0].split(",")]
+ return (before, ins, after)
+
+inslog = []
+data = aoc.data.split("\n")
+progsec = None
+for i in range(0, len(data), 4):
+ if data[i] == "\n":
+ progsec = i
+ break
+ inslog.append(parse_log(data[i:i+4]))
+
+register = list()
+
+opmap = dict()
+opmap["addr"] = lambda a, b : register[a] + register[b]
+opmap["addi"] = lambda a, b : register[a] + b
+opmap["mulr"] = lambda a, b : register[a] * register[b]
+opmap["muli"] = lambda a, b : register[a] * b
+opmap["banr"] = lambda a, b : register[a] & register[b]
+opmap["bani"] = lambda a, b : register[a] & b
+opmap["borr"] = lambda a, b : register[a] | register[b]
+opmap["bori"] = lambda a, b : register[a] | b
+opmap["setr"] = lambda a, b : register[a]
+opmap["seti"] = lambda a, b : a
+opmap["gtir"] = lambda a, b : 1 * (a > register[b])
+opmap["gtri"] = lambda a, b : 1 * (register[a] > b)
+opmap["gtrr"] = lambda a, b : 1 * (register[a] > register[b])
+opmap["eqir"] = lambda a, b : 1 * (a == register[b])
+opmap["eqri"] = lambda a, b : 1 * (register[a] == b)
+opmap["eqrr"] = lambda a, b : 1 * (register[a] == register[b])
+
+def get_possible(ins):
+ global register
+ sregister = register[:]
+ before = ins[0]
+ after = ins[2]
+ register = before
+ a = ins[1][1]
+ b = ins[1][2]
+ c = ins[1][3]
+ ops = list(opmap.values())
+ possibles = list()
+ for i in range(len(ops)):
+ op = ops[i]
+ res = None
+ try:
+ res = op(a, b)
+ except:
+ continue
+ if res == after[c]:
+ possibles.append(i)
+ register = sregister
+ return possibles
+
+def solve1(args):
+ global register
+ uncertain = 0
+ for ins in inslog:
+ if len(get_possible(ins)) >= 3:
+ uncertain += 1
+ return uncertain
+
+def solve2(args):
+ possible = dict()
+ for ins in inslog:
+ o = ins[1][0]
+ if o in possible:
+ possible[o] = [op for op in get_possible(ins) if op in possible[o]]
+ else:
+ possible[o] = get_possible(ins)
+
+ certain = False
+ while not certain:
+ singles = [p[0] for p in possible.values() if len(p) == 1]
+ for p in possible:
+ if len(possible[p]) != 1:
+ possible[p] = [v for v in possible[p] if v not in singles]
+
+ certain = True
+ for p in possible.values():
+ if len(p) != 1:
+ certain = False
+ break
+
+ ntrans = dict()
+ for p in possible: # flatten
+ ntrans[p] = possible[p][0]
+
+ for i in range(progsec, len(data)): # execute program
+ l = data[i]
+ if l == "\n": continue
+ cmd = [int(v) for v in l.split(" ")]
+ while len(register)-1 < cmd[3]:
+ register.append(0)
+
+ register[cmd[3]] = list(opmap.values())[ntrans[cmd[0]]](cmd[1], cmd[2])
+
+ return register[0]
+
+aoc.run(solve1, solve2, sols=[531, 649])
|
