/**************************************************************** 
 * Description: 洛谷P1827
 * 这个程序的核心是dfs函数，它通过递归地划分中序和前序遍历字符串，来确定每个子树的根节点，
 * 然后按照后序遍历的顺序输出节点。在每次递归调用中，程序先处理左子树，然后处理右子树，最后访问根节点。
 * 这样递归地进行，直到处理完所有的节点，从而得到完整的后序遍历序列。
 * Author: Alex Li
 * Date: 2024-01-24 08:49:19
 * LastEditTime: 2024-01-24 09:39:53
****************************************************************/

#include<iostream>
#include<string>
using namespace std;

string inOrder, preOrder; // 定义两个字符串变量，分别存储中序和前序遍历的结果

// dfs 函数用于递归地构建后序遍历
void dfs(int l1, int l2, int l3, int l4){
    if(l1 > l2 || l3 > l4) return; // 递归终止条件，当遍历的子串为空时返回

    // 遍历中序遍历的字符串
    for(int i = l1; i <= l2; i++)
        // 找到前序遍历中的根节点在中序遍历中的位置
        if(inOrder[i] == preOrder[l3]){
            // 递归处理左子树
            dfs(l1, i - 1, l3 + 1, l3 + i - l1);
            // 递归处理右子树
            dfs(i + 1, l2, l3 + i - l1 + 1, l4);
            // 输出根节点，构造后序遍历
            cout << inOrder[i];
        }
}

int main(){
    // 读取中序和前序遍历字符串
    cin >> inOrder >> preOrder;
    // 获取遍历字符串的长度
    int l = inOrder.size();
    // 调用dfs函数构造后序遍历
    dfs(0, l - 1, 0, l - 1);
    return 0;
}
