#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <unordered_map>
#include <queue>
using namespace std;
int n;
const int N = 40;
int postorder[N], inorder[N];
unordered_map<int, int> l, r, pos;
int build(int pl, int pr, int il, int ir)
{
int root = postorder[pr];
int k = pos[root];
if (il < k)
{
l[root] = build(pl, pl + k - 1 - il, il, k - 1);
}
if (ir > k)
{
r[root] = build(pl + k - 1 - il + 1, pr - 1, k + 1, ir);
}
return root;
}
void dfs(int root)
{
queue<int> que;
que.push(root);
while (que.size())
{
auto t = que.front();
que.pop();
cout << t << ' ';
if (l.count(t))
{
que.push(l[t]);
}
if (r.count(t))
{
que.push(r[t]);
}
}
}
int main()
{
cin >> n;
for (int i = 0; i < n; ++i)
{
cin >> postorder[i];
}
for (int i = 0; i < n; ++i)
{
cin >> inorder[i];
pos[inorder[i]] = i;
}
int root = build(0, n - 1, 0, n - 1);
dfs(root);
return 0;
}