#include<bits/stdc++.h>
using namespace std;
const int N = 3e6+5;
int t[N][70],f[N];
int n,q,tot=1;
char str[N];
void Insert(char *s){
int p = 1,len = strlen(s);
for(int i = 0;i < len;i ++){
int c;
if('A'<=s[i]&&s[i]<='Z')c = s[i]-'A';
if('a'<=s[i]&&s[i]<='z')c = s[i]-'a'+26;
else c = s[i] - '0' + 52;
if(t[p][c] == 0)t[p][c] = ++tot;
p = t[p][c];
f[p] ++;
}
}
int ans;
/*
void dfs(int x){
f[x] = siz[x];
for(int i = 0;i < 62;i ++){
int v = t[x][i];
if(v == 0)continue;
dfs(v);
f[x]+=f[v];
}
}
*/
int solve(char *s){
int len = strlen(s),p =1;
for(int i = 0;i < len;i ++){
int c;
if('A'<=s[i]&&s[i]<='Z')c = s[i]-'A';
if('a'<=s[i]&&s[i]<='z')c = s[i]-'a'+26;
else c = s[i] - '0' + 52;
if(t[p][c] == 0)return 0;
p = t[p][c];
}
return f[p];
}
int main(){
int T;
cin >> T;
while(T--){
scanf("%d%d",&n,&q);
for(int i = 0;i <= tot;i ++)f[i] = 0;
for(int i = 0;i <= tot;i ++)for(int j = 0;j <= 66;j ++)t[i][j] = 0;
tot=1;
for(int i = 1;i <= n;i ++){
scanf("%s",str);
Insert(str);
}
for(int i = 1;i <= q;i ++){
scanf("%s",str);
ans = solve(str);
printf("%d\n",ans);
}
}
return 0;
}
大佬帮调一下吧,谢谢!