#include<bits/stdc++.h>
#define maxn 335
using namespace std;
int n;
int lod[maxn];//后序序列
int mod[maxn];//先序序列
int cnt=0;
struct node//结点结构体
{
int l;
int r;
int v;
node (): l(0) , r(0) {}
};
node data[maxn];
int dfs(int la[],int mo[], int len)
{
//该结点不存在
if(len<=0)
return -1;
int k=0;
//后序的最后一个结点就是根节点,找到根节点在中序序列中的位置
for(int i=0;i<len;i++)
{
if(la[len-1]==mo[i])
{
k=i;
break;
}
}
int rt = cnt++;
data[rt].v=mo[k];
//左子树从中序的左半边里找
data[rt].l=dfs(la,mo,k);
//右子树从中序的右半边里找
data[rt].r=dfs(la+k,mo+k+1,len-k-1);
return rt;
}
int main()
{
cin >> n;
for(int i = 0 ; i < n ; ++i)
scanf("%d",&lod[i]);
for(int i = 0 ; i < n ; ++i)
scanf("%d",&mod[i]);
int rt = dfs(lod,mod,n);
queue<int> q;
q.push(rt);
bool first = 1;
//层序遍历
while (!q.empty())
{
int fr=q.front();
q.pop();
if(data[fr].l!=-1)
q.push(data[fr].l);
if (data[fr].r!=-1)
q.push(data[fr].r);
if(first)
first=0;
else printf(" ");
printf("%d",data[fr].v);
}
printf("\n");
}