#include <bits/stdc++.h>
using namespace std;
const int N = 10110;
struct Tree {
int u, l, r;
}TNode[N];
int midorder[N], preorder[N];
int main() {
int n;
cin >> n;
for (int i = 0; i < N; i++) TNode[i].u = -1;
for (int i = 0; i < n; i++) {
cin >> midorder[i];
}
for (int i = 0; i < n; i++) {
cin >> preorder[i];
}
int pos = 0;
function<void(int, int, int)> build = [&](int l, int r, int u) {
if (l >= r) {
TNode[u].u = -1;
return;
}
int root = preorder[pos++];
TNode[u].u = root;
TNode[u].l = 2 * u;
TNode[u].r = 2 * u + 1;
int mid = find(midorder, midorder + r, root) - midorder;
build(l, mid, 2 * u);
build(mid + 1, r, 2 * u + 1);
};
build(0, n, 1);
vector<int> res;
queue<int> q;
q.push(1);
while (q.size()) {
int u = q.front();
q.pop();
if (TNode[u].u != -1) {
res.push_back(TNode[u].u);
q.push(TNode[u].r);
q.push(TNode[u].l);
}
}
for (int i = 0; i < res.size(); i++) {
cout << res[i] << " "[i == res.size() - 1];
}
return 0;
}