#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
const int M = 200;
vector<int>que[M];
char str[M];
int vist[M];
int num[M];
int ans[M];
char str1[M];
int du[M];
int k;
void init() {
k = 0;
memset(vist, 0, sizeof(vist));
memset(du, 0, sizeof(du));
for(int i = 0; i < M; i++)
que[i].clear();
}
void check(int i, int d) {
for(int j = 0; j < (int)que[i].size(); j++){
du[que[i][j]]+=d;
}
}
void dfs(int cnt, int t){
ans[cnt] = num[t];
if(cnt == k -1){
for(int i = 0; i < k; i++)
printf("%c", ans[i] + 'a');
printf("\n");
return ;
}
for(int i = 0; i < k; i++) {
int d = num[i];
if(!vist[d] && !du[d]){
vist[d] = 1;
check(d, -1);
dfs(cnt+1, i);
vist[d] = 0;
check(d, 1);
}
}
}
int main()
{
while(gets(str)){
gets(str1);
init();
int len = strlen(str);
for(int i = 0; i < len; i++)
if(str[i] >= 'a' && str[i] <= 'z')
num[k++] = str[i] - 'a';
sort(num, num + k); //用先进行排序;
len = strlen(str1);
for(int i = 0; i < len; i+=4){
que[str1[i] - 'a'].push_back(str1[i+2] - 'a');
du[str1[i+2] - 'a']++;
}
for(int i = 0; i < k; i++){
int d = num[i];
if(!vist[d] && !du[d]){
vist[d] = 1;
check(d,-1);
dfs(0, i);
vist[d] = 0;
check(d, 1);
}
}
printf("\n");
}
return 0;
}