#include<stdio.h>
#include<stdlib.h>
#include<queue>
typedef struct node{
int value;
struct node* left;
struct node* right;
}node;
using namespace std;
node* f(int in[],int post[],int length){
node* root=(node*)malloc(sizeof(node));
root->value=post[length-1];
int flag;
for(int i=0;i<length;i++){
if(post[length-1]==in[i]){
flag=i;
break;
}
}
if(flag!=0){
root->left=f(in,post,flag);
}
else
root->left=NULL;
if(length-flag-1!=0){
root->right=f(in+flag+1,post+flag,length-flag-1);
}
else
root->right=NULL;
return root;
}
void traversal(node* root){
int flag=0;
queue<node*> q;
q.push(root);
while(q.empty()==false){
node* tmp=q.front();
q.pop();
if(tmp->left)
q.push(tmp->left);
if(tmp->right)
q.push(tmp->right);
if(flag==0){
flag=1;
}
else
printf(" ");
printf("%d",tmp->value);
}
}
int main(){
int n;
scanf("%d",&n);
int post[n],in[n];
for(int i=0;i<n;i++){
scanf("%d",post+i);
}
for(int i=0;i<n;i++){
scanf("%d",in+i);
}
node* root=f(in,post,n);
traversal(root);
return 0;
}