diff --git a/README.md b/README.md index 0fd7332..68fed14 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ Now located in this repository's wiki. | 12 | ~ 1.5 | | 13 | ~ 0.5 | | 14 | 22.3 | -| 15 | | +| 15 | < 1 | | 16 | | | 17 | | | 18 | | diff --git a/app/Main.hs b/app/Main.hs index dd48e62..4168166 100644 --- a/app/Main.hs +++ b/app/Main.hs @@ -30,4 +30,4 @@ import qualified Day24 import qualified Day25 main :: IO () -main = Day14.main +main = Day16.main diff --git a/input/15.txt b/input/15.txt new file mode 100644 index 0000000..76e6f52 --- /dev/null +++ b/input/15.txt @@ -0,0 +1,32 @@ +################################ +################.G#...##...##### +#######..#######..#.G..##..##### +#######....#####........##.##### +######.....#####.....GG.##.##### +######..GG.##.###G.........##### +#####........G####.......####### +######.#..G...####........###### +##########....#####...G...###### +########.......###..........#### +#########...GG####............## +#########....................### +######........#####...E......### +####....G....#######........#### +###.........#########.......#### +#...#.G..G..#########..........# +#..###..#...#########E.E....E### +#..##...#...#########.E...E...## +#.....G.....#########.........## +#......G.G...#######........#### +###..G...#....#####........##### +###########....G........EE..#### +##########...................### +##########...................### +#######.............E....##E#### +#######................######### +########.#.............######### +#######..#####.#......########## +######...#######...##.########## +################..###.########## +###############.......########## +################################ diff --git a/input/16.txt b/input/16.txt new file mode 100644 index 0000000..8f5e2c7 --- /dev/null +++ b/input/16.txt @@ -0,0 +1,4092 @@ +Before: [1, 3, 1, 3] +14 0 3 0 +After: [0, 3, 1, 3] + +Before: [0, 0, 2, 1] +11 0 1 1 +After: [0, 1, 2, 1] + +Before: [2, 1, 2, 1] +0 0 3 3 +After: [2, 1, 2, 3] + +Before: [0, 2, 3, 2] +4 1 1 1 +After: [0, 4, 3, 2] + +Before: [2, 3, 2, 1] +6 1 2 0 +After: [1, 3, 2, 1] + +Before: [2, 3, 0, 2] +6 1 0 2 +After: [2, 3, 1, 2] + +Before: [0, 0, 3, 0] +11 0 1 0 +After: [1, 0, 3, 0] + +Before: [1, 3, 1, 2] +8 1 3 3 +After: [1, 3, 1, 1] + +Before: [1, 1, 1, 2] +15 1 0 0 +After: [1, 1, 1, 2] + +Before: [1, 1, 3, 3] +15 1 0 0 +After: [1, 1, 3, 3] + +Before: [2, 0, 3, 1] +9 3 2 1 +After: [2, 3, 3, 1] + +Before: [0, 1, 2, 3] +2 1 2 0 +After: [3, 1, 2, 3] + +Before: [0, 3, 2, 3] +6 1 2 2 +After: [0, 3, 1, 3] + +Before: [0, 0, 2, 1] +11 0 1 2 +After: [0, 0, 1, 1] + +Before: [3, 3, 1, 3] +12 0 0 2 +After: [3, 3, 9, 3] + +Before: [3, 2, 3, 1] +9 3 2 1 +After: [3, 3, 3, 1] + +Before: [1, 3, 3, 1] +2 0 2 2 +After: [1, 3, 3, 1] + +Before: [0, 0, 3, 1] +5 0 0 3 +After: [0, 0, 3, 0] + +Before: [1, 3, 2, 0] +6 1 2 3 +After: [1, 3, 2, 1] + +Before: [0, 0, 2, 2] +4 2 3 0 +After: [4, 0, 2, 2] + +Before: [2, 3, 0, 2] +8 1 3 1 +After: [2, 1, 0, 2] + +Before: [1, 0, 2, 3] +3 0 3 0 +After: [3, 0, 2, 3] + +Before: [2, 3, 3, 1] +12 0 2 1 +After: [2, 6, 3, 1] + +Before: [1, 2, 3, 3] +3 0 3 2 +After: [1, 2, 3, 3] + +Before: [1, 3, 2, 2] +1 2 0 1 +After: [1, 3, 2, 2] + +Before: [2, 0, 3, 0] +13 1 0 3 +After: [2, 0, 3, 1] + +Before: [1, 1, 0, 3] +14 0 3 3 +After: [1, 1, 0, 0] + +Before: [1, 2, 3, 0] +4 1 1 3 +After: [1, 2, 3, 4] + +Before: [0, 1, 3, 2] +9 3 1 3 +After: [0, 1, 3, 3] + +Before: [0, 3, 3, 1] +9 3 2 1 +After: [0, 3, 3, 1] + +Before: [1, 1, 3, 0] +15 1 0 3 +After: [1, 1, 3, 1] + +Before: [0, 1, 2, 1] +7 1 0 3 +After: [0, 1, 2, 1] + +Before: [0, 0, 2, 0] +11 0 1 3 +After: [0, 0, 2, 1] + +Before: [1, 2, 3, 3] +14 0 3 0 +After: [0, 2, 3, 3] + +Before: [2, 1, 1, 2] +1 1 0 3 +After: [2, 1, 1, 3] + +Before: [3, 3, 1, 2] +8 1 3 3 +After: [3, 3, 1, 1] + +Before: [0, 1, 1, 2] +5 0 0 1 +After: [0, 0, 1, 2] + +Before: [3, 2, 1, 1] +0 1 3 0 +After: [3, 2, 1, 1] + +Before: [1, 1, 1, 2] +3 2 3 1 +After: [1, 3, 1, 2] + +Before: [0, 0, 1, 3] +5 0 0 3 +After: [0, 0, 1, 0] + +Before: [1, 0, 3, 0] +10 1 0 0 +After: [1, 0, 3, 0] + +Before: [1, 3, 3, 3] +14 0 3 2 +After: [1, 3, 0, 3] + +Before: [2, 0, 3, 1] +13 1 0 2 +After: [2, 0, 1, 1] + +Before: [2, 1, 2, 2] +9 3 1 0 +After: [3, 1, 2, 2] + +Before: [0, 0, 3, 3] +11 0 1 3 +After: [0, 0, 3, 1] + +Before: [0, 0, 2, 1] +9 3 2 1 +After: [0, 3, 2, 1] + +Before: [1, 1, 2, 0] +15 1 0 1 +After: [1, 1, 2, 0] + +Before: [0, 1, 1, 1] +7 1 0 2 +After: [0, 1, 1, 1] + +Before: [3, 0, 1, 2] +13 1 0 0 +After: [1, 0, 1, 2] + +Before: [1, 1, 0, 3] +14 0 3 1 +After: [1, 0, 0, 3] + +Before: [1, 1, 1, 3] +3 1 3 1 +After: [1, 3, 1, 3] + +Before: [3, 2, 1, 0] +1 2 1 3 +After: [3, 2, 1, 3] + +Before: [1, 3, 2, 3] +1 2 0 3 +After: [1, 3, 2, 3] + +Before: [1, 2, 0, 1] +0 1 3 0 +After: [3, 2, 0, 1] + +Before: [1, 1, 3, 2] +15 1 0 1 +After: [1, 1, 3, 2] + +Before: [0, 1, 0, 2] +7 1 0 2 +After: [0, 1, 1, 2] + +Before: [3, 3, 1, 2] +8 1 3 0 +After: [1, 3, 1, 2] + +Before: [2, 3, 1, 2] +6 1 0 2 +After: [2, 3, 1, 2] + +Before: [1, 1, 3, 2] +15 1 0 3 +After: [1, 1, 3, 1] + +Before: [1, 2, 1, 1] +4 1 1 0 +After: [4, 2, 1, 1] + +Before: [1, 1, 2, 2] +15 1 0 3 +After: [1, 1, 2, 1] + +Before: [3, 0, 0, 2] +4 3 3 0 +After: [4, 0, 0, 2] + +Before: [2, 0, 3, 3] +1 1 0 3 +After: [2, 0, 3, 2] + +Before: [2, 3, 2, 1] +6 1 0 3 +After: [2, 3, 2, 1] + +Before: [0, 0, 3, 0] +5 0 0 2 +After: [0, 0, 0, 0] + +Before: [0, 1, 3, 1] +5 0 0 2 +After: [0, 1, 0, 1] + +Before: [1, 3, 2, 2] +6 1 2 2 +After: [1, 3, 1, 2] + +Before: [0, 3, 3, 2] +12 3 1 2 +After: [0, 3, 6, 2] + +Before: [3, 3, 1, 0] +12 0 0 2 +After: [3, 3, 9, 0] + +Before: [2, 3, 2, 0] +6 1 2 2 +After: [2, 3, 1, 0] + +Before: [0, 0, 0, 2] +11 0 1 0 +After: [1, 0, 0, 2] + +Before: [0, 0, 3, 1] +5 0 0 0 +After: [0, 0, 3, 1] + +Before: [1, 2, 0, 1] +0 1 3 1 +After: [1, 3, 0, 1] + +Before: [1, 0, 1, 3] +14 0 3 3 +After: [1, 0, 1, 0] + +Before: [1, 0, 3, 2] +10 1 0 2 +After: [1, 0, 1, 2] + +Before: [0, 2, 2, 0] +5 0 0 3 +After: [0, 2, 2, 0] + +Before: [1, 2, 2, 2] +4 2 3 0 +After: [4, 2, 2, 2] + +Before: [2, 2, 1, 1] +4 0 0 0 +After: [4, 2, 1, 1] + +Before: [1, 1, 2, 3] +3 0 3 0 +After: [3, 1, 2, 3] + +Before: [1, 1, 2, 2] +3 1 3 3 +After: [1, 1, 2, 3] + +Before: [1, 1, 0, 3] +15 1 0 0 +After: [1, 1, 0, 3] + +Before: [2, 2, 1, 3] +14 0 3 3 +After: [2, 2, 1, 0] + +Before: [3, 3, 0, 0] +12 0 1 1 +After: [3, 9, 0, 0] + +Before: [1, 3, 3, 3] +14 0 3 0 +After: [0, 3, 3, 3] + +Before: [3, 3, 2, 2] +6 1 2 2 +After: [3, 3, 1, 2] + +Before: [2, 1, 0, 3] +14 0 3 3 +After: [2, 1, 0, 0] + +Before: [0, 3, 3, 1] +5 0 0 2 +After: [0, 3, 0, 1] + +Before: [3, 3, 3, 2] +8 1 3 0 +After: [1, 3, 3, 2] + +Before: [2, 1, 2, 2] +1 1 0 3 +After: [2, 1, 2, 3] + +Before: [1, 2, 1, 2] +3 2 3 2 +After: [1, 2, 3, 2] + +Before: [0, 1, 2, 3] +5 0 0 2 +After: [0, 1, 0, 3] + +Before: [3, 0, 0, 3] +13 1 0 3 +After: [3, 0, 0, 1] + +Before: [2, 3, 1, 1] +6 1 0 2 +After: [2, 3, 1, 1] + +Before: [1, 0, 3, 0] +10 1 0 1 +After: [1, 1, 3, 0] + +Before: [3, 1, 2, 3] +3 1 3 3 +After: [3, 1, 2, 3] + +Before: [1, 1, 2, 2] +15 1 0 1 +After: [1, 1, 2, 2] + +Before: [0, 2, 0, 0] +1 0 1 3 +After: [0, 2, 0, 2] + +Before: [2, 0, 3, 3] +2 1 3 0 +After: [3, 0, 3, 3] + +Before: [3, 1, 3, 1] +9 3 2 3 +After: [3, 1, 3, 3] + +Before: [2, 3, 0, 2] +12 1 0 0 +After: [6, 3, 0, 2] + +Before: [2, 3, 2, 1] +0 0 3 2 +After: [2, 3, 3, 1] + +Before: [1, 0, 1, 3] +3 2 3 3 +After: [1, 0, 1, 3] + +Before: [0, 3, 0, 2] +8 1 3 1 +After: [0, 1, 0, 2] + +Before: [0, 1, 3, 1] +1 0 2 2 +After: [0, 1, 3, 1] + +Before: [0, 1, 1, 2] +9 3 1 3 +After: [0, 1, 1, 3] + +Before: [0, 0, 3, 3] +2 1 3 1 +After: [0, 3, 3, 3] + +Before: [2, 3, 3, 0] +6 1 0 0 +After: [1, 3, 3, 0] + +Before: [0, 1, 3, 2] +7 1 0 0 +After: [1, 1, 3, 2] + +Before: [1, 0, 3, 3] +14 0 3 3 +After: [1, 0, 3, 0] + +Before: [1, 1, 1, 1] +15 1 0 2 +After: [1, 1, 1, 1] + +Before: [2, 0, 3, 1] +0 0 3 0 +After: [3, 0, 3, 1] + +Before: [2, 2, 1, 0] +1 2 1 2 +After: [2, 2, 3, 0] + +Before: [2, 1, 0, 1] +0 0 3 2 +After: [2, 1, 3, 1] + +Before: [1, 3, 0, 2] +8 1 3 3 +After: [1, 3, 0, 1] + +Before: [1, 0, 1, 2] +10 1 0 0 +After: [1, 0, 1, 2] + +Before: [1, 2, 2, 1] +0 1 3 2 +After: [1, 2, 3, 1] + +Before: [3, 1, 1, 3] +3 1 3 1 +After: [3, 3, 1, 3] + +Before: [1, 0, 3, 1] +10 1 0 1 +After: [1, 1, 3, 1] + +Before: [1, 0, 2, 2] +2 1 2 2 +After: [1, 0, 2, 2] + +Before: [1, 0, 1, 3] +14 0 3 0 +After: [0, 0, 1, 3] + +Before: [1, 3, 3, 2] +8 1 3 1 +After: [1, 1, 3, 2] + +Before: [1, 0, 1, 2] +10 1 0 2 +After: [1, 0, 1, 2] + +Before: [2, 3, 2, 0] +6 1 0 1 +After: [2, 1, 2, 0] + +Before: [2, 3, 2, 2] +6 1 0 2 +After: [2, 3, 1, 2] + +Before: [2, 0, 0, 1] +13 1 0 0 +After: [1, 0, 0, 1] + +Before: [2, 2, 1, 0] +4 0 0 1 +After: [2, 4, 1, 0] + +Before: [1, 0, 2, 3] +2 1 2 2 +After: [1, 0, 2, 3] + +Before: [0, 1, 0, 3] +7 1 0 0 +After: [1, 1, 0, 3] + +Before: [3, 0, 3, 2] +13 1 0 3 +After: [3, 0, 3, 1] + +Before: [1, 0, 0, 1] +10 1 0 2 +After: [1, 0, 1, 1] + +Before: [0, 0, 0, 0] +11 0 1 0 +After: [1, 0, 0, 0] + +Before: [3, 2, 1, 0] +1 2 0 0 +After: [3, 2, 1, 0] + +Before: [3, 0, 2, 1] +0 2 3 0 +After: [3, 0, 2, 1] + +Before: [0, 0, 3, 1] +9 3 2 0 +After: [3, 0, 3, 1] + +Before: [1, 1, 0, 2] +3 1 3 1 +After: [1, 3, 0, 2] + +Before: [1, 2, 3, 1] +13 1 2 0 +After: [1, 2, 3, 1] + +Before: [0, 0, 3, 1] +5 0 0 1 +After: [0, 0, 3, 1] + +Before: [0, 1, 3, 2] +5 0 0 1 +After: [0, 0, 3, 2] + +Before: [0, 2, 1, 1] +0 1 3 3 +After: [0, 2, 1, 3] + +Before: [0, 1, 0, 0] +7 1 0 0 +After: [1, 1, 0, 0] + +Before: [3, 0, 1, 2] +13 1 0 1 +After: [3, 1, 1, 2] + +Before: [3, 3, 2, 2] +6 1 2 3 +After: [3, 3, 2, 1] + +Before: [3, 0, 1, 2] +3 2 3 1 +After: [3, 3, 1, 2] + +Before: [0, 1, 3, 1] +7 1 0 0 +After: [1, 1, 3, 1] + +Before: [2, 0, 2, 3] +1 1 0 3 +After: [2, 0, 2, 2] + +Before: [0, 3, 3, 1] +9 3 2 2 +After: [0, 3, 3, 1] + +Before: [1, 0, 0, 2] +10 1 0 0 +After: [1, 0, 0, 2] + +Before: [2, 3, 0, 2] +8 1 3 3 +After: [2, 3, 0, 1] + +Before: [1, 1, 3, 1] +15 1 0 1 +After: [1, 1, 3, 1] + +Before: [1, 1, 2, 3] +15 1 0 1 +After: [1, 1, 2, 3] + +Before: [3, 1, 1, 3] +1 2 0 0 +After: [3, 1, 1, 3] + +Before: [2, 1, 1, 1] +1 1 0 3 +After: [2, 1, 1, 3] + +Before: [2, 0, 1, 1] +0 0 3 2 +After: [2, 0, 3, 1] + +Before: [2, 0, 2, 0] +4 2 0 2 +After: [2, 0, 4, 0] + +Before: [3, 0, 1, 2] +13 1 0 2 +After: [3, 0, 1, 2] + +Before: [1, 0, 1, 3] +14 0 3 1 +After: [1, 0, 1, 3] + +Before: [1, 3, 3, 2] +2 0 2 1 +After: [1, 3, 3, 2] + +Before: [1, 0, 2, 3] +2 1 3 1 +After: [1, 3, 2, 3] + +Before: [3, 2, 3, 2] +4 3 1 2 +After: [3, 2, 4, 2] + +Before: [0, 3, 0, 2] +8 1 3 3 +After: [0, 3, 0, 1] + +Before: [1, 0, 0, 3] +10 1 0 2 +After: [1, 0, 1, 3] + +Before: [0, 1, 3, 2] +7 1 0 2 +After: [0, 1, 1, 2] + +Before: [0, 0, 2, 1] +0 2 3 0 +After: [3, 0, 2, 1] + +Before: [1, 0, 1, 3] +3 0 3 2 +After: [1, 0, 3, 3] + +Before: [2, 3, 2, 2] +6 1 2 0 +After: [1, 3, 2, 2] + +Before: [1, 1, 0, 3] +15 1 0 1 +After: [1, 1, 0, 3] + +Before: [0, 0, 3, 0] +5 0 0 3 +After: [0, 0, 3, 0] + +Before: [1, 1, 1, 2] +9 3 1 3 +After: [1, 1, 1, 3] + +Before: [2, 2, 0, 3] +4 0 0 1 +After: [2, 4, 0, 3] + +Before: [2, 3, 3, 0] +12 2 0 3 +After: [2, 3, 3, 6] + +Before: [1, 3, 2, 1] +12 1 1 1 +After: [1, 9, 2, 1] + +Before: [1, 2, 3, 2] +13 1 2 2 +After: [1, 2, 1, 2] + +Before: [1, 2, 3, 2] +3 0 3 3 +After: [1, 2, 3, 3] + +Before: [3, 3, 0, 2] +8 1 3 3 +After: [3, 3, 0, 1] + +Before: [2, 3, 0, 1] +4 0 0 3 +After: [2, 3, 0, 4] + +Before: [2, 2, 0, 3] +14 0 3 1 +After: [2, 0, 0, 3] + +Before: [2, 0, 1, 1] +13 1 0 0 +After: [1, 0, 1, 1] + +Before: [2, 3, 2, 3] +6 1 2 3 +After: [2, 3, 2, 1] + +Before: [3, 0, 0, 0] +13 1 0 1 +After: [3, 1, 0, 0] + +Before: [0, 3, 3, 3] +5 0 0 3 +After: [0, 3, 3, 0] + +Before: [0, 3, 2, 1] +6 1 2 3 +After: [0, 3, 2, 1] + +Before: [0, 0, 2, 2] +5 0 0 3 +After: [0, 0, 2, 0] + +Before: [0, 1, 0, 3] +7 1 0 3 +After: [0, 1, 0, 1] + +Before: [0, 2, 3, 1] +5 0 0 3 +After: [0, 2, 3, 0] + +Before: [1, 2, 0, 2] +12 0 3 1 +After: [1, 2, 0, 2] + +Before: [2, 3, 3, 1] +6 1 0 3 +After: [2, 3, 3, 1] + +Before: [0, 2, 0, 0] +5 0 0 1 +After: [0, 0, 0, 0] + +Before: [1, 3, 0, 2] +3 0 3 0 +After: [3, 3, 0, 2] + +Before: [0, 1, 3, 3] +5 0 0 3 +After: [0, 1, 3, 0] + +Before: [0, 0, 1, 0] +11 0 1 3 +After: [0, 0, 1, 1] + +Before: [3, 0, 3, 1] +1 1 0 0 +After: [3, 0, 3, 1] + +Before: [3, 0, 2, 3] +2 1 2 3 +After: [3, 0, 2, 2] + +Before: [1, 1, 3, 0] +15 1 0 1 +After: [1, 1, 3, 0] + +Before: [2, 1, 3, 2] +4 0 0 3 +After: [2, 1, 3, 4] + +Before: [0, 0, 2, 1] +5 0 0 2 +After: [0, 0, 0, 1] + +Before: [2, 0, 3, 3] +14 0 3 1 +After: [2, 0, 3, 3] + +Before: [3, 1, 3, 2] +9 3 1 1 +After: [3, 3, 3, 2] + +Before: [2, 3, 0, 2] +8 1 3 0 +After: [1, 3, 0, 2] + +Before: [3, 2, 0, 1] +12 0 0 3 +After: [3, 2, 0, 9] + +Before: [3, 0, 0, 3] +2 2 3 1 +After: [3, 3, 0, 3] + +Before: [3, 0, 3, 1] +9 3 2 2 +After: [3, 0, 3, 1] + +Before: [3, 2, 0, 2] +12 0 0 2 +After: [3, 2, 9, 2] + +Before: [2, 3, 2, 1] +6 1 2 3 +After: [2, 3, 2, 1] + +Before: [1, 2, 1, 2] +4 1 1 0 +After: [4, 2, 1, 2] + +Before: [0, 3, 1, 3] +1 2 1 0 +After: [3, 3, 1, 3] + +Before: [2, 2, 2, 0] +2 1 2 3 +After: [2, 2, 2, 4] + +Before: [0, 1, 3, 1] +5 0 0 0 +After: [0, 1, 3, 1] + +Before: [3, 3, 2, 2] +8 1 3 0 +After: [1, 3, 2, 2] + +Before: [1, 3, 0, 2] +1 2 1 2 +After: [1, 3, 3, 2] + +Before: [1, 0, 1, 0] +10 1 0 3 +After: [1, 0, 1, 1] + +Before: [0, 0, 0, 3] +11 0 1 3 +After: [0, 0, 0, 1] + +Before: [1, 1, 0, 3] +15 1 0 3 +After: [1, 1, 0, 1] + +Before: [0, 1, 3, 2] +3 1 3 2 +After: [0, 1, 3, 2] + +Before: [0, 0, 1, 0] +5 0 0 2 +After: [0, 0, 0, 0] + +Before: [1, 0, 2, 2] +10 1 0 2 +After: [1, 0, 1, 2] + +Before: [1, 3, 2, 3] +14 0 3 1 +After: [1, 0, 2, 3] + +Before: [2, 2, 3, 0] +13 1 2 3 +After: [2, 2, 3, 1] + +Before: [1, 0, 1, 3] +10 1 0 3 +After: [1, 0, 1, 1] + +Before: [0, 2, 3, 0] +13 1 2 1 +After: [0, 1, 3, 0] + +Before: [1, 2, 1, 2] +4 3 1 0 +After: [4, 2, 1, 2] + +Before: [1, 0, 2, 0] +2 0 2 2 +After: [1, 0, 3, 0] + +Before: [0, 1, 0, 2] +7 1 0 0 +After: [1, 1, 0, 2] + +Before: [1, 2, 2, 3] +2 2 2 3 +After: [1, 2, 2, 4] + +Before: [1, 1, 1, 1] +15 1 0 1 +After: [1, 1, 1, 1] + +Before: [2, 1, 2, 0] +2 2 1 0 +After: [3, 1, 2, 0] + +Before: [1, 1, 3, 1] +15 1 0 2 +After: [1, 1, 1, 1] + +Before: [2, 3, 1, 3] +1 2 1 1 +After: [2, 3, 1, 3] + +Before: [0, 1, 1, 0] +7 1 0 0 +After: [1, 1, 1, 0] + +Before: [0, 1, 1, 1] +1 0 3 2 +After: [0, 1, 1, 1] + +Before: [1, 3, 3, 2] +8 1 3 3 +After: [1, 3, 3, 1] + +Before: [0, 1, 3, 3] +7 1 0 0 +After: [1, 1, 3, 3] + +Before: [1, 1, 0, 2] +15 1 0 3 +After: [1, 1, 0, 1] + +Before: [1, 3, 2, 1] +9 3 2 0 +After: [3, 3, 2, 1] + +Before: [1, 1, 1, 3] +15 1 0 3 +After: [1, 1, 1, 1] + +Before: [2, 0, 0, 1] +0 0 3 1 +After: [2, 3, 0, 1] + +Before: [2, 2, 2, 1] +0 0 3 1 +After: [2, 3, 2, 1] + +Before: [1, 2, 2, 1] +0 2 3 2 +After: [1, 2, 3, 1] + +Before: [1, 3, 2, 1] +2 2 2 2 +After: [1, 3, 4, 1] + +Before: [0, 1, 2, 0] +7 1 0 1 +After: [0, 1, 2, 0] + +Before: [3, 1, 2, 1] +0 2 3 3 +After: [3, 1, 2, 3] + +Before: [0, 0, 0, 3] +11 0 1 0 +After: [1, 0, 0, 3] + +Before: [2, 1, 2, 3] +4 2 0 3 +After: [2, 1, 2, 4] + +Before: [0, 1, 1, 3] +7 1 0 3 +After: [0, 1, 1, 1] + +Before: [3, 3, 0, 2] +8 1 3 2 +After: [3, 3, 1, 2] + +Before: [0, 1, 1, 2] +2 0 1 1 +After: [0, 1, 1, 2] + +Before: [1, 1, 3, 2] +15 1 0 2 +After: [1, 1, 1, 2] + +Before: [1, 1, 0, 3] +14 0 3 0 +After: [0, 1, 0, 3] + +Before: [0, 1, 2, 1] +7 1 0 2 +After: [0, 1, 1, 1] + +Before: [0, 3, 0, 2] +4 3 3 0 +After: [4, 3, 0, 2] + +Before: [2, 0, 2, 1] +0 0 3 1 +After: [2, 3, 2, 1] + +Before: [3, 3, 1, 2] +12 0 0 3 +After: [3, 3, 1, 9] + +Before: [3, 3, 2, 2] +8 1 3 3 +After: [3, 3, 2, 1] + +Before: [1, 3, 0, 3] +12 3 1 0 +After: [9, 3, 0, 3] + +Before: [1, 2, 3, 3] +13 1 2 0 +After: [1, 2, 3, 3] + +Before: [3, 3, 3, 0] +12 2 2 0 +After: [9, 3, 3, 0] + +Before: [2, 0, 2, 1] +9 3 2 2 +After: [2, 0, 3, 1] + +Before: [1, 2, 2, 2] +3 0 3 2 +After: [1, 2, 3, 2] + +Before: [1, 0, 0, 1] +10 1 0 3 +After: [1, 0, 0, 1] + +Before: [0, 1, 2, 1] +0 2 3 2 +After: [0, 1, 3, 1] + +Before: [1, 0, 2, 2] +2 1 2 1 +After: [1, 2, 2, 2] + +Before: [1, 0, 2, 1] +0 2 3 0 +After: [3, 0, 2, 1] + +Before: [0, 0, 1, 2] +11 0 1 0 +After: [1, 0, 1, 2] + +Before: [1, 1, 3, 3] +14 0 3 1 +After: [1, 0, 3, 3] + +Before: [2, 1, 3, 0] +1 3 0 0 +After: [2, 1, 3, 0] + +Before: [1, 3, 1, 3] +1 2 1 2 +After: [1, 3, 3, 3] + +Before: [3, 1, 2, 3] +1 1 0 1 +After: [3, 3, 2, 3] + +Before: [0, 1, 1, 3] +7 1 0 0 +After: [1, 1, 1, 3] + +Before: [0, 1, 2, 1] +7 1 0 0 +After: [1, 1, 2, 1] + +Before: [1, 1, 1, 0] +15 1 0 2 +After: [1, 1, 1, 0] + +Before: [2, 2, 0, 1] +0 1 3 1 +After: [2, 3, 0, 1] + +Before: [3, 0, 3, 0] +12 2 2 2 +After: [3, 0, 9, 0] + +Before: [2, 1, 3, 3] +14 0 3 3 +After: [2, 1, 3, 0] + +Before: [3, 3, 2, 0] +12 0 1 1 +After: [3, 9, 2, 0] + +Before: [1, 1, 0, 3] +15 1 0 2 +After: [1, 1, 1, 3] + +Before: [1, 1, 0, 0] +15 1 0 3 +After: [1, 1, 0, 1] + +Before: [0, 2, 2, 3] +12 3 1 2 +After: [0, 2, 6, 3] + +Before: [1, 1, 3, 1] +9 3 2 0 +After: [3, 1, 3, 1] + +Before: [1, 2, 3, 1] +13 1 2 2 +After: [1, 2, 1, 1] + +Before: [2, 0, 2, 3] +13 1 0 1 +After: [2, 1, 2, 3] + +Before: [0, 2, 1, 0] +5 0 0 2 +After: [0, 2, 0, 0] + +Before: [0, 1, 0, 1] +7 1 0 3 +After: [0, 1, 0, 1] + +Before: [0, 1, 1, 2] +7 1 0 1 +After: [0, 1, 1, 2] + +Before: [2, 1, 0, 2] +3 1 3 0 +After: [3, 1, 0, 2] + +Before: [2, 1, 0, 1] +0 0 3 0 +After: [3, 1, 0, 1] + +Before: [1, 1, 1, 2] +12 0 3 0 +After: [2, 1, 1, 2] + +Before: [0, 3, 2, 2] +6 1 2 1 +After: [0, 1, 2, 2] + +Before: [2, 1, 2, 2] +4 3 0 2 +After: [2, 1, 4, 2] + +Before: [1, 3, 1, 2] +8 1 3 2 +After: [1, 3, 1, 2] + +Before: [2, 1, 0, 2] +4 0 3 1 +After: [2, 4, 0, 2] + +Before: [0, 1, 2, 3] +5 0 0 1 +After: [0, 0, 2, 3] + +Before: [1, 1, 3, 3] +15 1 0 1 +After: [1, 1, 3, 3] + +Before: [2, 1, 3, 1] +9 3 2 1 +After: [2, 3, 3, 1] + +Before: [2, 3, 2, 0] +6 1 2 3 +After: [2, 3, 2, 1] + +Before: [3, 2, 1, 3] +3 2 3 2 +After: [3, 2, 3, 3] + +Before: [2, 3, 2, 0] +6 1 0 0 +After: [1, 3, 2, 0] + +Before: [2, 3, 1, 1] +6 1 0 0 +After: [1, 3, 1, 1] + +Before: [0, 1, 1, 3] +3 2 3 3 +After: [0, 1, 1, 3] + +Before: [0, 2, 3, 2] +5 0 0 3 +After: [0, 2, 3, 0] + +Before: [2, 2, 3, 1] +0 1 3 3 +After: [2, 2, 3, 3] + +Before: [0, 2, 2, 1] +0 1 3 3 +After: [0, 2, 2, 3] + +Before: [1, 2, 3, 1] +0 1 3 0 +After: [3, 2, 3, 1] + +Before: [1, 3, 2, 1] +9 3 2 2 +After: [1, 3, 3, 1] + +Before: [1, 0, 3, 2] +3 0 3 2 +After: [1, 0, 3, 2] + +Before: [2, 1, 2, 1] +0 0 3 0 +After: [3, 1, 2, 1] + +Before: [2, 3, 2, 2] +8 1 3 0 +After: [1, 3, 2, 2] + +Before: [0, 1, 2, 3] +7 1 0 1 +After: [0, 1, 2, 3] + +Before: [2, 1, 1, 2] +3 1 3 3 +After: [2, 1, 1, 3] + +Before: [2, 1, 0, 3] +14 0 3 0 +After: [0, 1, 0, 3] + +Before: [3, 2, 3, 1] +0 1 3 2 +After: [3, 2, 3, 1] + +Before: [2, 2, 3, 3] +14 0 3 2 +After: [2, 2, 0, 3] + +Before: [1, 1, 2, 2] +9 3 1 1 +After: [1, 3, 2, 2] + +Before: [0, 1, 3, 1] +7 1 0 3 +After: [0, 1, 3, 1] + +Before: [1, 0, 3, 0] +10 1 0 2 +After: [1, 0, 1, 0] + +Before: [1, 3, 3, 3] +14 0 3 1 +After: [1, 0, 3, 3] + +Before: [0, 2, 3, 1] +9 3 2 2 +After: [0, 2, 3, 1] + +Before: [2, 3, 3, 3] +6 1 0 1 +After: [2, 1, 3, 3] + +Before: [3, 1, 0, 0] +1 1 0 0 +After: [3, 1, 0, 0] + +Before: [1, 3, 0, 2] +8 1 3 2 +After: [1, 3, 1, 2] + +Before: [3, 3, 2, 2] +8 1 3 2 +After: [3, 3, 1, 2] + +Before: [1, 3, 1, 2] +8 1 3 0 +After: [1, 3, 1, 2] + +Before: [0, 0, 2, 0] +11 0 1 0 +After: [1, 0, 2, 0] + +Before: [1, 1, 0, 1] +15 1 0 0 +After: [1, 1, 0, 1] + +Before: [1, 2, 3, 1] +13 1 2 3 +After: [1, 2, 3, 1] + +Before: [3, 0, 3, 1] +13 1 0 2 +After: [3, 0, 1, 1] + +Before: [2, 0, 2, 3] +14 0 3 0 +After: [0, 0, 2, 3] + +Before: [3, 3, 3, 2] +8 1 3 3 +After: [3, 3, 3, 1] + +Before: [2, 3, 1, 0] +6 1 0 1 +After: [2, 1, 1, 0] + +Before: [1, 1, 2, 3] +14 0 3 2 +After: [1, 1, 0, 3] + +Before: [2, 3, 1, 3] +14 0 3 0 +After: [0, 3, 1, 3] + +Before: [3, 1, 2, 2] +9 3 1 1 +After: [3, 3, 2, 2] + +Before: [0, 0, 0, 2] +11 0 1 3 +After: [0, 0, 0, 1] + +Before: [1, 1, 0, 2] +9 3 1 0 +After: [3, 1, 0, 2] + +Before: [0, 0, 3, 2] +11 0 1 1 +After: [0, 1, 3, 2] + +Before: [2, 2, 1, 3] +1 2 1 0 +After: [3, 2, 1, 3] + +Before: [1, 1, 2, 1] +2 0 2 0 +After: [3, 1, 2, 1] + +Before: [0, 1, 2, 2] +7 1 0 2 +After: [0, 1, 1, 2] + +Before: [0, 1, 1, 0] +1 0 2 1 +After: [0, 1, 1, 0] + +Before: [0, 0, 1, 0] +11 0 1 1 +After: [0, 1, 1, 0] + +Before: [2, 1, 1, 3] +4 0 0 3 +After: [2, 1, 1, 4] + +Before: [3, 3, 2, 2] +12 2 0 3 +After: [3, 3, 2, 6] + +Before: [1, 0, 3, 1] +10 1 0 2 +After: [1, 0, 1, 1] + +Before: [1, 1, 3, 3] +3 1 3 2 +After: [1, 1, 3, 3] + +Before: [1, 2, 0, 3] +3 0 3 2 +After: [1, 2, 3, 3] + +Before: [0, 1, 3, 3] +7 1 0 2 +After: [0, 1, 1, 3] + +Before: [3, 3, 3, 0] +12 2 1 3 +After: [3, 3, 3, 9] + +Before: [3, 3, 0, 2] +8 1 3 0 +After: [1, 3, 0, 2] + +Before: [2, 1, 3, 2] +2 1 2 3 +After: [2, 1, 3, 3] + +Before: [2, 3, 2, 1] +9 3 2 2 +After: [2, 3, 3, 1] + +Before: [1, 1, 1, 2] +15 1 0 2 +After: [1, 1, 1, 2] + +Before: [3, 3, 1, 1] +12 1 0 1 +After: [3, 9, 1, 1] + +Before: [2, 3, 2, 2] +6 1 2 2 +After: [2, 3, 1, 2] + +Before: [1, 1, 3, 3] +15 1 0 3 +After: [1, 1, 3, 1] + +Before: [2, 2, 2, 1] +9 3 2 0 +After: [3, 2, 2, 1] + +Before: [3, 3, 3, 2] +8 1 3 2 +After: [3, 3, 1, 2] + +Before: [2, 1, 1, 2] +3 1 3 1 +After: [2, 3, 1, 2] + +Before: [0, 0, 0, 3] +11 0 1 1 +After: [0, 1, 0, 3] + +Before: [3, 2, 3, 2] +13 1 2 3 +After: [3, 2, 3, 1] + +Before: [1, 3, 2, 1] +6 1 2 2 +After: [1, 3, 1, 1] + +Before: [3, 2, 3, 1] +9 3 2 2 +After: [3, 2, 3, 1] + +Before: [0, 0, 2, 2] +11 0 1 1 +After: [0, 1, 2, 2] + +Before: [1, 1, 1, 2] +15 1 0 3 +After: [1, 1, 1, 1] + +Before: [1, 0, 0, 0] +10 1 0 0 +After: [1, 0, 0, 0] + +Before: [0, 1, 1, 1] +5 0 0 2 +After: [0, 1, 0, 1] + +Before: [0, 0, 0, 2] +5 0 0 3 +After: [0, 0, 0, 0] + +Before: [0, 0, 0, 2] +11 0 1 2 +After: [0, 0, 1, 2] + +Before: [0, 1, 1, 2] +7 1 0 0 +After: [1, 1, 1, 2] + +Before: [1, 2, 0, 2] +4 3 3 0 +After: [4, 2, 0, 2] + +Before: [2, 3, 3, 1] +12 0 2 3 +After: [2, 3, 3, 6] + +Before: [2, 2, 2, 0] +2 0 2 1 +After: [2, 4, 2, 0] + +Before: [0, 0, 3, 1] +11 0 1 3 +After: [0, 0, 3, 1] + +Before: [3, 3, 1, 2] +8 1 3 1 +After: [3, 1, 1, 2] + +Before: [1, 2, 2, 1] +9 3 2 0 +After: [3, 2, 2, 1] + +Before: [0, 3, 1, 2] +8 1 3 0 +After: [1, 3, 1, 2] + +Before: [1, 2, 0, 3] +14 0 3 3 +After: [1, 2, 0, 0] + +Before: [0, 0, 0, 1] +11 0 1 3 +After: [0, 0, 0, 1] + +Before: [2, 3, 0, 1] +12 3 0 1 +After: [2, 2, 0, 1] + +Before: [2, 3, 1, 3] +6 1 0 0 +After: [1, 3, 1, 3] + +Before: [2, 1, 2, 2] +1 1 0 1 +After: [2, 3, 2, 2] + +Before: [3, 3, 0, 2] +8 1 3 1 +After: [3, 1, 0, 2] + +Before: [2, 3, 2, 3] +6 1 0 1 +After: [2, 1, 2, 3] + +Before: [0, 3, 2, 1] +9 3 2 3 +After: [0, 3, 2, 3] + +Before: [0, 3, 0, 2] +5 0 0 3 +After: [0, 3, 0, 0] + +Before: [0, 2, 3, 2] +13 1 2 3 +After: [0, 2, 3, 1] + +Before: [0, 1, 0, 0] +7 1 0 1 +After: [0, 1, 0, 0] + +Before: [2, 3, 2, 3] +12 1 0 2 +After: [2, 3, 6, 3] + +Before: [0, 1, 3, 1] +7 1 0 2 +After: [0, 1, 1, 1] + +Before: [2, 3, 3, 2] +12 3 2 1 +After: [2, 6, 3, 2] + +Before: [2, 3, 3, 1] +9 3 2 0 +After: [3, 3, 3, 1] + +Before: [2, 1, 2, 1] +0 2 3 0 +After: [3, 1, 2, 1] + +Before: [2, 0, 1, 1] +0 0 3 0 +After: [3, 0, 1, 1] + +Before: [0, 1, 2, 3] +7 1 0 2 +After: [0, 1, 1, 3] + +Before: [0, 0, 1, 2] +3 2 3 1 +After: [0, 3, 1, 2] + +Before: [2, 0, 3, 1] +13 1 0 0 +After: [1, 0, 3, 1] + +Before: [2, 3, 2, 2] +8 1 3 1 +After: [2, 1, 2, 2] + +Before: [2, 3, 1, 2] +4 3 3 0 +After: [4, 3, 1, 2] + +Before: [2, 0, 1, 1] +0 0 3 3 +After: [2, 0, 1, 3] + +Before: [0, 3, 0, 0] +5 0 0 1 +After: [0, 0, 0, 0] + +Before: [1, 1, 0, 2] +15 1 0 1 +After: [1, 1, 0, 2] + +Before: [1, 3, 1, 3] +3 2 3 3 +After: [1, 3, 1, 3] + +Before: [0, 0, 2, 1] +5 0 0 3 +After: [0, 0, 2, 0] + +Before: [2, 3, 1, 1] +6 1 0 1 +After: [2, 1, 1, 1] + +Before: [3, 3, 2, 2] +8 1 3 1 +After: [3, 1, 2, 2] + +Before: [1, 0, 0, 2] +10 1 0 1 +After: [1, 1, 0, 2] + +Before: [2, 1, 0, 3] +3 1 3 0 +After: [3, 1, 0, 3] + +Before: [2, 0, 1, 3] +14 0 3 3 +After: [2, 0, 1, 0] + +Before: [0, 1, 0, 0] +7 1 0 2 +After: [0, 1, 1, 0] + +Before: [2, 1, 3, 2] +12 2 0 3 +After: [2, 1, 3, 6] + +Before: [2, 1, 3, 2] +4 3 0 2 +After: [2, 1, 4, 2] + +Before: [0, 0, 1, 3] +11 0 1 1 +After: [0, 1, 1, 3] + +Before: [1, 1, 1, 3] +15 1 0 1 +After: [1, 1, 1, 3] + +Before: [0, 1, 2, 1] +1 0 3 3 +After: [0, 1, 2, 1] + +Before: [2, 3, 3, 2] +8 1 3 1 +After: [2, 1, 3, 2] + +Before: [0, 3, 3, 2] +8 1 3 1 +After: [0, 1, 3, 2] + +Before: [1, 0, 1, 3] +14 0 3 2 +After: [1, 0, 0, 3] + +Before: [3, 0, 2, 3] +12 3 0 0 +After: [9, 0, 2, 3] + +Before: [0, 2, 2, 0] +5 0 0 2 +After: [0, 2, 0, 0] + +Before: [0, 1, 1, 1] +1 0 2 3 +After: [0, 1, 1, 1] + +Before: [2, 0, 2, 3] +2 1 3 3 +After: [2, 0, 2, 3] + +Before: [1, 2, 3, 3] +13 1 2 2 +After: [1, 2, 1, 3] + +Before: [0, 1, 0, 1] +5 0 0 2 +After: [0, 1, 0, 1] + +Before: [1, 1, 0, 0] +15 1 0 0 +After: [1, 1, 0, 0] + +Before: [0, 1, 3, 0] +7 1 0 0 +After: [1, 1, 3, 0] + +Before: [1, 0, 2, 0] +10 1 0 0 +After: [1, 0, 2, 0] + +Before: [1, 0, 0, 3] +10 1 0 3 +After: [1, 0, 0, 1] + +Before: [2, 3, 1, 2] +8 1 3 1 +After: [2, 1, 1, 2] + +Before: [1, 2, 2, 2] +3 0 3 0 +After: [3, 2, 2, 2] + +Before: [1, 3, 2, 0] +6 1 2 1 +After: [1, 1, 2, 0] + +Before: [1, 0, 3, 1] +10 1 0 3 +After: [1, 0, 3, 1] + +Before: [0, 1, 2, 0] +7 1 0 3 +After: [0, 1, 2, 1] + +Before: [2, 0, 1, 0] +13 1 0 0 +After: [1, 0, 1, 0] + +Before: [1, 0, 0, 3] +14 0 3 3 +After: [1, 0, 0, 0] + +Before: [0, 1, 3, 3] +3 1 3 3 +After: [0, 1, 3, 3] + +Before: [3, 2, 2, 2] +4 2 3 1 +After: [3, 4, 2, 2] + +Before: [1, 0, 2, 0] +10 1 0 3 +After: [1, 0, 2, 1] + +Before: [0, 0, 1, 0] +11 0 1 0 +After: [1, 0, 1, 0] + +Before: [0, 1, 0, 1] +7 1 0 1 +After: [0, 1, 0, 1] + +Before: [0, 3, 1, 0] +12 1 1 2 +After: [0, 3, 9, 0] + +Before: [0, 1, 1, 1] +7 1 0 3 +After: [0, 1, 1, 1] + +Before: [1, 0, 2, 0] +10 1 0 2 +After: [1, 0, 1, 0] + +Before: [0, 1, 3, 3] +5 0 0 2 +After: [0, 1, 0, 3] + +Before: [1, 1, 2, 1] +2 1 2 3 +After: [1, 1, 2, 3] + +Before: [0, 0, 0, 0] +11 0 1 2 +After: [0, 0, 1, 0] + +Before: [1, 1, 2, 0] +15 1 0 0 +After: [1, 1, 2, 0] + +Before: [1, 0, 1, 3] +10 1 0 2 +After: [1, 0, 1, 3] + +Before: [2, 3, 0, 0] +6 1 0 1 +After: [2, 1, 0, 0] + +Before: [0, 0, 0, 3] +11 0 1 2 +After: [0, 0, 1, 3] + +Before: [3, 2, 3, 1] +12 2 0 1 +After: [3, 9, 3, 1] + +Before: [1, 2, 1, 0] +4 1 1 0 +After: [4, 2, 1, 0] + +Before: [1, 0, 3, 3] +14 0 3 1 +After: [1, 0, 3, 3] + +Before: [0, 1, 0, 1] +7 1 0 0 +After: [1, 1, 0, 1] + +Before: [1, 3, 2, 2] +8 1 3 2 +After: [1, 3, 1, 2] + +Before: [0, 2, 1, 0] +5 0 0 0 +After: [0, 2, 1, 0] + +Before: [1, 3, 2, 1] +9 3 2 1 +After: [1, 3, 2, 1] + +Before: [1, 1, 1, 1] +15 1 0 0 +After: [1, 1, 1, 1] + +Before: [2, 2, 2, 1] +0 0 3 0 +After: [3, 2, 2, 1] + +Before: [1, 3, 2, 2] +6 1 2 1 +After: [1, 1, 2, 2] + +Before: [0, 1, 1, 0] +7 1 0 1 +After: [0, 1, 1, 0] + +Before: [1, 0, 0, 1] +10 1 0 0 +After: [1, 0, 0, 1] + +Before: [1, 1, 0, 2] +9 3 1 1 +After: [1, 3, 0, 2] + +Before: [2, 0, 3, 2] +13 1 0 2 +After: [2, 0, 1, 2] + +Before: [0, 2, 0, 3] +5 0 0 0 +After: [0, 2, 0, 3] + +Before: [2, 0, 2, 0] +2 0 2 1 +After: [2, 4, 2, 0] + +Before: [1, 1, 1, 0] +15 1 0 0 +After: [1, 1, 1, 0] + +Before: [2, 0, 2, 3] +14 0 3 1 +After: [2, 0, 2, 3] + +Before: [0, 1, 1, 1] +7 1 0 0 +After: [1, 1, 1, 1] + +Before: [1, 3, 2, 3] +6 1 2 2 +After: [1, 3, 1, 3] + +Before: [1, 3, 0, 2] +8 1 3 0 +After: [1, 3, 0, 2] + +Before: [1, 3, 1, 2] +8 1 3 1 +After: [1, 1, 1, 2] + +Before: [1, 0, 2, 3] +10 1 0 1 +After: [1, 1, 2, 3] + +Before: [1, 0, 0, 2] +10 1 0 2 +After: [1, 0, 1, 2] + +Before: [2, 2, 1, 1] +0 0 3 3 +After: [2, 2, 1, 3] + +Before: [0, 3, 3, 3] +5 0 0 1 +After: [0, 0, 3, 3] + +Before: [0, 3, 2, 2] +8 1 3 2 +After: [0, 3, 1, 2] + +Before: [0, 1, 0, 3] +7 1 0 1 +After: [0, 1, 0, 3] + +Before: [2, 2, 3, 3] +4 1 0 3 +After: [2, 2, 3, 4] + +Before: [2, 0, 3, 1] +12 3 0 0 +After: [2, 0, 3, 1] + +Before: [1, 1, 0, 1] +15 1 0 3 +After: [1, 1, 0, 1] + +Before: [0, 1, 3, 0] +7 1 0 1 +After: [0, 1, 3, 0] + +Before: [1, 2, 2, 3] +2 0 2 0 +After: [3, 2, 2, 3] + +Before: [0, 2, 1, 2] +3 2 3 0 +After: [3, 2, 1, 2] + +Before: [0, 3, 3, 2] +5 0 0 2 +After: [0, 3, 0, 2] + +Before: [2, 1, 0, 1] +0 0 3 3 +After: [2, 1, 0, 3] + +Before: [2, 3, 0, 3] +14 0 3 3 +After: [2, 3, 0, 0] + +Before: [0, 1, 2, 3] +7 1 0 0 +After: [1, 1, 2, 3] + +Before: [0, 2, 1, 1] +5 0 0 3 +After: [0, 2, 1, 0] + +Before: [1, 1, 0, 2] +3 0 3 2 +After: [1, 1, 3, 2] + +Before: [2, 3, 1, 1] +6 1 0 3 +After: [2, 3, 1, 1] + +Before: [0, 1, 3, 0] +12 2 2 3 +After: [0, 1, 3, 9] + +Before: [1, 0, 0, 0] +10 1 0 3 +After: [1, 0, 0, 1] + +Before: [2, 1, 2, 3] +2 2 1 1 +After: [2, 3, 2, 3] + +Before: [2, 3, 3, 2] +8 1 3 3 +After: [2, 3, 3, 1] + +Before: [0, 1, 0, 3] +5 0 0 1 +After: [0, 0, 0, 3] + +Before: [3, 2, 0, 0] +1 3 1 0 +After: [2, 2, 0, 0] + +Before: [0, 3, 0, 2] +8 1 3 2 +After: [0, 3, 1, 2] + +Before: [0, 1, 3, 3] +7 1 0 1 +After: [0, 1, 3, 3] + +Before: [0, 0, 0, 0] +5 0 0 0 +After: [0, 0, 0, 0] + +Before: [2, 2, 0, 0] +4 0 1 2 +After: [2, 2, 4, 0] + +Before: [2, 1, 3, 1] +9 3 2 0 +After: [3, 1, 3, 1] + +Before: [0, 3, 0, 2] +8 1 3 0 +After: [1, 3, 0, 2] + +Before: [1, 3, 2, 1] +6 1 2 3 +After: [1, 3, 2, 1] + +Before: [3, 0, 2, 1] +13 1 0 3 +After: [3, 0, 2, 1] + +Before: [0, 3, 2, 2] +5 0 0 1 +After: [0, 0, 2, 2] + +Before: [1, 3, 2, 3] +6 1 2 1 +After: [1, 1, 2, 3] + +Before: [1, 0, 0, 3] +10 1 0 1 +After: [1, 1, 0, 3] + +Before: [0, 1, 2, 0] +7 1 0 0 +After: [1, 1, 2, 0] + +Before: [3, 3, 3, 1] +9 3 2 1 +After: [3, 3, 3, 1] + +Before: [3, 3, 3, 1] +9 3 2 3 +After: [3, 3, 3, 3] + +Before: [0, 2, 1, 3] +5 0 0 0 +After: [0, 2, 1, 3] + +Before: [3, 2, 2, 2] +12 3 0 2 +After: [3, 2, 6, 2] + +Before: [2, 3, 2, 2] +8 1 3 3 +After: [2, 3, 2, 1] + +Before: [2, 3, 1, 3] +14 0 3 3 +After: [2, 3, 1, 0] + +Before: [2, 3, 3, 1] +0 0 3 0 +After: [3, 3, 3, 1] + +Before: [3, 3, 2, 1] +9 3 2 3 +After: [3, 3, 2, 3] + +Before: [2, 3, 1, 1] +1 2 0 1 +After: [2, 3, 1, 1] + +Before: [2, 2, 2, 1] +9 3 2 3 +After: [2, 2, 2, 3] + +Before: [0, 0, 2, 0] +11 0 1 1 +After: [0, 1, 2, 0] + +Before: [2, 1, 2, 3] +3 1 3 3 +After: [2, 1, 2, 3] + +Before: [1, 1, 3, 3] +15 1 0 2 +After: [1, 1, 1, 3] + +Before: [0, 1, 2, 3] +7 1 0 3 +After: [0, 1, 2, 1] + +Before: [0, 1, 2, 2] +7 1 0 0 +After: [1, 1, 2, 2] + +Before: [1, 2, 1, 1] +4 1 1 3 +After: [1, 2, 1, 4] + +Before: [0, 3, 1, 2] +8 1 3 1 +After: [0, 1, 1, 2] + +Before: [2, 0, 2, 1] +9 3 2 0 +After: [3, 0, 2, 1] + +Before: [3, 1, 1, 3] +3 2 3 2 +After: [3, 1, 3, 3] + +Before: [0, 3, 0, 1] +5 0 0 1 +After: [0, 0, 0, 1] + +Before: [1, 1, 2, 2] +15 1 0 0 +After: [1, 1, 2, 2] + +Before: [1, 1, 2, 1] +15 1 0 0 +After: [1, 1, 2, 1] + +Before: [1, 0, 3, 2] +10 1 0 3 +After: [1, 0, 3, 1] + +Before: [0, 2, 2, 0] +2 0 2 0 +After: [2, 2, 2, 0] + +Before: [0, 3, 2, 2] +8 1 3 1 +After: [0, 1, 2, 2] + +Before: [2, 3, 3, 0] +12 2 1 1 +After: [2, 9, 3, 0] + +Before: [0, 3, 2, 2] +6 1 2 3 +After: [0, 3, 2, 1] + +Before: [2, 2, 0, 1] +0 1 3 0 +After: [3, 2, 0, 1] + +Before: [2, 0, 2, 0] +2 2 2 2 +After: [2, 0, 4, 0] + +Before: [3, 2, 2, 1] +0 1 3 0 +After: [3, 2, 2, 1] + +Before: [0, 1, 0, 2] +9 3 1 3 +After: [0, 1, 0, 3] + +Before: [0, 0, 3, 3] +11 0 1 1 +After: [0, 1, 3, 3] + +Before: [0, 0, 2, 3] +11 0 1 3 +After: [0, 0, 2, 1] + +Before: [0, 1, 3, 0] +5 0 0 3 +After: [0, 1, 3, 0] + +Before: [0, 1, 0, 1] +7 1 0 2 +After: [0, 1, 1, 1] + +Before: [1, 0, 3, 3] +10 1 0 1 +After: [1, 1, 3, 3] + +Before: [0, 0, 0, 1] +11 0 1 1 +After: [0, 1, 0, 1] + +Before: [0, 0, 1, 0] +5 0 0 0 +After: [0, 0, 1, 0] + +Before: [1, 3, 0, 2] +8 1 3 1 +After: [1, 1, 0, 2] + +Before: [1, 0, 2, 1] +10 1 0 1 +After: [1, 1, 2, 1] + +Before: [2, 0, 2, 2] +4 3 0 3 +After: [2, 0, 2, 4] + +Before: [2, 3, 1, 2] +8 1 3 2 +After: [2, 3, 1, 2] + +Before: [0, 2, 2, 1] +4 2 1 0 +After: [4, 2, 2, 1] + +Before: [0, 3, 3, 2] +8 1 3 3 +After: [0, 3, 3, 1] + +Before: [2, 0, 3, 2] +13 1 0 1 +After: [2, 1, 3, 2] + +Before: [2, 3, 0, 0] +6 1 0 3 +After: [2, 3, 0, 1] + +Before: [1, 2, 3, 3] +12 2 2 2 +After: [1, 2, 9, 3] + +Before: [0, 2, 3, 0] +1 3 1 0 +After: [2, 2, 3, 0] + +Before: [0, 1, 0, 2] +7 1 0 1 +After: [0, 1, 0, 2] + +Before: [3, 1, 1, 3] +3 2 3 1 +After: [3, 3, 1, 3] + +Before: [0, 1, 1, 2] +7 1 0 2 +After: [0, 1, 1, 2] + +Before: [2, 2, 1, 1] +1 0 2 0 +After: [3, 2, 1, 1] + +Before: [0, 0, 0, 0] +5 0 0 2 +After: [0, 0, 0, 0] + +Before: [3, 0, 3, 1] +9 3 2 1 +After: [3, 3, 3, 1] + +Before: [2, 2, 3, 3] +13 1 2 3 +After: [2, 2, 3, 1] + +Before: [1, 0, 2, 2] +10 1 0 1 +After: [1, 1, 2, 2] + +Before: [1, 2, 2, 0] +1 1 0 2 +After: [1, 2, 3, 0] + +Before: [2, 0, 3, 3] +12 2 2 3 +After: [2, 0, 3, 9] + +Before: [1, 1, 2, 0] +15 1 0 3 +After: [1, 1, 2, 1] + +Before: [2, 2, 1, 1] +0 0 3 2 +After: [2, 2, 3, 1] + +Before: [1, 0, 1, 2] +10 1 0 3 +After: [1, 0, 1, 1] + +Before: [1, 3, 3, 2] +8 1 3 0 +After: [1, 3, 3, 2] + +Before: [0, 2, 1, 2] +1 1 2 1 +After: [0, 3, 1, 2] + +Before: [0, 0, 3, 1] +11 0 1 2 +After: [0, 0, 1, 1] + +Before: [2, 1, 1, 2] +9 3 1 3 +After: [2, 1, 1, 3] + +Before: [0, 2, 3, 0] +13 1 2 0 +After: [1, 2, 3, 0] + +Before: [1, 2, 1, 1] +0 1 3 0 +After: [3, 2, 1, 1] + +Before: [0, 1, 2, 0] +7 1 0 2 +After: [0, 1, 1, 0] + +Before: [2, 3, 0, 3] +6 1 0 0 +After: [1, 3, 0, 3] + +Before: [3, 0, 3, 0] +12 2 0 3 +After: [3, 0, 3, 9] + +Before: [0, 3, 2, 3] +5 0 0 1 +After: [0, 0, 2, 3] + +Before: [0, 3, 3, 2] +5 0 0 0 +After: [0, 3, 3, 2] + +Before: [1, 1, 1, 0] +15 1 0 1 +After: [1, 1, 1, 0] + +Before: [1, 1, 2, 2] +3 0 3 1 +After: [1, 3, 2, 2] + +Before: [2, 2, 1, 0] +1 2 0 2 +After: [2, 2, 3, 0] + +Before: [0, 0, 0, 1] +5 0 0 2 +After: [0, 0, 0, 1] + +Before: [0, 1, 3, 0] +7 1 0 3 +After: [0, 1, 3, 1] + +Before: [2, 0, 0, 3] +13 1 0 3 +After: [2, 0, 0, 1] + +Before: [0, 1, 1, 0] +7 1 0 2 +After: [0, 1, 1, 0] + +Before: [0, 1, 2, 2] +2 3 2 1 +After: [0, 4, 2, 2] + +Before: [3, 1, 2, 1] +2 2 1 0 +After: [3, 1, 2, 1] + +Before: [3, 0, 2, 2] +2 3 2 2 +After: [3, 0, 4, 2] + +Before: [1, 0, 0, 3] +3 0 3 2 +After: [1, 0, 3, 3] + +Before: [2, 2, 3, 3] +14 0 3 0 +After: [0, 2, 3, 3] + +Before: [2, 2, 2, 1] +0 0 3 2 +After: [2, 2, 3, 1] + +Before: [2, 3, 0, 1] +0 0 3 2 +After: [2, 3, 3, 1] + +Before: [0, 0, 1, 3] +11 0 1 3 +After: [0, 0, 1, 1] + +Before: [3, 2, 2, 1] +4 1 1 0 +After: [4, 2, 2, 1] + +Before: [0, 2, 1, 1] +1 2 1 2 +After: [0, 2, 3, 1] + +Before: [0, 1, 3, 1] +7 1 0 1 +After: [0, 1, 3, 1] + +Before: [2, 0, 0, 2] +13 1 0 3 +After: [2, 0, 0, 1] + +Before: [1, 1, 2, 1] +15 1 0 3 +After: [1, 1, 2, 1] + +Before: [0, 3, 2, 2] +6 1 2 2 +After: [0, 3, 1, 2] + +Before: [3, 1, 3, 1] +1 1 0 1 +After: [3, 3, 3, 1] + +Before: [0, 3, 2, 2] +8 1 3 3 +After: [0, 3, 2, 1] + +Before: [1, 1, 0, 2] +15 1 0 0 +After: [1, 1, 0, 2] + +Before: [0, 1, 1, 3] +7 1 0 1 +After: [0, 1, 1, 3] + +Before: [2, 1, 1, 2] +1 0 2 1 +After: [2, 3, 1, 2] + +Before: [1, 1, 1, 3] +15 1 0 0 +After: [1, 1, 1, 3] + +Before: [2, 0, 0, 3] +13 1 0 1 +After: [2, 1, 0, 3] + +Before: [1, 0, 1, 1] +10 1 0 2 +After: [1, 0, 1, 1] + +Before: [2, 0, 2, 1] +13 1 0 2 +After: [2, 0, 1, 1] + +Before: [0, 0, 0, 1] +11 0 1 0 +After: [1, 0, 0, 1] + +Before: [0, 2, 0, 3] +5 0 0 1 +After: [0, 0, 0, 3] + +Before: [0, 3, 2, 0] +6 1 2 1 +After: [0, 1, 2, 0] + +Before: [0, 3, 2, 3] +5 0 0 0 +After: [0, 3, 2, 3] + +Before: [2, 3, 2, 1] +6 1 0 0 +After: [1, 3, 2, 1] + +Before: [0, 1, 2, 2] +7 1 0 1 +After: [0, 1, 2, 2] + +Before: [1, 3, 2, 1] +1 0 1 0 +After: [3, 3, 2, 1] + +Before: [0, 0, 1, 1] +11 0 1 3 +After: [0, 0, 1, 1] + +Before: [3, 1, 2, 3] +2 1 2 0 +After: [3, 1, 2, 3] + +Before: [3, 3, 2, 3] +6 1 2 3 +After: [3, 3, 2, 1] + +Before: [0, 0, 1, 0] +11 0 1 2 +After: [0, 0, 1, 0] + +Before: [0, 1, 0, 3] +7 1 0 2 +After: [0, 1, 1, 3] + +Before: [1, 0, 2, 3] +10 1 0 2 +After: [1, 0, 1, 3] + +Before: [1, 2, 0, 2] +1 0 1 0 +After: [3, 2, 0, 2] + +Before: [0, 2, 1, 1] +0 1 3 0 +After: [3, 2, 1, 1] + +Before: [1, 2, 0, 3] +2 2 3 1 +After: [1, 3, 0, 3] + +Before: [0, 2, 2, 1] +0 2 3 0 +After: [3, 2, 2, 1] + +Before: [0, 1, 1, 1] +7 1 0 1 +After: [0, 1, 1, 1] + +Before: [1, 0, 2, 3] +10 1 0 3 +After: [1, 0, 2, 1] + +Before: [0, 2, 3, 3] +4 1 1 1 +After: [0, 4, 3, 3] + +Before: [0, 0, 2, 2] +4 2 3 3 +After: [0, 0, 2, 4] + +Before: [0, 0, 3, 3] +5 0 0 3 +After: [0, 0, 3, 0] + +Before: [0, 0, 3, 0] +11 0 1 1 +After: [0, 1, 3, 0] + +Before: [1, 1, 1, 2] +15 1 0 1 +After: [1, 1, 1, 2] + +Before: [1, 1, 1, 1] +15 1 0 3 +After: [1, 1, 1, 1] + +Before: [3, 2, 3, 2] +4 1 3 1 +After: [3, 4, 3, 2] + +Before: [2, 1, 1, 1] +0 0 3 3 +After: [2, 1, 1, 3] + +Before: [0, 2, 3, 1] +9 3 2 0 +After: [3, 2, 3, 1] + +Before: [1, 2, 3, 0] +1 0 1 1 +After: [1, 3, 3, 0] + +Before: [1, 0, 2, 2] +10 1 0 0 +After: [1, 0, 2, 2] + +Before: [3, 2, 2, 2] +4 3 3 3 +After: [3, 2, 2, 4] + +Before: [0, 0, 0, 1] +11 0 1 2 +After: [0, 0, 1, 1] + +Before: [1, 2, 3, 1] +9 3 2 2 +After: [1, 2, 3, 1] + +Before: [2, 3, 3, 1] +9 3 2 1 +After: [2, 3, 3, 1] + +Before: [1, 1, 0, 0] +15 1 0 2 +After: [1, 1, 1, 0] + +Before: [0, 0, 3, 3] +11 0 1 0 +After: [1, 0, 3, 3] + +Before: [0, 0, 3, 1] +5 0 0 2 +After: [0, 0, 0, 1] + +Before: [3, 2, 0, 2] +4 3 3 1 +After: [3, 4, 0, 2] + +Before: [0, 1, 2, 1] +2 0 2 3 +After: [0, 1, 2, 2] + +Before: [1, 0, 0, 2] +10 1 0 3 +After: [1, 0, 0, 1] + +Before: [3, 3, 3, 1] +9 3 2 0 +After: [3, 3, 3, 1] + +Before: [1, 1, 2, 1] +9 3 2 1 +After: [1, 3, 2, 1] + +Before: [0, 0, 1, 0] +5 0 0 1 +After: [0, 0, 1, 0] + +Before: [0, 3, 2, 1] +9 3 2 1 +After: [0, 3, 2, 1] + +Before: [0, 1, 1, 3] +5 0 0 0 +After: [0, 1, 1, 3] + +Before: [1, 0, 1, 2] +10 1 0 1 +After: [1, 1, 1, 2] + +Before: [3, 3, 1, 2] +8 1 3 2 +After: [3, 3, 1, 2] + +Before: [0, 3, 3, 2] +8 1 3 0 +After: [1, 3, 3, 2] + +Before: [2, 1, 2, 1] +2 1 2 2 +After: [2, 1, 3, 1] + +Before: [3, 2, 3, 3] +13 1 2 3 +After: [3, 2, 3, 1] + +Before: [0, 0, 3, 2] +11 0 1 3 +After: [0, 0, 3, 1] + +Before: [1, 0, 2, 2] +10 1 0 3 +After: [1, 0, 2, 1] + +Before: [3, 1, 1, 2] +9 3 1 3 +After: [3, 1, 1, 3] + +Before: [0, 0, 2, 3] +11 0 1 1 +After: [0, 1, 2, 3] + +Before: [3, 0, 1, 3] +13 1 0 3 +After: [3, 0, 1, 1] + +Before: [0, 2, 1, 1] +0 1 3 2 +After: [0, 2, 3, 1] + +Before: [1, 2, 2, 2] +3 0 3 1 +After: [1, 3, 2, 2] + +Before: [0, 0, 1, 3] +11 0 1 2 +After: [0, 0, 1, 3] + +Before: [1, 1, 1, 2] +3 0 3 0 +After: [3, 1, 1, 2] + +Before: [2, 2, 3, 1] +4 0 0 1 +After: [2, 4, 3, 1] + +Before: [0, 1, 3, 3] +12 2 2 2 +After: [0, 1, 9, 3] + +Before: [2, 1, 1, 1] +0 0 3 2 +After: [2, 1, 3, 1] + +Before: [1, 1, 2, 3] +15 1 0 3 +After: [1, 1, 2, 1] + +Before: [0, 0, 0, 2] +5 0 0 1 +After: [0, 0, 0, 2] + +Before: [2, 0, 3, 0] +1 1 0 0 +After: [2, 0, 3, 0] + +Before: [1, 2, 3, 0] +1 0 1 0 +After: [3, 2, 3, 0] + +Before: [0, 3, 1, 2] +8 1 3 2 +After: [0, 3, 1, 2] + +Before: [3, 0, 2, 1] +13 1 0 2 +After: [3, 0, 1, 1] + +Before: [1, 3, 2, 2] +8 1 3 0 +After: [1, 3, 2, 2] + +Before: [1, 2, 0, 2] +4 3 1 2 +After: [1, 2, 4, 2] + +Before: [1, 2, 1, 2] +3 0 3 3 +After: [1, 2, 1, 3] + +Before: [2, 0, 1, 1] +13 1 0 2 +After: [2, 0, 1, 1] + +Before: [1, 3, 2, 2] +8 1 3 3 +After: [1, 3, 2, 1] + +Before: [1, 1, 0, 2] +15 1 0 2 +After: [1, 1, 1, 2] + +Before: [3, 3, 3, 3] +12 2 0 0 +After: [9, 3, 3, 3] + +Before: [0, 0, 1, 1] +11 0 1 2 +After: [0, 0, 1, 1] + +Before: [2, 1, 1, 3] +14 0 3 1 +After: [2, 0, 1, 3] + +Before: [0, 1, 1, 0] +7 1 0 3 +After: [0, 1, 1, 1] + +Before: [2, 3, 1, 2] +4 3 3 3 +After: [2, 3, 1, 4] + +Before: [0, 1, 3, 3] +1 0 2 3 +After: [0, 1, 3, 3] + +Before: [1, 1, 2, 1] +15 1 0 1 +After: [1, 1, 2, 1] + +Before: [0, 1, 3, 2] +7 1 0 3 +After: [0, 1, 3, 1] + +Before: [2, 1, 1, 1] +12 3 0 3 +After: [2, 1, 1, 2] + +Before: [1, 2, 2, 1] +0 1 3 3 +After: [1, 2, 2, 3] + +Before: [3, 2, 3, 2] +13 1 2 1 +After: [3, 1, 3, 2] + +Before: [0, 3, 2, 0] +6 1 2 2 +After: [0, 3, 1, 0] + +Before: [2, 1, 0, 2] +12 1 0 3 +After: [2, 1, 0, 2] + +Before: [3, 3, 3, 2] +12 2 0 0 +After: [9, 3, 3, 2] + +Before: [0, 0, 0, 0] +11 0 1 3 +After: [0, 0, 0, 1] + +Before: [0, 0, 3, 2] +11 0 1 2 +After: [0, 0, 1, 2] + +Before: [0, 0, 1, 2] +1 1 3 2 +After: [0, 0, 2, 2] + +Before: [2, 3, 0, 1] +6 1 0 1 +After: [2, 1, 0, 1] + +Before: [2, 2, 2, 3] +14 0 3 3 +After: [2, 2, 2, 0] + +Before: [0, 3, 2, 1] +0 2 3 2 +After: [0, 3, 3, 1] + +Before: [2, 2, 2, 0] +2 3 2 2 +After: [2, 2, 2, 0] + +Before: [3, 0, 2, 1] +0 2 3 1 +After: [3, 3, 2, 1] + +Before: [1, 2, 1, 3] +14 0 3 3 +After: [1, 2, 1, 0] + +Before: [3, 0, 3, 1] +13 1 0 1 +After: [3, 1, 3, 1] + +Before: [3, 3, 0, 2] +4 3 3 0 +After: [4, 3, 0, 2] + +Before: [0, 0, 1, 1] +11 0 1 0 +After: [1, 0, 1, 1] + +Before: [1, 1, 1, 2] +9 3 1 2 +After: [1, 1, 3, 2] + +Before: [2, 0, 3, 3] +14 0 3 0 +After: [0, 0, 3, 3] + +Before: [1, 0, 3, 1] +10 1 0 0 +After: [1, 0, 3, 1] + +Before: [1, 1, 3, 1] +15 1 0 0 +After: [1, 1, 3, 1] + +Before: [2, 3, 3, 2] +12 2 2 3 +After: [2, 3, 3, 9] + +Before: [0, 1, 3, 2] +7 1 0 1 +After: [0, 1, 3, 2] + +Before: [2, 2, 0, 3] +14 0 3 2 +After: [2, 2, 0, 3] + +Before: [0, 0, 0, 0] +11 0 1 1 +After: [0, 1, 0, 0] + +Before: [0, 2, 1, 1] +1 0 2 2 +After: [0, 2, 1, 1] + +Before: [0, 1, 0, 0] +7 1 0 3 +After: [0, 1, 0, 1] + +Before: [1, 1, 0, 1] +15 1 0 1 +After: [1, 1, 0, 1] + +Before: [0, 2, 0, 0] +4 1 1 0 +After: [4, 2, 0, 0] + +Before: [2, 3, 2, 0] +6 1 0 3 +After: [2, 3, 2, 1] + +Before: [1, 1, 1, 3] +15 1 0 2 +After: [1, 1, 1, 3] + +Before: [2, 3, 3, 1] +6 1 0 2 +After: [2, 3, 1, 1] + +Before: [0, 3, 2, 0] +2 0 2 2 +After: [0, 3, 2, 0] + +Before: [0, 0, 1, 2] +11 0 1 1 +After: [0, 1, 1, 2] + +Before: [1, 1, 2, 2] +15 1 0 2 +After: [1, 1, 1, 2] + +Before: [3, 1, 0, 2] +1 2 0 2 +After: [3, 1, 3, 2] + +Before: [0, 3, 1, 2] +8 1 3 3 +After: [0, 3, 1, 1] + +Before: [1, 3, 3, 2] +8 1 3 2 +After: [1, 3, 1, 2] + +Before: [2, 1, 2, 2] +2 0 1 0 +After: [3, 1, 2, 2] + +Before: [1, 3, 3, 1] +2 0 2 3 +After: [1, 3, 3, 3] + +Before: [1, 1, 2, 2] +9 3 1 3 +After: [1, 1, 2, 3] + +Before: [2, 2, 3, 2] +13 1 2 3 +After: [2, 2, 3, 1] + +Before: [1, 1, 0, 0] +15 1 0 1 +After: [1, 1, 0, 0] + +Before: [0, 2, 2, 1] +5 0 0 2 +After: [0, 2, 0, 1] + +Before: [2, 0, 1, 3] +14 0 3 2 +After: [2, 0, 0, 3] + +Before: [2, 3, 2, 2] +8 1 3 2 +After: [2, 3, 1, 2] + +Before: [1, 0, 3, 0] +10 1 0 3 +After: [1, 0, 3, 1] + +Before: [1, 0, 3, 3] +10 1 0 0 +After: [1, 0, 3, 3] + +Before: [2, 2, 3, 0] +4 1 1 0 +After: [4, 2, 3, 0] + +Before: [1, 3, 2, 1] +6 1 2 0 +After: [1, 3, 2, 1] + +Before: [1, 1, 3, 0] +15 1 0 0 +After: [1, 1, 3, 0] + +Before: [1, 2, 2, 3] +2 2 2 1 +After: [1, 4, 2, 3] + +Before: [2, 3, 0, 3] +14 0 3 0 +After: [0, 3, 0, 3] + +Before: [2, 3, 2, 0] +6 1 0 2 +After: [2, 3, 1, 0] + +Before: [1, 1, 3, 3] +3 0 3 0 +After: [3, 1, 3, 3] + +Before: [2, 1, 3, 3] +14 0 3 1 +After: [2, 0, 3, 3] + +Before: [0, 2, 2, 1] +4 1 1 1 +After: [0, 4, 2, 1] + +Before: [1, 0, 0, 1] +10 1 0 1 +After: [1, 1, 0, 1] + +Before: [2, 3, 0, 2] +6 1 0 0 +After: [1, 3, 0, 2] + +Before: [0, 2, 2, 1] +0 2 3 2 +After: [0, 2, 3, 1] + +Before: [0, 0, 2, 2] +11 0 1 3 +After: [0, 0, 2, 1] + +Before: [0, 3, 2, 2] +6 1 2 0 +After: [1, 3, 2, 2] + +Before: [0, 0, 3, 0] +11 0 1 3 +After: [0, 0, 3, 1] + +Before: [0, 1, 1, 2] +3 1 3 3 +After: [0, 1, 1, 3] + +Before: [2, 3, 3, 3] +14 0 3 2 +After: [2, 3, 0, 3] + +Before: [1, 2, 3, 3] +14 0 3 3 +After: [1, 2, 3, 0] + +Before: [0, 0, 2, 1] +11 0 1 3 +After: [0, 0, 2, 1] + +Before: [1, 3, 2, 0] +6 1 2 2 +After: [1, 3, 1, 0] + +Before: [2, 0, 1, 3] +14 0 3 0 +After: [0, 0, 1, 3] + +Before: [2, 3, 3, 1] +6 1 0 0 +After: [1, 3, 3, 1] + +Before: [0, 0, 3, 0] +11 0 1 2 +After: [0, 0, 1, 0] + +Before: [0, 3, 3, 2] +8 1 3 2 +After: [0, 3, 1, 2] + +Before: [1, 0, 3, 2] +10 1 0 1 +After: [1, 1, 3, 2] + +Before: [1, 0, 1, 0] +10 1 0 0 +After: [1, 0, 1, 0] + +Before: [0, 3, 3, 3] +12 3 1 0 +After: [9, 3, 3, 3] + +Before: [1, 0, 0, 0] +10 1 0 2 +After: [1, 0, 1, 0] + +Before: [2, 2, 1, 1] +0 1 3 1 +After: [2, 3, 1, 1] + +Before: [1, 3, 1, 2] +3 2 3 3 +After: [1, 3, 1, 3] + +Before: [2, 3, 2, 1] +0 2 3 3 +After: [2, 3, 2, 3] + +Before: [1, 2, 2, 2] +4 1 1 1 +After: [1, 4, 2, 2] + +Before: [1, 1, 3, 2] +3 1 3 2 +After: [1, 1, 3, 2] + +Before: [1, 0, 2, 1] +10 1 0 3 +After: [1, 0, 2, 1] + +Before: [2, 1, 3, 2] +12 1 0 0 +After: [2, 1, 3, 2] + +Before: [2, 3, 3, 2] +8 1 3 0 +After: [1, 3, 3, 2] + +Before: [1, 0, 1, 3] +10 1 0 0 +After: [1, 0, 1, 3] + +Before: [1, 1, 0, 1] +15 1 0 2 +After: [1, 1, 1, 1] + +Before: [1, 3, 3, 2] +3 0 3 2 +After: [1, 3, 3, 2] + +Before: [2, 1, 2, 0] +2 0 1 3 +After: [2, 1, 2, 3] + +Before: [2, 0, 0, 3] +14 0 3 2 +After: [2, 0, 0, 3] + +Before: [1, 1, 1, 0] +15 1 0 3 +After: [1, 1, 1, 1] + +Before: [1, 2, 0, 3] +14 0 3 2 +After: [1, 2, 0, 3] + + + +9 2 0 0 +9 3 0 2 +9 1 0 3 +12 3 0 2 +3 2 1 2 +3 2 3 2 +4 2 1 1 +7 1 3 3 +9 1 3 0 +9 2 0 2 +9 2 3 1 +7 0 2 0 +3 0 3 0 +4 3 0 3 +9 3 2 2 +3 1 0 0 +2 0 2 0 +1 0 2 2 +3 2 2 2 +3 2 1 2 +4 3 2 3 +7 3 0 1 +9 0 0 3 +9 1 2 0 +9 2 1 2 +7 0 2 2 +3 2 1 2 +3 2 3 2 +4 1 2 1 +7 1 1 2 +9 3 1 1 +9 2 0 3 +2 0 1 1 +3 1 2 1 +4 2 1 2 +7 2 0 3 +9 3 0 0 +9 2 0 2 +9 3 2 1 +1 2 0 2 +3 2 3 2 +3 2 1 2 +4 3 2 3 +7 3 0 2 +9 3 3 3 +9 0 2 0 +9 2 1 1 +15 3 1 0 +3 0 3 0 +4 2 0 2 +7 2 0 0 +9 0 1 3 +9 3 3 2 +9 0 1 1 +10 3 2 1 +3 1 2 1 +4 1 0 0 +9 0 2 1 +10 3 2 2 +3 2 2 2 +4 2 0 0 +7 0 0 1 +9 2 0 3 +9 2 2 2 +9 3 2 0 +6 2 0 2 +3 2 3 2 +3 2 2 2 +4 2 1 1 +7 1 0 0 +9 0 1 1 +3 2 0 2 +2 2 0 2 +9 1 3 3 +3 3 2 1 +3 1 2 1 +4 1 0 0 +7 0 0 1 +3 2 0 0 +2 0 3 0 +3 3 2 3 +3 3 1 3 +4 1 3 1 +7 1 1 2 +9 2 1 3 +9 1 1 1 +9 1 3 0 +4 1 0 3 +3 3 1 3 +4 3 2 2 +7 2 0 1 +9 1 2 3 +9 2 1 2 +3 2 0 0 +2 0 2 0 +8 0 3 2 +3 2 1 2 +3 2 3 2 +4 1 2 1 +9 0 2 3 +9 3 3 2 +13 0 2 3 +3 3 2 3 +4 1 3 1 +7 1 3 0 +9 2 0 1 +9 0 2 3 +1 1 2 2 +3 2 3 2 +4 0 2 0 +7 0 2 1 +3 3 0 0 +2 0 2 0 +9 2 3 3 +9 1 0 2 +11 0 3 2 +3 2 3 2 +4 2 1 1 +7 1 3 3 +9 2 0 2 +9 3 2 0 +9 2 0 1 +1 2 0 2 +3 2 3 2 +4 3 2 3 +3 1 0 0 +2 0 1 0 +9 0 3 2 +3 0 2 0 +3 0 1 0 +4 0 3 3 +7 3 2 1 +9 3 2 0 +9 2 0 2 +3 1 0 3 +2 3 0 3 +6 2 0 3 +3 3 2 3 +4 3 1 1 +7 1 3 2 +9 0 1 1 +3 0 0 3 +2 3 1 3 +9 2 1 0 +8 0 3 0 +3 0 3 0 +4 2 0 2 +7 2 2 0 +3 2 0 2 +2 2 3 2 +9 3 0 3 +9 1 3 1 +5 3 2 2 +3 2 2 2 +4 0 2 0 +7 0 2 3 +9 2 2 0 +9 0 3 2 +3 1 2 2 +3 2 2 2 +4 2 3 3 +7 3 2 0 +9 2 3 2 +9 3 3 1 +9 0 2 3 +14 3 2 3 +3 3 2 3 +4 3 0 0 +7 0 3 2 +9 2 0 1 +9 2 2 3 +9 2 3 0 +11 0 3 1 +3 1 1 1 +4 1 2 2 +7 2 3 0 +9 2 1 1 +9 0 0 2 +9 0 3 3 +0 1 3 3 +3 3 2 3 +4 3 0 0 +3 1 0 1 +2 1 1 1 +9 2 0 2 +9 0 1 3 +14 3 2 3 +3 3 3 3 +3 3 1 3 +4 0 3 0 +7 0 3 1 +9 2 1 0 +9 1 0 2 +9 2 2 3 +0 0 3 3 +3 3 1 3 +3 3 1 3 +4 3 1 1 +7 1 1 0 +9 0 0 3 +9 2 1 2 +9 3 2 1 +14 3 2 1 +3 1 1 1 +3 1 1 1 +4 1 0 0 +7 0 0 1 +9 0 3 2 +3 0 0 3 +2 3 2 3 +9 1 2 0 +10 2 3 2 +3 2 1 2 +4 1 2 1 +7 1 3 3 +3 1 0 1 +2 1 1 1 +9 0 2 2 +3 1 2 0 +3 0 3 0 +4 0 3 3 +7 3 1 0 +9 1 0 3 +3 3 2 3 +3 3 3 3 +4 0 3 0 +9 1 2 3 +9 1 3 2 +3 2 0 1 +2 1 0 1 +2 3 1 3 +3 3 1 3 +4 0 3 0 +9 1 1 1 +9 2 2 3 +12 1 3 1 +3 1 2 1 +4 0 1 0 +7 0 0 3 +9 1 3 1 +9 0 1 2 +3 3 0 0 +2 0 2 0 +12 1 0 1 +3 1 2 1 +4 1 3 3 +7 3 2 2 +9 0 2 3 +9 0 0 1 +0 0 3 3 +3 3 2 3 +4 2 3 2 +7 2 0 1 +3 3 0 3 +2 3 3 3 +3 1 0 0 +2 0 1 0 +9 2 3 2 +7 0 2 3 +3 3 1 3 +3 3 1 3 +4 3 1 1 +7 1 3 0 +9 2 1 3 +9 3 2 1 +6 2 1 2 +3 2 3 2 +3 2 2 2 +4 0 2 0 +7 0 0 2 +9 0 2 3 +9 2 2 0 +9 1 3 1 +0 0 3 0 +3 0 1 0 +4 2 0 2 +7 2 1 0 +3 2 0 1 +2 1 0 1 +9 2 0 2 +14 3 2 3 +3 3 1 3 +4 0 3 0 +7 0 2 3 +9 2 2 1 +9 3 2 2 +9 0 1 0 +9 2 0 2 +3 2 2 2 +4 3 2 3 +7 3 2 2 +9 0 2 1 +3 1 0 3 +2 3 2 3 +9 1 0 0 +12 0 3 3 +3 3 3 3 +4 2 3 2 +7 2 0 3 +9 2 3 2 +7 0 2 2 +3 2 3 2 +4 2 3 3 +9 1 3 1 +3 1 0 2 +2 2 0 2 +3 3 0 0 +2 0 3 0 +9 2 1 1 +3 1 1 1 +4 3 1 3 +7 3 1 1 +9 2 3 2 +9 2 2 3 +9 2 1 0 +11 0 3 3 +3 3 1 3 +3 3 1 3 +4 1 3 1 +7 1 0 3 +9 3 1 2 +9 3 2 1 +6 0 1 0 +3 0 2 0 +4 0 3 3 +9 1 3 1 +9 3 3 0 +9 0 3 2 +3 1 2 2 +3 2 1 2 +3 2 2 2 +4 3 2 3 +7 3 3 2 +9 3 1 1 +9 2 0 0 +9 3 0 3 +6 0 1 3 +3 3 3 3 +4 2 3 2 +7 2 2 3 +9 2 3 1 +3 1 0 2 +2 2 3 2 +9 3 3 0 +1 1 0 2 +3 2 1 2 +4 3 2 3 +7 3 3 1 +9 2 0 3 +9 0 3 2 +9 0 2 0 +10 2 3 0 +3 0 2 0 +4 0 1 1 +9 3 2 2 +9 2 3 0 +0 0 3 2 +3 2 2 2 +4 2 1 1 +7 1 2 2 +3 3 0 1 +2 1 3 1 +9 1 1 3 +12 3 0 3 +3 3 2 3 +3 3 1 3 +4 3 2 2 +7 2 1 3 +9 3 3 0 +3 1 0 1 +2 1 2 1 +9 2 3 2 +6 2 0 2 +3 2 1 2 +4 2 3 3 +9 3 0 1 +9 0 3 2 +13 2 0 1 +3 1 3 1 +4 1 3 3 +7 3 1 1 +3 2 0 2 +2 2 3 2 +9 2 2 0 +9 2 0 3 +1 0 2 2 +3 2 2 2 +3 2 1 2 +4 1 2 1 +7 1 3 2 +3 2 0 1 +2 1 2 1 +11 0 3 0 +3 0 1 0 +4 2 0 2 +7 2 2 0 +9 3 2 3 +9 3 3 2 +9 0 3 1 +5 3 2 3 +3 3 1 3 +3 3 2 3 +4 0 3 0 +7 0 0 3 +9 0 0 2 +9 3 0 1 +9 3 1 0 +13 2 0 2 +3 2 2 2 +4 3 2 3 +7 3 3 2 +9 1 0 3 +9 2 3 1 +9 2 2 0 +8 0 3 3 +3 3 1 3 +4 2 3 2 +7 2 3 1 +9 1 1 3 +3 2 0 0 +2 0 3 0 +3 0 0 2 +2 2 0 2 +13 2 0 3 +3 3 1 3 +4 3 1 1 +9 0 2 0 +9 0 0 3 +3 1 0 2 +2 2 3 2 +10 3 2 3 +3 3 1 3 +3 3 2 3 +4 1 3 1 +7 1 1 2 +9 1 1 1 +3 2 0 3 +2 3 1 3 +3 2 0 0 +2 0 2 0 +12 3 0 0 +3 0 3 0 +4 2 0 2 +7 2 3 3 +9 3 0 0 +9 0 0 2 +5 0 2 1 +3 1 2 1 +3 1 3 1 +4 3 1 3 +9 1 2 0 +9 0 3 1 +3 3 0 2 +2 2 3 2 +4 0 0 0 +3 0 3 0 +4 3 0 3 +7 3 0 1 +9 0 3 2 +9 0 1 3 +3 0 0 0 +2 0 0 0 +9 3 2 3 +3 3 3 3 +3 3 1 3 +4 1 3 1 +7 1 2 0 +3 2 0 3 +2 3 3 3 +9 1 2 1 +3 1 2 1 +3 1 3 1 +4 0 1 0 +9 0 2 1 +9 0 3 3 +9 3 2 2 +9 3 1 2 +3 2 3 2 +4 0 2 0 +7 0 1 1 +9 3 3 0 +9 0 0 2 +9 3 3 3 +5 0 2 0 +3 0 1 0 +4 1 0 1 +7 1 2 0 +9 0 2 1 +9 2 2 2 +9 0 0 3 +14 3 2 1 +3 1 1 1 +3 1 3 1 +4 1 0 0 +7 0 1 1 +9 2 2 0 +9 0 0 2 +0 0 3 2 +3 2 2 2 +4 1 2 1 +7 1 0 3 +9 2 1 2 +3 2 0 0 +2 0 3 0 +9 0 0 1 +6 2 0 0 +3 0 2 0 +3 0 2 0 +4 0 3 3 +3 0 0 0 +2 0 3 0 +9 3 3 1 +6 2 0 2 +3 2 3 2 +4 3 2 3 +7 3 0 1 +9 2 0 3 +3 2 0 2 +2 2 0 2 +10 2 3 3 +3 3 1 3 +4 1 3 1 +7 1 1 2 +9 2 3 3 +9 0 0 0 +3 1 0 1 +2 1 1 1 +12 1 3 1 +3 1 1 1 +4 1 2 2 +9 2 1 0 +9 1 2 1 +9 3 1 3 +15 3 0 1 +3 1 1 1 +4 2 1 2 +7 2 3 3 +3 1 0 0 +2 0 0 0 +3 3 0 2 +2 2 3 2 +9 3 0 1 +9 2 1 2 +3 2 2 2 +3 2 1 2 +4 2 3 3 +7 3 3 2 +9 2 2 3 +3 1 0 0 +2 0 2 0 +11 0 3 3 +3 3 2 3 +4 2 3 2 +7 2 3 3 +9 2 0 1 +9 2 3 2 +9 1 2 0 +7 0 2 1 +3 1 3 1 +4 3 1 3 +7 3 1 0 +9 3 0 2 +9 0 2 3 +3 2 0 1 +2 1 1 1 +3 1 2 1 +3 1 2 1 +4 0 1 0 +7 0 0 3 +9 2 0 2 +3 2 0 1 +2 1 2 1 +9 3 2 0 +1 1 0 0 +3 0 3 0 +4 3 0 3 +7 3 0 2 +9 2 0 0 +9 2 3 3 +9 1 1 1 +11 0 3 1 +3 1 3 1 +4 2 1 2 +7 2 1 1 +9 2 3 2 +11 0 3 0 +3 0 1 0 +4 1 0 1 +9 3 1 2 +3 3 0 0 +2 0 2 0 +11 0 3 2 +3 2 3 2 +4 1 2 1 +9 2 0 2 +9 1 3 3 +9 3 1 0 +1 2 0 0 +3 0 2 0 +3 0 3 0 +4 1 0 1 +7 1 1 2 +9 2 1 0 +3 0 0 1 +2 1 1 1 +12 1 0 0 +3 0 1 0 +3 0 3 0 +4 2 0 2 +9 0 1 1 +9 2 3 0 +9 2 2 3 +11 0 3 1 +3 1 3 1 +3 1 3 1 +4 1 2 2 +3 3 0 1 +2 1 2 1 +9 1 0 3 +12 3 0 3 +3 3 3 3 +4 2 3 2 +7 2 1 1 +9 0 0 2 +9 2 1 3 +10 2 3 2 +3 2 2 2 +4 1 2 1 +7 1 0 3 +9 3 1 1 +9 3 1 2 +13 0 2 1 +3 1 2 1 +3 1 1 1 +4 1 3 3 +7 3 3 1 +9 2 3 2 +9 3 3 3 +15 3 0 0 +3 0 2 0 +4 0 1 1 +7 1 3 3 +3 0 0 2 +2 2 0 2 +9 3 1 1 +9 1 1 0 +9 2 0 1 +3 1 1 1 +4 1 3 3 +7 3 3 2 +9 1 3 3 +9 2 1 1 +4 0 3 0 +3 0 3 0 +4 2 0 2 +7 2 3 1 +9 2 3 2 +9 1 3 0 +9 2 0 3 +12 0 3 3 +3 3 1 3 +3 3 1 3 +4 3 1 1 +7 1 0 0 +9 3 0 1 +3 2 0 2 +2 2 3 2 +9 1 1 3 +2 3 1 2 +3 2 2 2 +4 2 0 0 +7 0 1 2 +3 3 0 0 +2 0 2 0 +8 0 3 3 +3 3 1 3 +4 2 3 2 +7 2 0 3 +9 2 0 2 +9 1 1 1 +9 1 1 0 +7 0 2 2 +3 2 3 2 +3 2 3 2 +4 2 3 3 +7 3 3 2 +9 2 3 3 +9 2 3 0 +12 1 0 0 +3 0 1 0 +4 0 2 2 +7 2 0 1 +9 2 2 0 +9 0 1 2 +11 0 3 2 +3 2 2 2 +4 1 2 1 +9 2 2 2 +9 3 1 0 +3 1 0 3 +2 3 0 3 +14 3 2 0 +3 0 1 0 +3 0 2 0 +4 0 1 1 +7 1 0 0 +3 3 0 2 +2 2 1 2 +9 3 0 3 +9 2 0 1 +5 3 2 2 +3 2 3 2 +3 2 2 2 +4 0 2 0 +7 0 3 3 +9 1 1 0 +9 3 1 2 +1 1 2 0 +3 0 2 0 +4 0 3 3 +7 3 0 2 +9 1 3 1 +9 0 3 3 +9 2 3 0 +9 3 0 3 +3 3 1 3 +3 3 3 3 +4 3 2 2 +7 2 1 0 +3 3 0 3 +2 3 0 3 +9 2 2 2 +9 2 2 1 +14 3 2 2 +3 2 1 2 +4 0 2 0 +9 1 1 3 +9 1 2 1 +3 3 0 2 +2 2 3 2 +3 3 2 1 +3 1 3 1 +4 1 0 0 +7 0 3 3 +9 3 3 1 +9 2 1 0 +9 2 3 2 +6 2 1 1 +3 1 3 1 +4 1 3 3 +7 3 0 0 +9 0 0 1 +3 0 0 3 +2 3 1 3 +2 3 1 1 +3 1 3 1 +3 1 3 1 +4 1 0 0 +7 0 3 1 +9 1 1 0 +9 3 3 3 +9 0 0 2 +3 0 2 0 +3 0 2 0 +3 0 1 0 +4 0 1 1 +7 1 3 0 +9 2 2 1 +9 2 3 2 +9 1 3 2 +3 2 2 2 +4 2 0 0 +9 1 0 1 +9 0 1 3 +9 2 0 2 +0 2 3 1 +3 1 1 1 +3 1 1 1 +4 1 0 0 +9 3 0 1 +3 2 0 2 +2 2 3 2 +10 3 2 3 +3 3 2 3 +4 0 3 0 +7 0 2 3 +3 3 0 2 +2 2 2 2 +9 2 2 0 +6 2 1 2 +3 2 1 2 +4 2 3 3 +7 3 0 1 +3 1 0 3 +2 3 2 3 +9 1 3 0 +9 0 3 2 +4 0 0 3 +3 3 2 3 +4 1 3 1 +7 1 3 3 +9 3 1 0 +9 1 0 1 +9 2 0 2 +3 2 2 2 +4 2 3 3 +9 2 3 2 +9 0 1 1 +3 3 0 0 +2 0 1 0 +4 0 0 0 +3 0 2 0 +4 3 0 3 +7 3 3 1 +3 3 0 0 +2 0 1 0 +9 2 1 3 +7 0 2 2 +3 2 1 2 +4 1 2 1 +7 1 1 3 +9 3 1 1 +3 1 0 0 +2 0 2 0 +9 0 0 2 +6 0 1 0 +3 0 2 0 +4 0 3 3 +7 3 0 1 +3 1 0 2 +2 2 3 2 +9 3 0 3 +9 0 1 0 +9 2 3 3 +3 3 1 3 +4 3 1 1 +7 1 0 3 +9 0 0 2 +9 1 2 0 +9 2 2 1 +4 0 0 0 +3 0 2 0 +3 0 3 0 +4 0 3 3 +7 3 1 2 +9 1 0 3 +9 0 0 1 +9 2 1 0 +8 0 3 1 +3 1 3 1 +4 1 2 2 +7 2 3 1 +9 3 0 0 +9 1 3 2 +5 0 2 2 +3 2 2 2 +3 2 2 2 +4 2 1 1 +9 2 1 0 +9 1 2 2 +12 3 0 2 +3 2 2 2 +4 1 2 1 +9 3 0 2 +8 0 3 3 +3 3 2 3 +4 1 3 1 +7 1 2 2 +9 1 2 1 +9 2 0 3 +11 0 3 0 +3 0 3 0 +3 0 3 0 +4 2 0 2 +9 2 0 0 +9 3 2 1 +11 0 3 0 +3 0 2 0 +4 0 2 2 +7 2 2 3 +9 2 0 0 +9 0 3 1 +9 3 3 2 +13 0 2 2 +3 2 3 2 +4 2 3 3 +7 3 3 1 +9 2 1 2 +3 2 0 3 +2 3 1 3 +4 3 3 2 +3 2 1 2 +3 2 3 2 +4 1 2 1 +7 1 0 2 +9 0 1 1 +9 0 2 3 +9 1 3 0 +9 3 1 0 +3 0 1 0 +4 2 0 2 +7 2 3 3 +9 3 0 1 +9 1 3 0 +9 3 3 2 +2 0 1 2 +3 2 1 2 +4 2 3 3 +9 0 2 2 +9 3 3 0 +5 1 2 1 +3 1 3 1 +4 1 3 3 +7 3 3 2 +9 1 3 1 +9 1 0 3 +4 1 3 1 +3 1 3 1 +4 1 2 2 +7 2 3 0 +3 2 0 2 +2 2 3 2 +9 0 0 3 +9 2 0 1 +1 1 2 1 +3 1 3 1 +4 1 0 0 +7 0 2 2 +9 1 2 3 +3 1 0 0 +2 0 2 0 +9 3 3 1 +6 0 1 3 +3 3 2 3 +4 2 3 2 +7 2 3 0 +3 1 0 3 +2 3 0 3 +9 2 1 1 +3 3 0 2 +2 2 3 2 +10 3 2 2 +3 2 3 2 +4 0 2 0 +7 0 3 2 +9 2 0 3 +9 2 0 0 +9 3 0 1 +15 1 3 1 +3 1 1 1 +4 1 2 2 +7 2 3 0 +9 2 1 2 +9 2 2 1 +0 2 3 3 +3 3 1 3 +4 3 0 0 +7 0 0 3 +9 3 0 1 +9 1 3 0 +9 1 0 2 +4 0 0 1 +3 1 3 1 +3 1 3 1 +4 1 3 3 +7 3 3 0 diff --git a/src/Day16.hs b/src/Day16.hs index b095e5d..d8a64ff 100644 --- a/src/Day16.hs +++ b/src/Day16.hs @@ -1,6 +1,101 @@ module Day16 (main) where +import Prelude hiding (null, (!!)) +import Data.Bits ((.&.), (.|.)) +import Data.Foldable (all, toList, foldl') +import Data.Sequence (Seq, fromList, update, index) +import qualified Data.Map as M' (fromList, (!)) +import Data.IntMap (IntMap, null, insertWith, partition, (!)) +import qualified Data.IntMap as M (empty, union) +import Data.Set (Set, singleton, size, (\\)) +import qualified Data.Set as S (empty, union) + +-- Instr OpCode RegisterA/ImmediateA RegisterB/ImmediateB RegisterC +data Instruction = Instr Int Int Int Int deriving Show +type Registers = Seq Int +type Sample = (Instruction, Registers, Registers) +type OpsMap = IntMap (Set String) +type OpMap = IntMap Op +type Op = Instruction -> Registers -> Registers + +infixl 9 !! +(!!) = index + +(!!!) = (M'.!) + +initialRegisters = fromList [0, 0, 0, 0] + +applyInstruction :: OpMap -> Op +applyInstruction opMap instr@(Instr op _ _ _) = opMap ! op $ instr + +addr, addi, mulr, muli, banr, bani, borr, bori, setr, seti, gtir, gtri, gtrr, eqir, eqri, eqrr :: Op +addr (Instr _ rA rB rC) rs = update rC (rs !! rA + rs !! rB) rs +mulr (Instr _ rA rB rC) rs = update rC (rs !! rA * rs !! rB) rs +banr (Instr _ rA rB rC) rs = update rC (rs !! rA .&. rs !! rB) rs +borr (Instr _ rA rB rC) rs = update rC (rs !! rA .|. rs !! rB) rs +addi (Instr _ rA vB rC) rs = update rC (rs !! rA + vB) rs +muli (Instr _ rA vB rC) rs = update rC (rs !! rA * vB) rs +bani (Instr _ rA vB rC) rs = update rC (rs !! rA .&. vB) rs +bori (Instr _ rA vB rC) rs = update rC (rs !! rA .|. vB) rs +setr (Instr _ rA _ rC) rs = update rC (rs !! rA) rs +seti (Instr _ vA _ rC) rs = update rC vA rs +gtir (Instr _ vA rB rC) rs = update rC (fromEnum $ vA > rs !! rB) rs +eqir (Instr _ vA rB rC) rs = update rC (fromEnum $ vA == rs !! rB) rs +gtri (Instr _ rA vB rC) rs = update rC (fromEnum $ rs !! rA > vB) rs +eqri (Instr _ rA vB rC) rs = update rC (fromEnum $ rs !! rA == vB) rs +gtrr (Instr _ rA rB rC) rs = update rC (fromEnum $ rs !! rA > rs !! rB) rs +eqrr (Instr _ rA rB rC) rs = update rC (fromEnum $ rs !! rA == rs !! rB) rs + +ops = [addr, addi, mulr, muli, banr, bani, borr, bori, setr, seti, gtir, gtri, gtrr, eqir, eqri, eqrr] +opNames = ["addr","addi","mulr","muli","banr","bani","borr","bori","setr","seti","gtir","gtri","gtrr","eqir","eqri","eqrr"] + +opNameToOp :: String -> Op +opNameToOp = (!!!) . M'.fromList $ zip opNames ops + +parse :: [String] -> ([Sample], [Instruction]) +parse ("":"":instrs) = ([], parseInstrs instrs) +parse (before:instr:after:_:rest) = + let beforeRegs = fromList . read . drop 8 $ before + afterRegs = fromList . read . drop 8 $ after + (op:a:b:c:[]) = map read . words $ instr + (samples, instrs) = parse rest + in ((Instr op a b c, beforeRegs, afterRegs):samples, instrs) + +parseInstrs :: [String] -> [Instruction] +parseInstrs [] = [] +parseInstrs (instr:rest) = + let (op:a:b:c:[]) = map read . words $ instr + in (Instr op a b c):(parseInstrs rest) + +opCount :: Sample -> Int +opCount (instr, beforeRegs, afterRegs) = length . filter (\op -> afterRegs == op instr beforeRegs) $ ops + +opIdentify :: Sample -> OpsMap -> OpsMap +opIdentify (instr@(Instr opCode _ _ _), beforeRegs, afterRegs) m = + foldr (\(op, opName) m' -> if afterRegs == op instr beforeRegs then insertWith S.union opCode (singleton opName) m' else m') m $ zip ops opNames + +reduceOpMap :: OpsMap -> OpMap +reduceOpMap = reduceOpMapRec M.empty + where reduceOpMapRec assigned m = + let (singletons, rest) = partition ((== 1) . size) m + singletonsSet = foldr S.union S.empty singletons + newAssigned = M.union assigned singletons + in if null rest + then fmap (opNameToOp . head . toList) newAssigned + else reduceOpMapRec newAssigned $ fmap (\\ singletonsSet) rest + +part1 :: [Sample] -> Int +part1 = length . filter (>= 3) . map opCount + +part2a :: [Sample] -> OpMap +part2a samples = reduceOpMap . foldr opIdentify M.empty $ samples + +part2b :: OpMap -> [Instruction] -> Registers +part2b opMap = foldr (applyInstruction opMap) initialRegisters . reverse + main :: IO () main = do - input <- readFile "input/16.txt" - print input \ No newline at end of file + (samples, instrs) <- parse . lines <$> readFile "input/16.txt" + print $ part1 samples + let opMap = part2a samples + print $ part2b opMap instrs