#include #include #include #include using namespace std; const int MOD = 998244353; int main() { int X, Y; while (cin >> Y >> X) { vector G(Y); for (auto& s : G) cin >> s; vector dyn(1<<(X+1)); dyn[0] = 1; for (int y = 0; y < Y; y++) for (int x = 0; x < X; x++) { vector dyn2(1<<(X+1)); for (int b = 0; b < dyn.size(); b++) if (dyn[b]) { dyn2[b>>1] = (dyn2[b>>1] + dyn[b] * (G[y][x] == '?' && !(b&1) ? 3 : 1)) % MOD; if (x+1 < X && y+1 < Y && (G[y ][x ] == '?' || G[y ][x ] == 'I') && !(b&(1<<0)) && (G[y ][x+1] == '?' || G[y ][x+1] == 'C') && !(b&(1<<1)) && (G[y+1][x ] == '?' || G[y+1][x ] == 'P') && !(b&(1<>1) | 1 | (3<<(X-1)); dyn2[b2] = (dyn2[b2] - dyn[b]) % MOD; } } dyn.swap(dyn2); } int64_t ret = 1; for (auto const& s : G) for (auto ch : s) if (ch == '?') ret = (ret*3) % MOD; cout << ((ret-dyn[0])%MOD+MOD)%MOD << endl; } }