#include<bits/stdc++.h>
using namespace std;
struct node
{
node *next[26];
int flag;
};
node root;
string str[100];
void build(string s)
{
node *p = &root;
int len = s.size();
for(int i = 0; i < len; i++)
{
int id = s[i] - 'a';
if(p->next[id] == NULL)
{
node *tmp = new node;
for(int j = 0; j < 26; j++)
tmp->next[j] = NULL;
tmp->flag = 0;
p->next[id] = tmp;
p = p->next[id];
}
else
p = p->next[id];
}
p->flag = 1;
}
bool Find(string s)
{
node *p = &root;
int len = s.size();
for(int i = 0; i < len; i++)
{
int id = s[i] - 'a';
if(p->next[id] == NULL)
return 0;
p = p->next[id];
}
if(!p->flag)
return 0;
return 1;
}
void xianshi(node*p)
{
for(int i = 0; i < 26; i++)
if(p->next[i])
{
printf("%c",i+'a');
xianshi(p->next[i]);
}
}
int main()
{
int n;
memset(root.next,0,sizeof(root.next));
root.flag = 0;
scanf("%d",&n);
for(int i = 0; i < n; i++)
{
cin>>str[i];
build(str[i]);
}
xianshi(&root);
string s;
while(cin>>s)
{
if(Find(s))
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
using namespace std;
struct node
{
node *next[26];
int flag;
};
node root;
string str[100];
void build(string s)
{
node *p = &root;
int len = s.size();
for(int i = 0; i < len; i++)
{
int id = s[i] - 'a';
if(p->next[id] == NULL)
{
node *tmp = new node;
for(int j = 0; j < 26; j++)
tmp->next[j] = NULL;
tmp->flag = 0;
p->next[id] = tmp;
p = p->next[id];
}
else
p = p->next[id];
}
p->flag = 1;
}
bool Find(string s)
{
node *p = &root;
int len = s.size();
for(int i = 0; i < len; i++)
{
int id = s[i] - 'a';
if(p->next[id] == NULL)
return 0;
p = p->next[id];
}
if(!p->flag)
return 0;
return 1;
}
void xianshi(node*p)
{
for(int i = 0; i < 26; i++)
if(p->next[i])
{
printf("%c",i+'a');
xianshi(p->next[i]);
}
}
int main()
{
int n;
memset(root.next,0,sizeof(root.next));
root.flag = 0;
scanf("%d",&n);
for(int i = 0; i < n; i++)
{
cin>>str[i];
build(str[i]);
}
xianshi(&root);
string s;
while(cin>>s)
{
if(Find(s))
printf("YES\n");
else
printf("NO\n");
}
return 0;
}