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: Runtime Error)

#include "bits/stdc++.h"
using namespace std;
///////////////////////////////////////////
const long long int INF = 1LL<<60;
const long long int Mod = 1000000007;
using ll = long long int; using ci = const int;
using vi = vector<int>;  using Vi = vector<long long int>;
using P = pair<int, int>;  using PLL = pair<ll, ll>;
using matrix = vector<vector<ll>>;
#define pb(x) push_back(x)
#define mp(x,y) make_pair(x,y)
#define all(x) (x).begin(),(x).end()
#define rep(i,N) for(ll i = 0; i < (ll)N; i++)
#define repi(i,a,b) for(ll i = ll(a); i < ll(b); ++i)
template<class T>bool chmax(T &former, const T &b) { if (former<b) { former=b; return true; } return false; }
template<class T>bool chmin(T &former, const T &b) { if (b<former) { former=b; return true; } return false; }
template<class T>T sqar(T x){ return x*x; }//sqrt(x)は平方根;
#define Sort(v) std::sort(v.begin(), v.end(), std::greater<decltype(v[0])>()) //降順でVをソート
#define p_queue(v) priority_queue<v, vector<v>, greater<v> >
template<class T> inline void princ(T x){cout<<x<<" ";}; 
template<class T> inline void print(T x){cout<<x<<"\n";};
template<class T> inline void Yes(T condition){ if(condition) cout << "Yes" << endl; else cout << "No" << endl; }
template<class T> inline void YES(T condition){ if(condition) cout << "YES" << endl; else cout << "NO" << endl; }
///////////////////////////////////////////////////////////////////////////////////

ll n,k;
Vi a;

int main(){
	cin.tie(0);ios::sync_with_stdio(false);
	std::cout<<std::fixed<<std::setprecision(30);
	cin>>n>>k;
	a.resize(n);
	map<ll,Vi> ma;
	rep(i,n){
		cin>>a[i];
		ma[a[i]].pb(i);
	}
	vector<PLL> phi;
	phi.pb(mp(1,0));
	while(1){
		ll id = phi[phi.size()-1].second;
		ll sum = phi[phi.size()-1].first;
		ll ind = upper_bound(all(ma[a[id]]),id)-ma[a[id]].begin();
		if(ind==ma[a[id]].size()){
			ind = ma[a[id]][0];
			sum += n-id+1;
			sum += ind;
			id = ind+1;
			id %= n;
		}else{
			ind = ma[a[id]][ind];
			sum += ind-id+1;
			id = ind+1;
			id %= n;
		}
		phi.pb(mp(sum,id));
		if(id==0)break;
	}
	ll lop = phi[phi.size()-1].first-1;
	ll ckn = (n%lop)*(k%lop);
	ckn %= lop;
	if(ckn==0){
		print("");
		return 0;
	}
	ll id = upper_bound(all(phi),mp(ckn,INF))-phi.begin();
	id--;
	ckn -= phi[id].first;
	rep(i,n){
		a.pb(a[i]);
	}
	stack<ll> st;
	st.push(a[phi[id].second]);
	map<ll,ll> mapp;
	mapp[st.top()]++;
	repi(i,phi[id].second+1,phi[id].second+1+ckn){
		if(mapp[a[i]]>0LL){
			while(st.top()!=a[i]){
				mapp[st.top()]--;
				st.pop();
			}
			st.pop();
		}else{
			mapp[a[i]]++;
			st.push(a[i]);
		}
	}
	Vi v;
	while(!st.empty()){
			v.pb(st.top());
			st.pop();
	}
	reverse(all(v));
	rep(i,v.size()){
		princ(v[i]);
	}
	print("");
	return 0;
}