#include <iostream>
#include <string>
#include <vector>
#include <functional>
#include <numeric>
#include <algorithm>
#include <queue>
#include <bitset>
using namespace std;
#define rep(i,n)  for(int i=0 ; i<(n) ; ++i)
typedef long long ll;
typedef pair<int,int> p;
const int MOD = 1000000000+7;
const int INF = 1001000100;


int main(){
  ll n;
  cin >> n;
  ll a[n];
  rep(i,n) cin>>a[i];
  
  //dp。i番目までに作業をして、i番目を+で足したか-で足した時の和と、その場合の数を足していく。
  ll dp[n][2][2];//+で足した時の(和、場合の数）、-で足した時の（和、場合の数）
  dp[0][0][0] = a[0];
  dp[0][0][1] = 1;
  dp[0][1][0] = 0;
  dp[0][1][1] = 0;
  for(int i=1 ; i<n ; ++i){
    dp[i][0][0] = dp[i-1][0][0] + dp[i-1][1][0] + (dp[i-1][0][1]+dp[i-1][1][1])*a[i];
    dp[i][0][0] = dp[i][0][0] % MOD;
    dp[i][1][0] = dp[i-1][0][0] + dp[i-1][0][1]*(MOD - a[i]);
    dp[i][1][0] = dp[i][1][0] % MOD;
    dp[i][0][1] = (dp[i-1][0][1] + dp[i-1][1][1]) %MOD;
    dp[i][1][1] = dp[i-1][0][1] % MOD;
  }

  cout << (dp[n-1][0][0] + dp[n-1][1][0])%MOD;

  return 0;
}
#include <bits/stdc++.h>
#define N 567
typedef long long ll;
using namespace std;
const int P = 998244353;
inline void read(int &x) {
	scanf("%d", &x);
}
int n, m;
char s[N];
int bin[N + N];
inline void Set(int p, int v) {
	if (bin[p] == -1) {
		bin[p] = v;
	} else {
		if (bin[p] ^ v) {
			puts("0"); exit(0);
		}
	}
}
int main() {
	read(n), read(m);
	memset(bin, -1, sizeof(bin));
	for (int i = 1; i <= n; ++i) {
		scanf("%s", s + 1);
		for (int j = 1; j <= m; ++j) if (s[j] != '.')
			Set(i + j, s[j] == 'R' ? 0 : 1);
	}
	int ans = 1;
	for (int i = 2; i <= n + m; ++i) if (bin[i] == -1) ans = (ans + ans) % P;//bug
	printf("%d\n", (ans % P + P) % P);
	return 0;
}