#include<bits/stdc++.h>
using namespace std;
char str[100000010],t[100000010],tmp[12345608];
int trie[10001][10001],fail[10001000],lent,n,tot;
int End[10001011],vis[100109];
queue<int> q;
void ins(char *str){
int len=strlen(str),p=0;
for(int i=0;i<len;i++){
int ch=str[i]-'A';
if(!trie[p][ch]) trie[p][ch]=++tot;
p=trie[p][ch];
}
End[p]++;
}
void build(){
for(int i=0;i<26;i++) if(trie[0][i]) q.push(trie[0][i]),fail[trie[0][i]]=0;
while(!q.empty()){
int u=q.front();q.pop();
for(int i=0;i<26;i++){
if(trie[u][i]) fail[trie[u][i]]=trie[fail[u]][i],q. push(trie[u][i]);
else trie[u][i]=trie[fail[u]][i];
}
}
int p=0;
for(int i=0;i<lent;i++){
p=trie[p][t[i]-'A'];
for(int k=p;k&&!vis[k];k=fail[k]) vis[k]=1;
}
}
int Query(char *str){
int len=strlen(str),p=0,res=0;
for(int i=0;i<len;i++){
p=trie[p][str[i]-'A'];
if(vis[p]) res=i+1;
}
return res;
}
int main(){
scanf("%d%d",&lent,&n);
scanf("%s",t);
for(int i=1;i<=n;i++){
scanf("%s",tmp[i]);
ins(tmp[i]);
}
build();
for(int i=1;i<=n;i++){
printf("%d\n",Query(tmp[i]));
}
return 0;
}
本人自学,勿骂