#include using namespace std; using ll = long long; const int MOD = 998244353; ll modpow(ll a, ll n) { ll r = 1; while (n) { if (n & 1) r = r * a % MOD; a = a * a % MOD; n >>= 1; } return r; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N, Q; cin >> N >> Q; string S; cin >> S; vector fact(N + 1), invfact(N + 1); fact[0] = 1; for (int i = 1; i <= N; ++i) { fact[i] = fact[i - 1] * i % MOD; } invfact[N] = modpow(fact[N], MOD - 2); for (int i = N; i >= 1; --i) { invfact[i - 1] = invfact[i] * i % MOD; } auto C = [&](int n, int k) -> ll { if (k < 0 || k > n) return 0; return fact[n] * invfact[k] % MOD * invfact[n - k] % MOD; }; auto cat = [&](int r) -> ll { return fact[2 * r] * invfact[r] % MOD * invfact[r + 1] % MOD; }; auto solve = [&](int K) -> ll { ll P = 1; int last = 0; int B = 0; for (int i = 1; i < N; ++i) { if (S[i - 1] == S[i]) continue; if (i & 1) { return 0; } P = P * cat((i - last) / 2) % MOD; last = i; B = i; } int L = N - B; int q = K - B / 2; if (S[N - 1] == 'Y') { if (!(0 <= q && q <= L / 2)) return 0; ll f = (C(L, q) - C(L, q - 1) + MOD) % MOD; return P * f % MOD; } else { if (!((L + 1) / 2 <= q && q <= L)) return 0; ll f = (C(L, q) - C(L, q + 1) + MOD) % MOD; return P * f % MOD; } }; while (Q--) { int t, x; cin >> t >> x; if (t == 1) { --x; S[x] = (S[x] == 'Y' ? 'N' : 'Y'); } else { cout << solve(x) << '\n'; } } }