import sys sys.setrecursionlimit(10**8) n,m=map(int,input().split()) s=list(input()) connect=[[] for _ in range(n)] hate=s.count("?") for _ in range(m): a,b=map(int,input().split()) a-=1 b-=1 connect[a].append(b) connect[b].append(a) ans=0 mod=998244353 def DFS(now,deepth,used): global ans global visited if deepth==2: cnt=1 for _ in range(hate-used): cnt*=26 cnt%=mod ans+=cnt ans%=mod return 0 for to in connect[now]: if s[to] == word[deepth+1] or s[to]=="?": if not visited[to]: visited[to]=True if s[to]=="?": DFS(to,deepth+1,used+1) else: DFS(to,deepth+1,used) visited[to]=False word="aoi" for start in range(n): visited=[False]*n if s[start] in "?a": visited[start]=True if s[start]=="?": DFS(start,0,1) else: DFS(start,0,0) ans%=mod print(ans)