注意数组范围防止树的退化
#include<iostream>
#include<cstring>
#include<algorithm>
#include<math.h>
using namespace std;
int tre1[300];
int tre2[300];
void build(int *tre,int now,int k)
{
if(tre[now]==-1)
tre[now]=k;
else if(k>tre[now])
{
build(tre,2*now+1,k);
}
else {
build(tre,2*now,k);
}
}
bool check()
{
for(int i=1;i<=256;++i)
{
if(tre1[i]!=tre2[i])
return false;
}
return true;
}
int main()
{
int n;
while(cin>>n&&n)
{
string a;
cin>>a;
memset(tre1,-1,sizeof(tre1));
for(int i=0;i<a.length();++i)
{
build(tre1,1,a[i]-'0');
}
for(int i=1;i<=n;++i)
{
cin>>a;
memset(tre2,-1,sizeof(tre2));
for(int i=0;i<a.length();++i)
{
build(tre2,1,a[i]-'0');
}
if(check())
cout<<"YES";
else cout<<"NO";
cout<<endl;
}
}
return 0;
}