#include <iostream>//建树,使用前序遍历,判断前序遍历结果是否相同 #include <algorithm> #include <cmath> #include <cstring> using namespace std; // 5 5 5 // 4 6 4 6 3 7 // 3 7 3 7 2 4 6 // 2 2 typedef struct Node { char c; Node* l; Node* r; } TN; TN* Buiid(TN* root, char c) { if (root == NULL) { root = new TN(); root->c = c; } else if (c < root->c)root->l = Buiid(root->l, c); else if (c > root->c)root->r = Buiid(root->r, c); return root; } string ans1 = ""; //存放前序遍历结果 void preOrder(TN* root) { if (root == NULL)return; ans1 = ans1 + root->c; // cout<<root->c<<" "; preOrder(root->l); preOrder(root->r); } int main() { int n; string s; while (cin >> n && n) { cin >> s; TN* tree = NULL; for (int i = 0; i < s.size(); i++) { tree = Buiid(tree, s[i]); } preOrder(tree); string ans = ans1; for (int i = 0; i < n; i++) { string tre; ans1 = ""; cin >> tre; TN* tree1 = NULL; for(int i=0;i<tre.size();i++) { tree1 = Buiid(tree1,tre[i]); } preOrder(tree1); string ans2 = ans1; if(ans1==ans)cout<<"YES"<<endl; else cout<<"NO"<<endl; } } } // 64 位输出请用 printf("%lld")