// #include #include using namespace std; using namespace atcoder; using ll = long long; #define rep(i, n) for (int i=0; i<(int)(n); ++(i)) #define rep3(i, m, n) for (int i=(m); (i)<(int)(n); ++(i)) #define repr(i, n) for (int i=(int)(n)-1; (i)>=0; --(i)) #define rep3r(i, m, n) for (int i=(int)(n)-1; (i)>=(int)(m); --(i)) #define all(x) (x).begin(), (x).end() const int INF = (int)(1e9); const ll mod = 998244353LL; int main() { int n, m; cin >> n >> m; vector s(n); rep(i, n) cin >> s[i]; dsu d(n*m); ll res = 1; rep(i, n) rep(j, m) if (s[i][j] == '#') { if (i-1 < 0 || s[i-1][j] != '#' || j-1 < 0 || s[i][j-1] != '#' || !d.same((i-1)*m+j, i*m+(j-1))) res = res * 4 % mod; else res = res * 2 % mod; if (i-1 >= 0 && s[i-1][j] == '#') d.merge(i*m+j, (i-1)*m+j); if (j-1 >= 0 && s[i][j-1] == '#') d.merge(i*m+j, i*m+(j-1)); } cout << res << endl; return 0; }