4
{0, 1, 0}, {1, 0, 1}, {2, 0, 1},5
{0, 1, 2}, {1, 0, 2}, {2, 0, 2},6
{0, 2, 0}, {1, 2, 0}, {2, 1, 0},7
{0, 2, 1}, {1, 2, 1}, {2, 1, 2}10
HashMap<Integer, List<Integer>> nextMap = new HashMap<>();13
public int numOfWays(int n) {17
for (int prev = 0; prev < 12; prev++) {18
List<Integer> nexts = new ArrayList<>();19
for (int next = 0; next < 12; next++) {20
if (next == prev) continue;23
for (int i = 0; i < 3; i++) {24
if (states[prev][i] == states[next][i]) {29
if (flag) nexts.add(next);31
nextMap.put(prev, nexts);35
memo = new Long[12][n];37
for (int i = 0; i < 12; i++) {38
ways += dfs(i, n - 1);45
long dfs(int prev, int n) {48
if (memo[prev][n] != null) return memo[prev][n];52
List<Integer> nexts = nextMap.get(prev);53
for (int next : nexts) {54
ways += dfs(next, n - 1);