#include<iostream>
#include<vector>
using namespace std;
struct TreeNode
{
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(int i)
    {
        val=i;
        left=NULL;
        right=NULL;
    }
};
TreeNode* buildTree(vector<int>& pre, vector<int>& in, int pre_s, int pre_e, int in_s, int in_e)
{
    if(pre_s > pre_e)
    {
        return NULL;
    }
    else if(pre_s == pre_e)
    {
        TreeNode* n = new TreeNode(pre[pre_s]);
        return n;
    }
    int inX = in_s;
    for(; inX <= in_e; inX++)
    {
        if(pre[pre_s] == in[inX])
        {
            break;
        }
    }
    int L1 = inX - in_s;
    TreeNode* n = new TreeNode(pre[pre_s]);
    n->left = buildTree(pre,in,pre_s+1,pre_s+L1,in_s,inX-1);
    n->right = buildTree(pre,in,pre_s+L1+1,pre_e,inX+1,in_e);
    return n;
}
int dfs(TreeNode* root)
{
    if(root == NULL) return 0;
    int sum = 0;
    sum += dfs(root->left);
    sum += dfs(root->right);
    int tmp = root->val + sum;
    root->val = sum;
    return tmp;
}
void print(TreeNode* root)
{
    if(root == NULL) return;
    print(root->left);
    cout<<root->val<<" ";
    print(root->right);
}
int main()
{
    vector<int> pre, in;
    int x;
    while(cin>>x)
    {
        //cout << x << endl;
        pre.push_back(x);
        if(cin.get()=='\n')
            break;
    }
    
    int n = pre.size();
    for(int i = 0; i < n; i++)
    {
        int x;
        cin >> x;
        //cout << x << endl;
        in.push_back(x);
    }
    TreeNode* root = buildTree(pre, in, 0, n-1, 0, n-1);
    //print(root);
    dfs(root);
    print(root);
    
}