#include <iostream>
#include <vector>
#include <string>
#include <queue>
#include <cstring>
#define MAX 10000
using namespace std;
struct tree
{
int data;
tree* left;
tree* right;
tree()
{
data = 0;
left = NULL;
right = NULL;
}
};
tree* root;
int front[100000];
int mid[100000];
int n;
tree* build(int *front,int *mid,int n)
{
if(n == 0)
return NULL;
int x = 0;
while(front[0]!=mid[x])
x++;
tree *t = new tree();
t->data = mid[x];
t->left = build(front+1,mid,x);
t->right = build(front+1+x,mid+1+x,n-x-1);
return t;
}
void order(tree* t)
{
queue<tree *> tmp;
tmp.push(t);
while(!tmp.empty())
{
tree * tt;
tt = tmp.front();
tmp.pop();
cout<<tt->data<<" ";
if(tt->left != NULL)
tmp.push(tt->left);
if(tt->right != NULL)
tmp.push(tt->right);
}
}
void PostOrder(tree* t)
{
if(t)
{
PostOrder(t->left);
PostOrder(t->right);
cout<<t->data<<" ";
}
}
int main()
{
cin>>n;
for (int i = 0; i < n; ++i)
cin>>front[i];
for (int i = 0; i < n; ++i)
cin>>mid[i];
root = build(front,mid,n);
order(root);
cout<<endl;
PostOrder(root);
return 0;
}