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 <iostream>
#include <string>
using namespace std;

int nex[100005],pre[100005];
int a[100005];

int head = 0,tail;
int n, q, tmp1, tmp2;
	
void print(){
	int p=nex[head];
	int a=0;
	while( p != tail){
		if(a)cout<<' ';
		a++;
		cout<<p;
		p=nex[p];
	}
	cout<<endl;
}

int main(void){
	cin >> n >> q;
	if(n == 1){
		cout << 1 << endl;
		return 0;
	}
	tail = n+1;
	a[0] = 0; a[n+1] = n+1;
	for(int i = 1; i < n+1; ++i){
		cin >> a[i];
	}
	for(int i = 0; i <= n+1; ++i){
		nex[a[i]] = a[i+1];
		pre[a[i+1]] = a[i];
	}
	//print();
	for(int i = 0 ; i < q; ++i){
		int id;
		cin >> id;
		if(pre[tail] == id){
			int a = nex[head];
			int b = pre[id];
			nex[head] = id;
			pre[id] = head;
			nex[id] = a;
			pre[a] = id;
			nex[b] = tail;
			pre[tail] = b;
		}else if(nex[head] == id){
			int c = nex[id];
			int d = pre[tail];
			nex[head] = c;
			pre[c] = head;
			nex[d] = id;
			pre[id] = d;
			nex[id] = tail;
			pre[tail] = id;
		}else{
			int a = nex[head];
			int b = pre[id];
			int c = nex[id];
			int d = pre[tail];
			nex[id] = a;
			pre[id] = d;
			pre[a] = id;
			nex[d] = id;
			pre[c] = head;
			nex[head] = c;
			nex[b] = tail;
			pre[tail] = b;
		}
		//print();
	}
	print();
	// for(int i = 0 ; i < n; ++i){
	// 	cin >> tmp1;
	// 	if(i == 0){
	// 		pre[tmp1] = 0;
	// 	}else{
	// 		pre[tmp1] = tmp2;
	// 	}
	// 	if(i == n-1){
	// 		nex[tmp1] = n+1;
	// 	}else{
	// 		nex[tmp2] = tmp1;
	// 	}
	// 	tmp2 = tmp1;
	// }

	// for(int i = 1; i <= n+1;++i){
	// 	cout << pre[i] << " ";
	// }
	// cout << endl;
	return 0;
}