3
void fill(string s, int n, int p) {8
for (int i = 1; i < 4; i++) {12
string m = to_string(i);13
fill(s + m, n - 1, i);19
vector<vector<int>> memo;20
int solve(int n, int lastIdx, int m) {23
if (memo[n][lastIdx] != -1) return memo[n][lastIdx];24
string last = moves[lastIdx];25
for (int idx = 0; idx < moves.size(); idx++) {26
string move = moves[idx];28
for (int i = 0; i < m; i++)29
if (move[i] == last[i]) same = true;30
if (!same) ret = (ret + solve(n - 1, idx, m) % MOD) % MOD;32
return memo[n][lastIdx] = ret % MOD;34
int colorTheGrid(int m, int n) {37
// cout<<moves.size()<<endl;38
memo.resize(n + 1, vector<int>(moves.size(), -1));40
for (int idx = 0; idx < moves.size(); idx++) ret = (ret + solve(n - 1, idx, m) % MOD) % MOD;