#include <iostream>
#include <cstdio>
#include <queue>

using namespace std;

typedef char ElementType;

/*
 * 二叉树
 */
struct TreeNode {
    ElementType data;
    TreeNode* leftChild;
    TreeNode* rightChild;

    TreeNode(char c) {
        this->data = c;
        this->leftChild = nullptr;
        this->rightChild = nullptr;
    }
};

/**
 * 访问结点
 * @param node
 */
void visit(TreeNode* node);

/**
 * 后序遍历
 * @param root
 */
void postOrder(TreeNode* root);

/**
 * 由先序遍历和中序遍历构建二叉树
 * @param preOrder
 * @param inOrder
 * @return
 */
TreeNode* build(string preOrder, string inOrder) {
    if (preOrder.size() == 0) {
        return nullptr;
    }
    /*
     * 前序遍历的第一个元素必为根
     */
    char cur = preOrder[0];
    TreeNode* root = new TreeNode(cur);
    int pos = inOrder.find(cur);
    /*
     * 分别递归构建左子树和右子树
     * 对于中序遍历而言,假设中序遍历中根节点的索引为index
     * 1. 左子树元素的索引区间是[0, index-1]
     * 2. 右子树元素的索引区间是[index+1, inOrder.size()-1]
     *
     * 对于前序遍历来说,假设中序遍历中根节点的索引为index
     * 1. 左子树元素的索引区间是[1, index-1]
     * 2. 右子树元素的索引区间是[index+1, preOrder.size()-1]
     */
    root->leftChild = build(preOrder.substr(1, pos), inOrder.substr(0, pos));
    root->rightChild = build(preOrder.substr(pos + 1), inOrder.substr(pos + 1));
    return root;
}


/**
 * 遍历--清华大学
 * @return
 */
int main() {
    string preOrder;
    string inOrder;
    while (cin >> preOrder >> inOrder) {
        TreeNode* root = build(preOrder, inOrder);
        postOrder(root);
        cout << endl;
    }

    return 0;
}

void postOrder(TreeNode* root) {
    if (root == nullptr) {
        return;
    }
    /*
     * 先后遍历左子树、右子树、根
     */
    postOrder(root->leftChild);
    postOrder(root->rightChild);
    visit(root);
}

void visit(TreeNode* node) {
    cout << node->data;
}