Problem:
Score : 700 points

Problem Statement

We have a sequence of N \times K integers: X=(X_0,X_1,\cdots,X_{N \times K-1}).
Its elements are represented by another sequence of N integers: A=(A_0,A_1,\cdots,A_{N-1}). For each pair i, j (0 \leq i \leq K-1,\ 0 \leq j \leq N-1), X_{i \times N + j}=A_j holds.

Snuke has an integer sequence s, which is initially empty.
For each i=0,1,2,\cdots,N \times K-1, in this order, he will perform the following operation:

If s does not contain X_i: add X_i to the end of s.

If s does contain X_i: repeatedly delete the element at the end of s until s no longer contains X_i. Note that, in this case, we do not add X_i to the end of s.

Find the elements of s after Snuke finished the operations.

Constraints

1 \leq N \leq 2 \times 10^5

1 \leq K \leq 10^{12}

1 \leq A_i \leq 2 \times 10^5

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N K
A_0 A_1 \cdots A_{N-1}

Output

Print the elements of s after Snuke finished the operations, in order from beginning to end, with spaces in between.

Sample Input 1

3 2
1 2 3

Sample Output 1

2 3

In this case, X=(1,2,3,1,2,3).
We will perform the operations as follows:

i=0: s does not contain 1, so we add 1 to the end of s, resulting in s=(1).

i=1: s does not contain 2, so we add 2 to the end of s, resulting in s=(1,2).

i=2: s does not contain 3, so we add 3 to the end of s, resulting in s=(1,2,3).

i=3: s does contain 1, so we repeatedly delete the element at the end of s as long as s contains 1, which causes the following changes to s: (1,2,3)→(1,2)→(1)→().

i=4: s does not contain 2, so we add 2 to the end of s, resulting in s=(2).

i=5: s does not contain 3, so we add 3 to the end of s, resulting in s=(2,3).

Sample Input 2

5 10
1 2 3 2 3

Sample Output 2

3

Sample Input 3

6 1000000000000
1 1 2 2 3 3

Sample Output 3

s may be empty in the end.

Sample Input 4

11 97
3 1 4 1 5 9 2 6 5 3 5

Sample Output 4

9 2 6

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include<bits/stdc++.h>
using namespace std;
#define ll long long 
#define nn 65536*4
#define mod 998244353
vector<ll> v[nn];ll cnt[nn];
ll aa[nn];ll n,k;
void out(vector<ll> b){
	for(int i=0;i<b.size();i++) printf("%lld ",b[i]);
	exit(0);
}
void bbb(){
	;memset(cnt,0,sizeof cnt);for(int i=0;i<v[0].size();i++) cnt[v[0][i]]=1;
	for(int i=1;i<=k;i++){
		v[i]=v[i-1];
		for(int j=1;j<=n;j++){
			if(cnt[aa[j]]) {
				cnt[aa[j]]=0;
				while(1){
					ll u=v[i][v[i].size()-1];v[i].pop_back();
					cnt[u]=0;
					if(u==aa[j]) break;
				}
			}
			else{
				cnt[aa[j]]=1;
				v[i].push_back(aa[j]);
			}
		}
		if(i==k) out(v[i]);
	}
}
ll pos[nn];ll app[nn],lst[nn];
int main(){
	cin>>n>>k;for(int i=1;i<=n;i++) scanf("%lld",&aa[i]);
	if(n*k<=1e7)  bbb();
	memset(app,0x3f,sizeof app);
	for(int i=n;i>=1;i--){
		lst[i]=app[aa[i]];
		app[aa[i]]=i;
	}

	ll a=-1,b=-1;
	vector<ll> cir;ll x=1;memset(pos,-1,sizeof pos);cir.push_back(1);pos[1]=0;vector<ll> lop;
	lop.push_back(0);ll yy=0;
	for(int i=1;i<n+n;i++){
		ll t=lst[x];
		if(t>1e8) t=app[aa[x]],++yy;
		x=t+1;if(x>n) x=1,++yy;
		cir.push_back(x);lop.push_back(yy);
		if(pos[x]==0) {
			a=pos[x],b=i;
			break;
		}
		pos[x]=i;
	}
	
	k%=(lop[b]);
	while(lop[a+1]<=k and a+1<=b) a++;
	k-=lop[a];
	memset(cnt,0,sizeof cnt);for(int i=0;i<v[0].size();i++) cnt[v[0][i]]=1;
	for(int i=1;i<=k+1;i++){
		v[i]=v[i-1];
		for(int j=(i==1?cir[a]:1);j<=n;j++){
			if(cnt[aa[j]]) {
				cnt[aa[j]]=0;
				while(1){
					ll u=v[i][v[i].size()-1];v[i].pop_back();
					cnt[u]=0;
					if(u==aa[j]) break;
				}
			}
			else{
				cnt[aa[j]]=1;
				v[i].push_back(aa[j]);
			}
		}
	}
		 out(v[k+1]);
	return 0;
}