#include <bits/stdc++.h>
using namespace std;
const int MOD = 998244353;
int main() {
freopen("cake.in","r",stdin);
freopen("cake.out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N, M;
cin >> N >> M;
vector<string> g(N);
for (int i = 0; i < N; ++i) {
cin >> g[i];
}
vector<vector<int>> c(N, vector<int>(M));
for (int i = 0; i < N; ++i) {
for (int j = 0; j < M; ++j) {
c[i][j] = (g[i][j] == 'Y') ? 1 : 0;
}
}
vector<vector<int>> p(N, vector<int>(M + 1));
for (int i = 0; i < N; ++i) {
for (int j = 0; j < M; ++j) {
p[i][j + 1] = p[i][j] + c[i][j];
}
}
auto f = [&](int a, int b, int col) {
int s = 0;
for (int i = a; i < b; ++i) {
s += c[i][col];
}
return s;
};
vector<int> dp(N + 1);
dp[0] = 1;
for (int i = 1; i <= N; ++i) {
for (int j = i - 1; j >= 0; --j) {
bool ok = true;
int t = 0;
vector<int> cs(M);
for (int k = 0; k < M; ++k) {
cs[k] = f(j, i, k);
t += cs[k];
}
if (t % 2 != 0) {
ok = false;
} else {
int cs_sum = 0;
for (int k = 0; k < M; ++k) {
cs_sum += cs[k];
if (cs_sum > 2) {
ok = false;
break;
}
if (cs_sum == 2) {
cs_sum = 0;
}
}
if (cs_sum != 0) {
ok = false;
}
}
if (ok) {
dp[i] = (dp[i] + dp[j]) % MOD;
}
}
}
cout << dp[N] << '\n';
return 0;
}