#define _CRT_SECURE_NO_WARNINGS
#include "stdlib.h"
#include "stdio.h"
//搜索树表示
typedef struct TreeNode *Tree;
struct TreeNode
{
int v;
Tree left;
Tree right;
int flag;//未被访问为0,访问过为1;
};
Tree NewNode(int V);
Tree Insert(Tree T, int V);
int check(Tree T, int V);
int Judge(Tree T, int N);
Tree MakeTree(int N)//建树
{
Tree T;
int i, V;
scanf("%d", &V);
T = NewNode(V);
for (i = 1; i < N; i++)
{
scanf("%d", &V);
T = Insert(T, V);
}
return T;
}
Tree Insert(Tree T, int V)//插入数据
{
if (!T)
T = NewNode(V);
else
{
if (V > T->v)
T->right = Insert(T->right, V);
else
T->left = Insert(T->left, V);
}
return T;
}
Tree NewNode(int V)//建立新结点
{
Tree T= (Tree)malloc(sizeof(struct TreeNode));
T->v = V;
T->left = T->right = NULL;
T->flag = 0;//未被访问0,访问过1;
return T;
}
//若碰到新出现的结点。
int check(Tree T, int V)//检查顺序是否一致
{
if (T->flag)
{
if (V > T->v)
return check(T->right, V);
else if (V < T->v)
return check(T->left, V);
else
return 0;
}
else if (V == T->v)
{
T->flag = 1;
return 1;
}
else
return 0;
}
int Judge(Tree T, int N)//判断check
{
int i, V, flag = 0;
scanf("%d", &V);
if (V != T->v)
flag = 1;
else T->flag = 1;
for (i = 1; i < N; i++)
{
scanf("%d", &V);
if ((!flag) && (!check(T,V)))
flag = 1;
}
if (flag)
return 0;
else return 1;
}
void ResetT(Tree T)//清楚T中各节点的flag标记
{
if (T->left)
ResetT(T->left);
if (T->right)
ResetT(T->right);
T->flag = 0;
}
void FreeTree(Tree T)//释放T的空间
{
if (T->left)
FreeTree(T->left);
if (T->right)
FreeTree(T->right);
free(T);
}
int main()
{
int N, L, i;
Tree T;
scanf("%d", &N);
while (N)
{
scanf("%d", &L);
T = MakeTree(N);
for ( i = 0; i < L; i++)
{
if (Judge(T, N))
printf("Yes\n");
else
printf("No\n");
ResetT(T);
}
FreeTree(T);
scanf("%d", &N);
}
return 0;
}