记录
#include<bits/stdc++.h>
using namespace std;
map<char,int> m;
int n,l[100],la,head=0,tail=0,quea[10000],queb[10000],last[10000];string a,b[100];
bool pd(int ll,int i){
for(int j=0;j<l[i];j++)if(int(a[ll+j]-'0')!=m[b[i][j]])return 0;
return 1;
}
void print(int know){
if(last[know]==-1)return;
print(last[know]);
cout<<b[quea[know]];
return;
}
int main(){
int j=1;
for(char i='a';i<='z';i++){
m[i]=j;
if(i=='c'||i=='f'||i=='i'||i=='l'||i=='n'||i=='q'||i=='t'||i=='w'||i=='z')j++;
}
cin>>n>>a;
la=a.size();
for(int i=0;i<n;i++){
cin>>b[i];
l[i]=b[i].size();
}
last[0]=-1;
while(head<=tail){
int ll=queb[head];
for(int i=0;i<n;i++)if(ll+l[i]<=la&&pd(ll,i)){
tail++;
quea[tail]=i;
queb[tail]=ll+l[i];
last[tail]=head;
if(queb[tail]==la)return print(tail),0;
}
head++;
}
cout<<"No Solutions!";
return 0;
}