#include <bits/stdc++.h>
using namespace std;
#define int long long
constexpr int N = 300000 + 7;
constexpr int inf = 1E18, mod = 1e9 + 7;
int l[N], r[N], n, w[N], cnt, io[N], pos[N], stio[N], max_dep;
vector<int> ans[N];
inline int build(int il, int ir, int pl, int pr) {
if(il > ir) return 0;
int root = pos[pr];
int k = stio[root];
l[root] = build(il, k - 1, pl, pl + k - il - 1);
r[root] = build(k + 1, ir, pl - il + k, pr - 1);
return root;
}
inline void dfs(int u, int dep) {
if(u == 0) return ;
max_dep = max(max_dep, dep);
ans[dep].push_back(u);
dfs(l[u], dep + 1);
dfs(r[u], dep + 1);
}
inline void Solve() {
cin >> n;
for (int i = 1; i <= n; i ++) {
cin >> io[i];
stio[io[i]] = i;
}
for (int i = 1; i <= n; i ++) {
cin >> pos[i];
}
int root = build(1, n, 1, n);
dfs(root, 1);
for (int i = 1; i <= max_dep; i ++) {
if(i & 1) {
reverse(ans[i].begin(), ans[i].end());
}
int len = ans[i].size();
for (int j = 0; j < len; j ++) {
if(j == len - 1) cout << ans[i][j] << " ";
else cout << ans[i][j] << " ";
}
}
}
signed main() {
cin.tie(nullptr) -> sync_with_stdio(false);
int T = 1;
for (; T; T --) Solve();
return 0;
}