#include <bits/stdc++.h>
using namespace std;
const int N = 30;
int w1[N], l1[N], r1[N], idx1=1, root1;
int w2[N], l2[N], r2[N], idx2=1, root2;
string pre1;
string pre2;
string in1;
string in2;
void insert1(int &u, int x){
if (!u){
u = idx1 ++;
w1[u] = x;
}
else if (x < w1[u]){
insert1(l1[u], x);
}
else if (x > w1[u]){
insert1(r1[u], x);
}
}
void insert2(int &u, int x){
if (!u){
u = idx2 ++;
w2[u] = x;
}
else if (x < w2[u]){
insert2(l2[u], x);
}
else if (x > w2[u]){
insert2(r2[u], x);
}
}
void pre_order1(int u){
if (!u) return;
// cout << w1[u];
pre1.push_back(char(w1[u]));
pre_order1(l1[u]);
pre_order1(r1[u]);
}
void in_order1(int u){
if (!u) return;
in_order1(l1[u]);
// cout << w1[u];
in1.push_back(char(w1[u]));
in_order1(r1[u]);
}
void pre_order2(int u){
if (!u) return;
// cout << w2[u];
pre2.push_back(char(w2[u]));
pre_order2(l2[u]);
pre_order2(r2[u]);
}
void in_order2(int u){
if (!u) return;
in_order2(l2[u]);
// cout << w2[u];
in2.push_back(char(w2[u]));
in_order2(r2[u]);
}
int main(){
int n;
while (cin >> n){
if (n == 0) break;
string a;
cin >> a;
idx1 = 1;
root1 = 0;
for (int i=0; i<N; i++){
w1[i] = l1[i] = r1[i] = 0;
}
for (auto item:a){
insert1(root1, item -'0');
}
pre1.clear();
in1.clear();
pre_order1(root1);
// puts("");
in_order1(root1);
// puts("");
while (n --){
idx2 = 1;
root2 = 0;
for (int i=0; i<N; i++){
w2[i] = l2[i] = r2[i] = 0;
}
string b;
cin >> b;
for (auto item:b){
insert2(root2, item-'0');
}
pre2.clear();
in2.clear();
pre_order2(root2);
// puts("");
in_order2(root2);
// puts("");
if (pre1 == pre2){
puts("YES");
}
else{
puts("NO");
}
}
}
}