#include #include #define rep(i, a, b) for (ll i = (ll)(a); i < (ll)(b); i++) using namespace atcoder; using namespace std; typedef long long ll; int main() { int h, w; cin >> h >> w; vector s(h); rep(i, 0, h) cin >> s[i]; int ct = 0; dsu uf(h * w); rep(i, 0, h) rep(j, 0, w) { if (s[i][j] == '.') continue; ct += 2; if (i && j && s[i - 1][j] == '#' && s[i][j - 1] == '#' && uf.same(i * w + j - 1, (i - 1) * w + j)) ct--; if (i && s[i - 1][j] == '#') uf.merge(i * w + j, (i - 1) * w + j); if (j && s[i][j - 1] == '#') uf.merge(i * w + j, i * w + j - 1); } cout << pow_mod(2, ct, 998244353) << endl; }