#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <string>
#include <vector>
#include <queue>
#include <sstream>
#include <stack>
#include <map>
#include <ctime>
#include <array>
#include <set>
#include <list>
using namespace std;
map<string, int> Index;
template <class ElemType>
struct treepoint
{
ElemType data;
struct treepoint *lchild, *rchild;
};
template <class ElemType>
treepoint<ElemType> *create(vector<ElemType> &inorder, int is, int ie, vector<ElemType> &postorder, int ps, int pe)
{
if (is > ie)
return NULL;
ElemType data1 = postorder[pe];
int mid;
for (int i = is; i <= ie; i++)
if (inorder[i] == data1)
{
mid = i;
break;
}
treepoint<ElemType> *root = new treepoint<ElemType>;
root->data = data1;
root->lchild = create(inorder, is, mid - 1, postorder, ps, ps + mid - is - 1);
root->rchild = create(inorder, mid + 1, ie, postorder, ps + mid - is, pe - 1);
return root;
}
int flag = 1;
template <class ElemType>
void output(treepoint<ElemType> *t)
{
if (t == NULL)
;
else
{
if (flag)
{
cout << t->data;
flag = 0;
}
else
cout << "," << t->data;
output(t->lchild);
output(t->rchild);
}
}
vector<string> change(string s)
{
vector<string> ss;
string str;
stringstream input;
input.str(s);
while (input >> str)
ss.push_back(str);
return ss;
}
int main()
{
string in, pn;
getline(cin, in);
getline(cin, pn);
vector<string> v, u;
v.clear();
u.clear();
v = change(in);
u = change(pn);
int len1 = v.size();
int len2 = u.size();
treepoint<string> *t;
t = create(v, 0, len1 - 1, u, 0, len2 - 1);
output(t);
cout << endl;
return 0;
}