#include<stdio.h>
#include<stdlib.h>
struct cell
{
char letter;
int count;
struct cell *next[26];
};
int main()
{
int add(char *ch,struct cell *root);
int search(struct cell *root ,char *ch);
int n,m,i;
int *arr;
struct cell *root;
root = (struct cell *)malloc(sizeof(struct cell));
for(i = 0;i<26 ;i++)
{
root->next[i] = NULL;
}
char ch[10];
scanf("%d",&n);
for( i = 0;i < n;i++)
{
scanf("%s",&ch);
add(ch,root);
}
scanf("%d",&m);
arr = (int *) malloc(sizeof(int) * n);
for( i=0;i<m;i++)
{
scanf("%s",&ch);
printf("%d\n",search(root,ch));
}
return 0;
}
int add(char *ch,struct cell *root)
{
struct cell *p1,*p2,*header,*tmp;
int i,j,k;
for(i=0;i<10;i++)
{
if(ch[0] == '\0')
{
break;
}
for(j = 0; j<26;j++)
{
//tmp = (struct cell*) malloc(24*sizeof(struct cell));
if(i == 0)
tmp = root;
else
tmp = p1;
if(NULL != tmp->next[j])
{
if((tmp->next[j])->letter == ch[0])
{
(tmp->next[j])->count++;
ch++;
p1 = tmp->next[j];
break;
}
}
else
{
p1 = (struct cell *)malloc(sizeof(struct cell));
p1->count = 1;
p1->letter = ch[0];
for(k = 0;k<26 ;k++)
{
p1->next[k] = NULL;
}
tmp->next[j] = p1;
ch++;
break;
}
}
}
return 0;
}
int search(struct cell *root,char *ch)
{
int i,j,k;
k = 0;
struct cell *p;
p = root;
for(i = 0;i<10;i++)
{
if(ch[0] == '\0')
{
return p->count;
break;
}
for(j = 0;j < 26; j++)
{
if(NULL != p->next[j])
{
if(p->next[j]->letter == ch[0])
{
p = p->next[j];
break;
}
}
else
{
return 0;
break;
}
}
ch++;
}
}