#include<iostream>
#include<string>
using namespace std;
struct TNode{
char cInfo;
TNode * pLeft;
TNode * pRight;
};
#define LEN sizeof(TNode)
typedef TNode * pBTNodePoint;
void vCreate(string sInOrder,string sPostOrder,pBTNodePoint pRoot)
{
char cData;
int nLen,nPos;
string sInOrder1,sInOrder2,sPostOrder1,sPostOrder2;
pBTNodePoint sLeft,sRight;
nLen=sInOrder.size();
cData=sPostOrder[nLen-1];
nPos=sInOrder.find(cData);
pRoot->cInfo=cData;
pRoot->pLeft=NULL;
pRoot->pRight=NULL;
if(nPos>0)
{
sInOrder1=sInOrder.substr(0,nPos);
sPostOrder1=sPostOrder.substr(0,nPos);
sLeft=(struct TNode *)malloc(LEN);
pRoot->pLeft=sLeft;
vCreate(sInOrder1,sPostOrder1,pRoot->pLeft);
}
if(nLen-1>nPos)
{
sInOrder2=sInOrder.substr(nPos+1,nLen-1-nPos);
sPostOrder2=sPostOrder.substr(nPos,nLen-1-nPos);
sRight=(struct TNode *)malloc(LEN);
pRoot->pRight=sRight;
vCreate(sInOrder2,sPostOrder2,pRoot->pRight);
}
}
string sPreOrder(pBTNodePoint pRoot)
{
string ret;
ret="";
if(pRoot!=NULL)
{
ret+=pRoot->cInfo;
ret+=sPreOrder(pRoot->pLeft);
ret+=sPreOrder(pRoot->pRight);
}
return ret;
}
void vOutput(string out)
{
cout << out << endl;
}
void vDelete(pBTNodePoint pRoot)
{
if(pRoot->pLeft!=NULL)
{
vDelete(pRoot->pLeft);
free(pRoot->pLeft);
pRoot->pLeft=NULL;
}
if(pRoot->pRight!=NULL)
{
vDelete(pRoot->pRight);
free(pRoot->pRight);
pRoot->pRight=NULL;
}
}
int main()
{
string sInOrder,sPostOrder;
pBTNodePoint pRoot;
string ans;
while(cin>>sInOrder>>sPostOrder)
{
pRoot=(struct TNode *)malloc(LEN);
vCreate(sInOrder,sPostOrder,pRoot);
ans=sPreOrder(pRoot);
vOutput(ans);
vDelete(pRoot);
free(pRoot);
}
return 0;
}