#include <string>
using namespace std;
struct TreeNode{
char data;
TreeNode * leftChild;
TreeNode * rightChild;
};
TreeNode * rebuild(string preorder,string inorder){
//返回子树根节点的地址
if (preorder.size() == 0){
return NULL;
} else{
//从先序中确定根
char rootdata=preorder[0];
TreeNode *PNewTreeNode = new TreeNode;//在堆上面申请一个新的二叉树节点
PNewTreeNode->data=rootdata;
//拿根去切割中序
int weizhi =inorder.find(rootdata);//weizhi是根在中序序列中出现的下标
// preorder.substr(1,weizhi);//将preorder切割,取出从下标1开始,长度为weizhi的子串
PNewTreeNode->leftChild = rebuild(preorder.substr(1,weizhi),inorder.substr(0,weizhi));
PNewTreeNode->rightChild= rebuild(preorder.substr(weizhi+1),inorder.substr(weizhi+1));
return PNewTreeNode;
}
}
void postOrder(TreeNode *root){
if (root == NULL){
return;
} else{
postOrder(root->leftChild);
postOrder(root->rightChild);
printf("%c",root->data);
}
}
int main(){
char PreOrder[30];
char InOrder[30];
while (scanf("%s%s",PreOrder,InOrder)!=EOF){
TreeNode * root = rebuild(PreOrder,InOrder);
postOrder(root);
printf("\n");
}
}