题
#include<bits/stdc++.h>
using namespace std;
const int N=260010;
int n,m,g[N][26],t[N],u,c=1,r;
string s;
map<string,bool>p;
char x,y;
int q(string s){
int u=1;
for(int j=0; j<s.size(); j++){
int v=s[j]-'a';
u=g[u][v];
if(!u)return 0;
}
return t[u];
}
int main(){
scanf("%d%d", &n, &m);
for(int i=1; i<=n; i++){
cin>>s;u=1;
for(int j=0; j<s.size(); j++){
int v=s[j]-'a';
if(!g[u][v])g[u][v]=++c;
u=g[u][v];
}
t[u]=1;
}
while(m--){
cin>>s;r=0;
if(q(s)){
printf("-1\n");
continue;
}
for(int i=0; i<26; i++){
r+=q((char)(i+'a')+s);
for(int j=2; j<=s.size(); j++){
s.insert(j,1,i+'a');
r+=q(s);
s.erase(j,1);
}
}
for(int j=0; j<s.size(); j++){
char e=s[j];
s.erase(j,1);
if(q(s)&&!p[s])r++;
p[s]=1;
if(!j)s=e+s;
else s.insert(j,1,e);
}
p.clear();
for(int j=0; j<s.size(); j++){
y=s[j];string::size_type pos=j;
for(int i=0; i<26; i++){
x=(char)(i+'a');
if(x==y)continue;
s.replace(pos,1,1,x);
r+=q(s);
s.replace(pos,1,1,y);
}
}
printf("%d\n", r);
}
return 0;
}