N,M = map(int, input().split()) S = list(input()) edge = [[] for i in range(N)] mod = 998244353 for i in range(M): a,b = map(int, input().split()) a-=1;b-=1 edge[a].append(b) edge[b].append(a) hatena_sum = S.count("?") ans = 0 for i in range(N): if S[i] == "o" or S[i] == "?": a_cnt = 0 i_cnt = 0 hatena_cnt = 0 for _next in edge[i]: if S[_next] == "a": a_cnt += 1 elif S[_next] == "i": i_cnt += 1 elif S[_next] == "?": hatena_cnt += 1 if S[i] == "o": ans += a_cnt * i_cnt * pow(26,hatena_sum,mod)#?そのまま ans += hatena_cnt * a_cnt * pow(26,hatena_sum-1,mod)#?を一つiに ans += hatena_cnt * i_cnt * pow(26,hatena_sum-1,mod)#?を一つaに ans += hatena_cnt * (hatena_cnt-1) * pow(26,hatena_sum-2,mod)#?と? ans %= mod else:#?を一つoとして使っている ans += a_cnt * i_cnt * pow(26,hatena_sum-1,mod)#?そのまま ans += hatena_cnt * a_cnt * pow(26,hatena_sum-2,mod)#?を一つiに ans += hatena_cnt * i_cnt * pow(26,hatena_sum-2,mod)#?を一つaに ans += hatena_cnt * (hatena_cnt-1) * pow(26,hatena_sum-3,mod)#?と? ans %= mod print(ans%mod)