Wa on #2, #3,#4
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 1, M = 63;
int T, n, q, nxt[N * M][M], cnt, fin[N * M], len, x, p;
string s;
inline void init(){
for(int i = 0; i <= cnt; i++){
fin[i] = 0;
for(int j = 1; j <= 62; j++) nxt[i][j] = 0;
}
cnt = 0;
}
inline int work(char c){
if('a' <= c && c <= 'z') return c - 'a' + 1;
if('A' <= c && c <= 'Z') return c - 'A' + 27;
return c - '0' + 53;
}
inline void upd(){
p = 0;
for(int i = 0; i < len; i++){
x = work(s[i]);
if(!nxt[p][x]) nxt[p][x] = ++cnt;
p = nxt[p][x];
fin[p]++;
}
}
inline int query(){
int res = 0;
p = 0;
for(int i = 0; i < len; i++){
x = work(s[i]);
if(!nxt[p][x]) return 0;
p = nxt[p][x];
}
return fin[p];
}
int main(){
scanf("%d", &T);
while(T--){
init();
scanf("%d%d", &n, &q);
for(int i = 1; i <= n; i++){
cin >> s;
len = s.size();
upd();
}
for(int i = 1; i <= q; i++){
cin >> s;
len = s.size();
printf("%d\n", query());
}
}
return 0;
}