//土尔逊Torson 编写于2023/06/10
#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <string>

using namespace std;

struct TreeNode10701 {
	char data;
	TreeNode10701 * leftChild;
	TreeNode10701 * rightChild;
};

void insertBST10701(TreeNode10701 *&root, char data) {
	TreeNode10701 *pNewNode = new TreeNode10701;
	pNewNode->data = data;
	pNewNode->leftChild = NULL;
	pNewNode->rightChild = NULL;
	if (root == NULL) {
		root = pNewNode;
	}
	else {
		TreeNode10701 *pPre = root;
		TreeNode10701 *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 InOrder10701(TreeNode10701 *root) {
	if (root == NULL) {
		return "";
	}
	return InOrder10701(root->leftChild) + root->data + InOrder10701(root->rightChild);
}

string PreOrder10701(TreeNode10701 *root) {
	if (root == NULL) {
		return "";
	}
	return root->data + PreOrder10701(root->leftChild) + PreOrder10701(root->rightChild);
}

int main() {
	int n;
	while (scanf("%d", &n) != EOF) {
		if (n == 0) {
			break;
		}
		char str1[100];
		scanf("%s", str1);
		TreeNode10701 *root1 = NULL;
		for (int i = 0; str1[i] != '\0'; ++i) {
			insertBST10701(root1, str1[i]);
		}
		string preOrder1 = PreOrder10701(root1);
		string inOrder1 = InOrder10701(root1);

		char str2[100];
		for (int idx = 0; idx < n; ++idx) {
			scanf("%s", str2);
			TreeNode10701 *root2 = NULL;
			for (int i = 0; str2[i] != '\0'; ++i) {
				insertBST10701(root2, str2[i]);
			}
			string preOrder2 = PreOrder10701(root2);
			string inOrder2 = InOrder10701(root2);
			if (preOrder1 == preOrder2 && inOrder1 == inOrder2) {
				printf("YES\n");
			}
			else {
				printf("NO\n");
			}
		}
	}
}
// 64 位输出请用 printf("%lld")