aboutsummaryrefslogtreecommitdiffstats
path: root/src/16
diff options
context:
space:
mode:
authorLouis Burda <quent.burda@gmail.com>2023-04-07 17:18:18 -0400
committerLouis Burda <quent.burda@gmail.com>2023-04-07 17:19:39 -0400
commit87ab487d59fa85dbe2afa55cc841b02805ae42ca (patch)
treecd90ab715e1b5b5803674045dbafd6d51d27ac90 /src/16
parent1bcc82c5bfbde87edd03c01ffdf9ee5934681592 (diff)
downloadaoc2018-python-87ab487d59fa85dbe2afa55cc841b02805ae42ca.tar.gz
aoc2018-python-87ab487d59fa85dbe2afa55cc841b02805ae42ca.zip
Reorder days into src
Diffstat (limited to 'src/16')
-rw-r--r--src/16/input4148
-rw-r--r--src/16/part1136
-rw-r--r--src/16/part232
-rw-r--r--src/16/solve.py109
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 opcode, two inputs (named A and B), and an
+output (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 "value A", it means to take the number given as
+A literally. (This is also called an "immediate" value.) If something says "register A", it means to
+use the number given as A to read from (or write to) the register with that number. 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 name of each opcode, it doesn't seem to indicate the
+number. 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 behaves like three opcodes.
+
+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 ignore it for now.
+
+Ignoring the opcode numbers, how many samples in your puzzle input behave like three or more
+opcodes?
+
+
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 real signal.
+
+The real signal is your puzzle input repeated 10000 times. Treat this new signal as a single input
+list. Patterns are still calculated as before, and 100 phases of FFT are still applied.
+
+The first seven digits of your initial input signal also represent the message offset. The message
+offset is the location of the eight-digit message in the final output list. Specifically, the
+message offset indicates the number of digits to skip 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.)
+
+
+ - 03036732577212944063491565474664 becomes 84462026.
+
+ - 02935109699940807407585447034323 becomes 78725270.
+
+ - 03081770884921959731165446850517 becomes 53553731.
+
+
+After repeating your input signal 10000 times and running 100 phases of FFT, what is the eight-digit
+message embedded in the final output list?
+
+
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])