#include using namespace std; #include using namespace atcoder; using mint = atcoder::static_modint<998244353>; // // using mint = atcoder::static_modint<1000000007>; using ld = long double; using ll = long long; #define mp(a,b) make_pair(a,b) #define rep(i,s,n) for(int i=s; i<(int)n; i++) const vector dx{1,0,-1,0},dy{0,1,0,-1}; int main(){ int n,m;cin >> n >> m; string s;cin >> s; vector> G(n); rep(i,0,m){ int a,b;cin >> a >> b; a--,b--; G[a].push_back(b); G[b].push_back(a); } int cnt=0; rep(i,0,n)if(s[i]=='?')cnt++; mint ans=0; mint h=mint(26).inv(); rep(o,0,n)if(s[o]=='?' || s[o]=='o'){ mint a=0; mint i=0; mint c=0; for(auto x:G[o]){ if(s[x]=='a')a++; else if(s[x]=='i')i++; else c++; } mint add=0; //ai add+=a*i; //?i add+=h*c*i; //a? add+=h*a*c; //?? add+=h*h*c*(c-1); if(s[o]=='?')add*=h; ans+=add; } ans*=mint(26).pow(cnt); cout << ans.val() << "\n"; }