#include<iostream> #include<vector> #include<cassert> using namespace std; long long modpow(long long a, long long n, long long m) { assert(m>=1); if(a==0) return 0LL; long long res = 1; while(n > 0) { if(n&1) res = res * a % m; a = a * a % m; n >>= 1; } return res; } const long long MOD = 998244353; int main() { int N,M;string S; cin >> N >> M >> S; long long q_count = 0; for(char c : S) if(c=='?') q_count++; vector<vector<int>> G(N); for(int i=0;i<M;++i) { int u,v; cin >> u >> v; --u,--v; G[u].emplace_back(v); G[v].emplace_back(u); } string check = "ai?"; long long ans = 0; for(int u=0;u<N;++u) { if(S[u] == 'o' || S[u] == '?') { vector<int> vertexes; string str = ""; vector<long long> count(3); for(int v : G[u]) { vertexes.emplace_back(v); for(int i=0;i<3;++i) if(check[i] == S[v]) count[i]++; } long long q = S[u]=='?' ? q_count-1 : q_count; ans += count[0] * count[1] % MOD * modpow(26,q,MOD) % MOD; ans %= MOD; ans += count[0] * count[2] % MOD * modpow(26,q,MOD) % MOD; ans %= MOD; ans += count[1] * count[2] % MOD * modpow(26,q,MOD) % MOD; ans %= MOD; ans += count[2]*(count[2]-1) % MOD * modpow(26,q-count[2],MOD) % MOD; ans %= MOD; } } cout << ans << endl; }