const { sourceMapsEnabled } = require("process");
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void (async function () {
const midOrder = (await readline()).split(" ").map(Number);
const preOrder = (await readline()).split(" ").map(Number);
const n = midOrder.length;
const map = new Map();
midOrder.forEach((val, idx) => {
map.set(val, map.get(val) ? [...map.get(val), idx] : [idx]);
});
class TreeNode {
constructor(val) {
this.val = val;
this.left = null;
this.right = null;
this.childSum = 0;
}
}
const notEquals = (midL, preL, size) => {
const arr1 = midOrder.slice(midL, midL + size).sort();
const arr2 = preOrder.slice(preL, preL + size).sort();
for (let i = 0; i < size; i++) {
if (arr1[i] !== arr2[i]) {
return true;
}
}
return false;
};
const buildTree = (midL, midR, preL, preR) => {
if (preL > preR) return null;
const rootVal = preOrder(preL);
const root = new TreeNode(rootVal);
const idxs = [...map.get(rootVal)];
for (const idx of idxs) {
if (idx < midL || idx > midR) continue;
const leftLen = idx - midL;
if (notEquals(midL, preL + 1, leftLen)) continue;
const rightLen = midR - idx;
if (notEquals(idx + 1, preR - rightLen + 1, rightLen)) continue;
root.left = buildTree(midL, idx - 1, preL + 1, preL + leftLen);
root.right = buildTree(idx + 1, midR, preL + leftLen + 1, preR);
root.childSum =
(root.left ? root.left.val + root.left.childSum : 0) +
(root.right ? root.right.val + root.right.childSum : 0);
break;
}
return root;
};
const getMidOrder = (root, res) => {
if (!root) return;
const left = root.left;
if (left) getMidOrder(left, res);
res.push(root.val);
if (root.right) getMidOrder(left, res);
};
const root = buildTree(0, n - 1, 0, n - 1);
const res = [];
getMidOrder(root, res);
console.log(res.join(" "));
})();