using System;
using System.Collections.Generic;
using System.Linq;
// Q026 木の復元 https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ALDS1_7_D&lang=jp
class Program
{
    static string InputPattern = "InputX";
    static List<string> GetInputList()
    {
        var WillReturn = new List<string>();
        if (InputPattern == "Input1") {
            WillReturn.Add("5");
            WillReturn.Add("1 2 3 4 5");
            WillReturn.Add("3 2 4 1 5");
            //3 4 2 5 1
        }
        else if (InputPattern == "Input2") {
            WillReturn.Add("4");
            WillReturn.Add("1 2 3 4");
            WillReturn.Add("1 2 3 4");
            //4 3 2 1
        }
        else {
            string wkStr;
            while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
        }
        return WillReturn;
    }
    static Dictionary<int, List<int>> mChildNodeListDict = new Dictionary<int, List<int>>();
    struct JyoutaiDef
    {
        internal int CurrNode;
        internal int[] LeftTreeArr;
        internal int[] RightTreeArr;
    }
    static int[] mPreorderArr;
    static int[] mInorderArr;
    static void Main()
    {
        List<string> InputList = GetInputList();
        mPreorderArr = InputList[1].Split(' ').Select(X => int.Parse(X)).ToArray();
        mInorderArr = InputList[2].Split(' ').Select(X => int.Parse(X)).ToArray();
        var Stk = new Stack<JyoutaiDef>();
        JyoutaiDef WillPush;
        int[] LeftTreeArr;
        int CurrNode;
        int[] RightTreeArr;
        DeviceArr(mPreorderArr, out LeftTreeArr, out CurrNode, out RightTreeArr);
        WillPush.CurrNode = CurrNode;
        WillPush.LeftTreeArr = LeftTreeArr;
        WillPush.RightTreeArr = RightTreeArr;
        int RootNode = CurrNode;
        Stk.Push(WillPush);
        while (Stk.Count > 0) {
            JyoutaiDef Popped = Stk.Pop();
            if (mChildNodeListDict.ContainsKey(Popped.CurrNode) == false) {
                mChildNodeListDict[Popped.CurrNode] = new List<int>();
            }
            Action<int[]> PushAct = pArr =>
            {
                DeviceArr(pArr, out LeftTreeArr, out CurrNode, out RightTreeArr);
                mChildNodeListDict[Popped.CurrNode].Add(CurrNode);
                WillPush.CurrNode = CurrNode;
                WillPush.LeftTreeArr = LeftTreeArr;
                WillPush.RightTreeArr = RightTreeArr;
                Stk.Push(WillPush);
            };
            //左部分木のPush
            if (Popped.LeftTreeArr.Length > 0) {
                PushAct(Popped.LeftTreeArr);
            }
            //右部分木のPush
            if (Popped.RightTreeArr.Length > 0) {
                PushAct(Popped.RightTreeArr);
            }
        }
        // 後行順巡回でDFS
        var PostorderNodeList = new List<int>();
        Postorder(RootNode, PostorderNodeList);
        string WillOut = string.Join(" ",
            Array.ConvertAll(PostorderNodeList.ToArray(), pX => pX.ToString()));
        Console.WriteLine(WillOut);
    }
    // 配列を引数として、左部分木、カレントノード、右部分木に分割する
    static void DeviceArr(int[] pTargetArr,
        out int[] pLeftTreeArr, out int pCurrNode, out int[] pRightTreeArr)
    {
        pCurrNode = -1;
        // Preorderで一番最初に訪問したノードがカレントノード
        for (int I = 0; I <= mPreorderArr.GetUpperBound(0); I++) {
            int wkInd = Array.IndexOf(pTargetArr, mPreorderArr[I]);
            if (wkInd >= 0) {
                pCurrNode = mPreorderArr[I];
                break;
            }
        }
        int DeviceInd = Array.IndexOf(mInorderArr, pCurrNode);
        var LeftTreeList = new List<int>();
        var RightTreeList = new List<int>();
        for (int I = 0; I <= mInorderArr.GetUpperBound(0); I++) {
            if (Array.IndexOf(pTargetArr, mInorderArr[I]) == -1)
                continue;
            if (I < DeviceInd) LeftTreeList.Add(mInorderArr[I]);
            if (I > DeviceInd) RightTreeList.Add(mInorderArr[I]);
        }
        pLeftTreeArr = LeftTreeList.ToArray();
        pRightTreeArr = RightTreeList.ToArray();
    }
    // 後行順巡回でDFS
    static void Postorder(int pCurrNode, List<int> pPrintNodeList)
    {
        if (pCurrNode == -1) return;
        mChildNodeListDict[pCurrNode].ForEach(pX => Postorder(pX, pPrintNodeList));
        pPrintNodeList.Add(pCurrNode);
    }
}