#include <cstdio>
#include <queue>
using namespace std;
#define MAX 40
struct node{
int data;
int lchild;
int rchild;
}tree[MAX];
int post[MAX];
int in[MAX];
int n;
int index=0;
int newNode(){
tree[index].lchild=-1;
tree[index].rchild=-1;
return index++;
}
int create(int pol,int por,int inl,int inr){
if(pol>por){
return -1;
}
int root=newNode();
tree[root].data=post[por];
int k;
for(k=inl;k<=inr;k++){
if(in[k]==post[por]){
break;
}
}
int num=k-inl;
tree[root].lchild=create(pol,pol+num-1,inl,k-1);
tree[root].rchild=create(pol+num,por-1,k+1,inr);
return root;
}
void bfs(int root){
int cnt=0;
queue <int> q;
q.push(root);
while(!q.empty()){
cnt++;
int now=q.front();
if(cnt!=n){
printf("%d ",tree[now].data);
}else{
printf("%d\n",tree[now].data);
}
q.pop();
if(tree[now].lchild!=-1){
q.push(tree[now].lchild);
}
if(tree[now].rchild!=-1){
q.push(tree[now].rchild);
}
}
}
int main(){
freopen("in.txt","r",stdin);
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&post[i]);
getchar();
}
for(int i=0;i<n;i++){
scanf("%d",&in[i]);
getchar();
}
int root=create(0,n-1,0,n-1);
bfs(root);
return 0;
}