#include #include #include #include using namespace std; long long offset = 10; map dp; long long mod = 998244353; // Pythonの @lru_cache に相当するメモ化用配列 bool visited[4][4][200015]; long long cache_dfs[4][4][200015]; long long dfs(long long l, long long r, long long p) { if (visited[l][r][p]) return cache_dfs[l][r][p]; if (p == 1) { long long ret = 0; if (l == 0 || l == 1) { if (r == 0) ret = 2; else if (r == 1) ret = 3; else ret = 3; } else { if (r == 0) ret = 1; else if (r == 1) ret = 2; else ret = 2; } visited[l][r][p] = true; cache_dfs[l][r][p] = ret; return ret; } long long res = 0; for (long long i = 0; i < 3; i++) { bool ok = true; if (l == 2 && i == 0) { ok = false; } if (ok) { res += dfs(i, r, p - 1); res %= mod; } } dp[p * offset * offset + l * offset + r] = res; visited[l][r][p] = true; cache_dfs[l][r][p] = res % mod; return res % mod; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int N; if (!(cin >> N)) return 0; string S_input; cin >> S_input; // S=list(map(str, input())) と insert/append の再現 vector S; S.push_back('U'); for (char c : S_input) { S.push_back(c); } S.push_back('U'); dp[100] = 2; dp[101] = 3; dp[102] = 3; dp[110] = 2; dp[111] = 3; dp[112] = 3; dp[120] = 1; dp[121] = 2; dp[122] = 2; dfs(0, 0, 200010); dfs(0, 1, 200010); dfs(0, 2, 200010); long long ans = 1; long long l = -1, r = -1; long long idx = 0; map d; d['L'] = 0; d['U'] = 1; d['R'] = 2; while (idx < S.size()) { if (S[idx] == '.') { l = d[S[idx - 1]]; long long p = 1; idx += 1; while (idx < S.size()) { if (S[idx] == '.') { p += 1; idx += 1; } else { r = d[S[idx]]; break; } } ans *= dp[p * offset * offset + l * offset + r]; ans %= mod; } else { idx += 1; } } cout << ans % mod << "\n"; return 0; }