Problem: B: Pivots

problem

Given a permutation of length N, a_1, a_2, ..., a_N, which is a permutation of integers from 1 to N. Also, Q queries are given in order for this permutation. In the i-th query, you have to do the following:

* The value q_i (1 \ leq q_i \ leq N) is given. In the permutation \\ {a_1, a_2, ..., a_N \\}, where L is the permutation on the left side of q_i and R is the permutation on the right side of q_i, the original permutation L \\ q_i \\ R is R \\ Change to q_i \\ L. That is, when q_ {i} = a_j, the permutations \\ {a_1, ..., a_ {j-1}, a_j, a_ {j + 1}, ..., a_N \\} are \\ { Change to a_ {j + 1}, ..., a_N, a_j, a_1, ..., a_ {j-1} \\}.



The permutations L and R may be empty. For example, if L is empty, change q_i \\ R to R \\ q_i. The same is true when R is empty.

Output the permutation after processing these Q queries in order for the given permutation on one line.

Input format


N Q
a_1 a_2 ... a_N
q_1 q_2 ... q_Q


All inputs are integers.

The first row gives the number of elements in the permutation N and the number of queries Q, separated by blanks. In the second line, permutations a_1, a_2, ..., a_N, in which integers from 1 to N are rearranged, are given separated by blanks. The third line gives Q queries, separated by blanks. q_i represents the i-th query.

Constraint

* 1 \ leq N \ leq 10 ^ 5
* 1 \ leq Q \ leq 10 ^ 5
* 1 \ leq a_i \ leq N
* a_i is different
* 1 \ leq q_i \ leq N



Output format

Output the permutation after processing all the queries in order on one line.

Input example 1


5 2
1 5 3 2 4
5 2


Output example 1


4 5 1 2 3

* The first query changes the permutation to \\ {3, 2, 4, 5, 1 \\}.
* The second query changes the permutation to \\ {4, 5, 1, 2, 3 \\}.



Input example 2


5 1
1 2 3 4 5
Five


Output example 2


5 1 2 3 4





Example

Input

5 2
1 5 3 2 4
5 2


Output

4 5 1 2 3

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;

#define rep(i,n) for(int (i)=0;(i)<(int)(n);++(i))
#define pb push_back

#define l first
#define r second

using pi = pair<int,int>;

int main(){
    int n,Q;
    cin >>n >>Q;

    vector<int> x(n);
    rep(i,n) cin >>x[i];

    int H = n+1, T = n+2;
    vector<pi> a(n+3);

    a[H].r = x[0];
    a[x[0]].l = H;
    for(int i=1; i<n; ++i){
        a[x[i-1]].r = x[i];
        a[x[i]].l = x[i-1];
    }
    a[x[n-1]].r = T;
    a[T].l = x[n-1];

    if(n==1){
        int q;
        rep(i,Q) cin >>q;
        cout << 1 << endl;
        return 0;
    }

    while(Q--){
        int q;
        cin >>q;

        int HR = a[H].r;
        int TL = a[T].l;
        int L = a[q].l;
        int R = a[q].r;

        // printf(" HR L R TL %d %d %d %d\n", HR,L,R,TL);

        if(L==H){
            a[H].r = R;
            a[R].l = H;

            a[TL].r = q;
            a[q].l = TL;

            a[q].r = T;
            a[T].l = q;
        }
        else if(R==T){
            a[H].r = q;
            a[q].l = H;

            a[q].r = HR;
            a[HR].l = q;

            a[L].r = T;
            a[T].l = L;
        }
        else{
            a[H].r = R;
            a[R].l = H;

            a[TL].r = q;
            a[q].l = TL;

            a[q].r = HR;
            a[HR].l = q;

            a[L].r = T;
            a[T].l = L;
        }

        // int now = H;
        // rep(i,n){
        //     now = a[now].r;
        //     cout << now << " \n"[i==n-1];
        // }
    }

    int now = H;
    rep(i,n){
        now = a[now].r;
        cout << now << " \n"[i==n-1];
    }

    return 0;
}