#include <iostream>
#include <queue>
using namespace std;
struct imformation{
int start;
int end;
};
int check(int start,int end,int *mid,int* after,int n){
int index;
int result =1;
for( int i = n; i>= 0&&result ; i--){
for( int j = end ; j >= start ; j--){
if(mid[j]==after[i]){
result= 0;
if(i != n-1)
cout<<' '<<mid[j];
index = j;
break;
}
}
}
return index;
}
int main(){
int n;
cin>>n;
int * mid = new int[n];
int * after = new int [n];
int *ceng = new int[n];
struct imformation data;
struct imformation now;
queue<struct imformation>Tree;
int index;
for( int i = 0 ; i < n ; i++){
cin>>after[i];
}
for( int i = 0 ; i < n ; i++){
cin>>mid[i];
}
data.end=n-1;
data.start=0;
Tree.push(data);
cout<<after[n-1];
do{
data=Tree.front();
index = check(data.start,data.end,mid,after,n);
if(index -1 >= data.start){
now.start=data.start;
now.end=index-1;
Tree.push(now);
}
if(index+1<=data.end){
now.start=index+1;
now.end=data.end;
Tree.push(now);
}
Tree.pop();
}while(!Tree.empty());
return 0;
}