#include<bits/stdc++.h>
using namespace std;
namespace acac
{
int n,m,sz;
int trie[10000010][5],fail[10000010],Sum[10000010],D[10000010],L[110],bj[10000010];
char S[100010][110],T[10000010];
int zh(char ch)
{
if(ch=='E')return 0;
if(ch=='S')return 1;
if(ch=='W')return 2;
return 3;
}
void ins(char S[],int w,int len,int u)
{
if(w>len)
{
Sum[u]++;
return ;
}
int to=zh(S[w]);
if(!trie[u][to])trie[u][to]=++sz;
ins(S,w+1,len,trie[u][to]);
}
void build()
{
int l=1,r=0;
for(int i=0;i<4;i++)
{
if(trie[0][i])D[++r]=trie[0][i],fail[trie[0][i]]=0;
}
while(l<=r)
{
int u=D[l++];
for(int i=0;i<4;i++)
{
if(trie[u][i])
{
fail[trie[u][i]]=trie[fail[u]][i];
D[++r]=trie[u][i];
}
else trie[u][i]=trie[fail[u]][i];
}
}
}
void pp(char S[],int w,int len,int u)
{
if(u)
{
for(int i=u;i&&!bj[i];i=fail[i])
{
bj[i]=1;
}
}
if(w>len)return ;
pp(S,w+1,len,trie[u][zh(S[w])]);
}
int qr(char S[],int w,int len,int u)
{
int ans=0;
for(int i=1;i<=len;i++)
{
u=trie[u][zh(S[i])];
if(bj[u])ans=i;
}
return ans;
}
int main()
{
scanf("%d%d%s",&n,&m,T+1);
for(int i=1;i<=m;i++)
{
scanf("%s",S[i]+1);
L[i]=strlen(S[i]+1);
ins(S[i],1,L[i],0);
}
build();
pp(T+1,1,n,0);
for(int i=1;i<=m;i++)
{
cout<<qr(S[i],1,L[i],0)<<'\n';
}
return 0;
}
}
int main()
{
acac::main();
return 0;
}