/**
* https://www.luogu.com.cn/problem/P8306
*/#include<bits/stdc++.h>#defineintlonglongusingnamespace std;//空间怎么看开多大?看数据范围 输入总字符串总长度不超过3e6constint N =3e6+10;int son[N][65], cnt[N], idx;intget(char c){if(c >='a'&& c <='z')return c -'a';if(c >='A'&& c <='Z')return c -'A'+26;if(c >='0'&& c <='9')return c -'0'+26+26;}voidinsert(string s){int x =0;for(char c: s){int y =get(c);if(!son[x][y]) son[x][y]=++idx;
x = son[x][y];
cnt[x]++;}}intquery(string s){int x =0;for(auto c: s){int y =get(c);if(!son[x][y])return0;
x = son[x][y];}return cnt[x];}voidsolve(){int n, q;
cin >> n >> q;
string s;while(n--){ cin >> s,insert(s);}while(q--){ cin >> s, cout <<query(s)<<'\n';}//清空字典树,不使用memset,使用forfor(int i =0; i <= idx; i++){for(int j =0; j <63; j++){
son[i][j]=0;}}for(int i =0; i <= idx; i++) cnt[i]=0;
idx =0;}signedmain(){#ifndefONLINE_JUDGEfreopen("test.in","r",stdin);freopen("test.out","w",stdout);#endif
cin.tie(0), cout.tie(0), ios::sync_with_stdio(false);int t;
cin >> t;while(t--)solve();return0;}
/**
* https://www.acwing.com/problem/content/145/
*/#include<bits/stdc++.h>#defineintlonglongusingnamespace std;constint N =1e5+10;int son[N *32][2], idx;voidinsert(int t){int x =0;for(int i =30; i >=0; i--){int y = t >> i &1;if(!son[x][y]) son[x][y]=++idx;
x = son[x][y];}}intquery(int t){int x =0, res =0;for(int i =30; i >=0; i--){int y = t >> i &1;if(son[x][!y]){//另一个存在
res = res *2+!y;
x = son[x][!y];}else{
res = res *2+ y;
x = son[x][y];}}return res;}signedmain(){#ifndefONLINE_JUDGEfreopen("test.in","r",stdin);freopen("test.out","w",stdout);#endifint n;
cin >> n;
vector<int>a(n);for(int i =0; i < n;++i)cin >> a[i];for(int i =0; i < n;++i)insert(a[i]);int mx =0;for(int i =0; i < n;++i) mx =max(mx, a[i]^query(a[i]));
cout << mx << endl;return0;}
#include<bits/stdc++.h>usingnamespace std;typedefstructedge{int to, w;} edge;constint N =1e5+10;int son[N *31][2], cnt[N], idx;int sum[N];// 存到根节点到异或值
vector<edge> e[N];int n;voiddfs(int x,int fa){for(auto[y, w]: e[x]){if(y == fa)continue;
sum[y]= sum[x]^ w;dfs(y, x);}}voidinsert(int t){int x =0;for(int i =30; i >=0; i--){int y = t >> i &1;if(!son[x][y]) son[x][y]=++idx;
x = son[x][y];}}intquery(int t){int x =0, res =0;for(int i =30; i >=0; i--){int y = t >> i &1;if(son[x][!y]){
res +=1<< i;
x = son[x][!y];}else{
x = son[x][y];}}return res;}signedmain(){#ifndefONLINE_JUDGEfreopen("test.in","r",stdin);freopen("test.out","w",stdout);#endif
cin >> n;for(int i =1; i <= n -1; i++){int x, y, w;
cin >> x >> y >> w;
e[x].push_back({y, w});
e[y].push_back({x, w});}dfs(1,0);for(int i =1; i <= n; i++)insert(sum[i]);int res =0;for(int i =1; i <= n; i++) res =max(res,query(sum[i]));
cout << res << endl;return0;}