#include<iostream> #include<string> using namespace std; //递归判断是否是同一棵二叉搜索树 //时间复杂度O(nlogn) bool is_same(string a,string b) { if(a==b) return true; if(a[0]!=b[0]) return false; string a1,a2,b1,b2; unsigned i; for(i=1;i<a.size();i++) { if(a[i]>a[0]) a2+=a[i]; else a1+=a[i]; if(b[i]>b[0]) b2+=b[i]; else b1+=b[i]; } if(is_same(a1,b1)&&is_same(a2,b2)) return true; else return false; } int main() { int m; string a,b; while(1) { cin>>m; if(m==0) break; cin>>a; for(int j=0;j<m;j++) { cin>>b; if(is_same(a,b)) cout<<"YES"<<endl; else cout<<"NO"<<endl; } } return 0; } /************************************************************** Problem: 2196 User: admin Language: C++ Result: Compile Error ****************************************************************/