![]()
#include<cstdio>
#include<cstring>
struct node{
node *lchild;
node *rchild;
int r;
}tree[22];
int loc;
int pre[11];
int ino[11];
int post[11];
int pre2[11];
int ino2[11];
int post2[11];
int pos;
node *create()
{
tree[loc].lchild = tree[loc].rchild = NULL;
return &tree[loc ++];
}
node *build(node *t, int x)
{
if(t == NULL)
{
t = create();
t -> r = x;
return t;
}
else
{
if(x < t -> r)
t -> lchild = build(t -> lchild , x);
if(x > t -> r)
t -> rchild = build(t -> rchild , x);
return t;
}
}
void preOrder(node *t)
{
pre[pos ++] = t -> r;
if(t -> lchild != NULL)
preOrder(t -> lchild);
if(t -> rchild != NULL)
preOrder(t -> rchild);
}
void inOrder(node *t)
{
if(t -> lchild != NULL)
inOrder(t -> lchild);
ino[pos ++] = t -> r;
if(t -> rchild != NULL)
inOrder(t -> rchild);
}
void postOrder(node *t)
{
if(t -> lchild != NULL)
postOrder(t -> lchild);
if(t -> rchild != NULL)
postOrder(t -> rchild);
post[pos++] = t -> r;
}
void preOrder2(node *t)
{
pre2[pos ++] = t -> r;
if(t -> lchild != NULL)
preOrder2(t -> lchild);
if(t -> rchild != NULL)
preOrder2(t -> rchild);
}
void inOrder2(node *t)
{
if(t -> lchild != NULL)
inOrder2(t -> lchild);
ino2[pos ++] = t -> r;
if(t -> rchild != NULL)
inOrder2(t -> rchild);
}
void postOrder2(node *t)
{
if(t -> lchild != NULL)
postOrder2(t -> lchild);
if(t -> rchild != NULL)
postOrder2(t -> rchild);
post2[pos ++] = t -> r;
}
int main()
{
char s[11];
int n;
while(scanf("%d",&n) != EOF)
{
if(n == 0)
break;
loc = 0;
getchar();
gets(s);
node *t = NULL;
for(int i = 0; i < strlen(s); i ++)
{
int x = s[i] - '0';
t = build(t ,x);
}
pos = 0;
preOrder(t);
pos = 0;
inOrder(t);
pos = 0;
postOrder(t);
int rec = loc;
char s1[11];
for(int i = 0; i < n; i ++)
{
loc = rec;
memset(s1,'\0',sizeof(s1));
memset(pre2,0,sizeof(pre2));
memset(ino2,0,sizeof(ino2));
memset(post2,0,sizeof(post2));
gets(s1);
node *p = NULL;
for(int i = 0; i < strlen(s1); i ++)
{
int x = s1[i] - '0';
p = build(p ,x);
}
pos = 0;
preOrder2(p);
pos = 0;
inOrder2(p);
pos = 0;
postOrder2(p);
bool flag = true;
for(int i = 0; i < strlen(s); i ++)
{
if((pre[i] != pre2[i]) || (ino[i] != ino2[i]) || (post[i] != post2[i]))
{
flag = false;
break;
}
}
if(flag == true)
printf("YES\n");
else
printf("NO\n");
}
}
return 0;
}