#include<cstdio> #include<string> using namespace std; struct TreeNode{ char data; TreeNode * leftChild; TreeNode * rightChild; }; void insertBST(TreeNode *&root, char data){ TreeNode *pNewNode = new TreeNode; pNewNode->data = data; pNewNode->leftChild = NULL; pNewNode->rightChild=NULL; if(root == NULL){ root = pNewNode; } else{ TreeNode *pPre = root; TreeNode *pCur; while (true){ if (data < pPre->data){ pCur = pPre->leftChild; if(pCur == NULL){ pPre->leftChild = pNewNode; break; } else{ pPre = pCur; } } else{ pCur = pPre->rightChild; if (pCur == NULL){ pPre->rightChild = pNewNode; break; } else{ pPre = pCur; } } } } } string InOrder(TreeNode *root){ if(root == NULL){ return ""; } return InOrder(root->leftChild) + root->data + InOrder(root->rightChild); } string PreOrder(TreeNode *root){ if(root == NULL){ return ""; } return root->data + PreOrder(root->leftChild) + PreOrder(root->rightChild); } int main(){ int n; while(scanf("%d",&n) != EOF){ if (n==0){ break; } char str1[100]; scanf("%s",str1); TreeNode *root1 = NULL; for (int i=0; str1[i] != '\0'; ++i){ insertBST(root1,str1[i]); } string PreOrder1 = PreOrder(root1); string InOrder1 = InOrder(root1); //printf("%s %s\n",PreOrder1.c_str(),InOrder1.c_str()); char str2[100]; for(int idx = 0; idx < n; ++idx){ scanf("%s",str2); TreeNode *root2 = NULL; for(int i = 0; str2[i] != '\0'; ++i){ insertBST(root2,str2[i]); } string PreOrder2 = PreOrder(root2); string InOrder2 = InOrder(root2); if(PreOrder1 == PreOrder2 && InOrder1 == InOrder2){ printf("YES\n"); } else{ printf("NO\n"); } } } }