#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
char s[150];
int sufix[30][30],ind[30], topo[30];
int n=0;
void print(){
for(int i=0;i<n;++i) printf("%c",'a'+topo[i]);
printf("\n");
}
void dfs(int d){
if(d==n) { print();return ;}
for(int i=0;i<26;++i) if(ind[i]==0){
topo[d]=i;
--ind[i];
for(int j=1;j<=sufix[i][0];++j) {
--ind[sufix[i][j]];
}
dfs(d+1);
for(int j=1;j<=sufix[i][0];++j) {
++ind[sufix[i][j]];
}
++ind[i];
}
}
int main(){
int kase=0;
while(gets(s)){// printf("%s\n",s);
// if(++kase) printf("\n");
int len=strlen(s);
memset(ind,-1,sizeof(ind));
memset(sufix,-1,sizeof(sufix));
n=0;
for(int i=0;i<len;++i) {
if(s[i]>='a'&&s[i]<='z') {sufix[s[i]-'a'][0]=0;ind[s[i]-'a']=0; ++n;}
}
gets(s);
len=strlen(s);
int last=-1;
for(int i=0;i<len;++i) {
if(s[i]>='a'&&s[i]<='z'){
if(last ==-1) last =s[i]-'a';
else {
sufix[last][++sufix[last][0]]=s[i]-'a';
++ind[s[i]-'a'];
last=-1;
}
}
}
dfs(0);
printf("\n");
}
return 0;
}
sufix[0]代表字母’a’+i的出度个数,-1表示不出现,ind代表入度个数。