#include<cstdio>
#include<string>
using namespace std;
struct TreeNode {
char data;
TreeNode* LChild;
TreeNode* RChild;
};
TreeNode* rebuild(string PreOrder, string MidOrder ) {
//rebuild返回子树根节点地址
if (PreOrder.size() == 0) {
return NULL;
} else {
//从先序中确定根
char rootnode = PreOrder[0];
TreeNode* pa = new TreeNode;//在堆上申请新的二叉树结点
pa->data = rootnode;
//拿rootnode切割中序(根)
int pos = MidOrder.find(rootnode);//rootnode在中序中的下标
//PreOrder.substr(1,pos);//substr 切割从a开始长度为b的字串
//PreOrder.substr(pos+1);//到最后
pa->LChild = rebuild(PreOrder.substr(1, pos), MidOrder.substr(0, pos));
//递归处理左边左孩子
pa->RChild = rebuild(PreOrder.substr(pos + 1), MidOrder.substr(pos + 1));
//递归处理右孩子
return pa;//返回根的值
}
}
void LasOrder(TreeNode* root) {
if (root == NULL) {
return;
}
LasOrder(root->LChild);
LasOrder(root->RChild);
printf("%c", root->data);
}
int main() {
char MidOrder[30];
char PreOrder[30];
while (scanf("%s%s", PreOrder, MidOrder) != EOF) {
TreeNode* root ;
root = rebuild(PreOrder, MidOrder);
LasOrder(root);
printf("\n");
}
}