voidinsert(char *s, int n) { int p = 0; for (int i=0; i<n; i++) { int c = s[i] - 'a'; if (!tree[p][c]) tree[p][c] = ++cnt; p = tree[p][c]; } exist[p]++; }
intsearch(char *s, int n) { int p = 0; for (int i=0; i<n; i++) { int c = s[i] - 'a'; if (!tree[p][c]) return0; p = tree[p][c]; } return exist[p]; }
char s[mxn]; int tree[100000][26], exist[100000], cnt = 0;
voidinsert(char *s, int n) { int p = 0; for (int i=0; i<n; i++) { int c = s[i] - 'a'; if (!tree[p][c]) tree[p][c] = ++cnt; p = tree[p][c]; } exist[p]++; }
intsearch(char *s, int n) { int p = 0; for (int i=0; i<n; i++) { int c = s[i] - 'a'; if (!tree[p][c]) return0; p = tree[p][c]; } return exist[p]; }
intmain() { int n, m; scanf("%d %d", &n, &m); for(int i=0; i<n; i++){ scanf("%s", s); insert(s, strlen(s)); } for(int i=0; i<m; i++){ scanf("%s", s); printf("%d\n", search(s, strlen(s))); } return0; }