#include<iostream>
#include<cstring>
#include<algorithm>
#include<unordered_map>
#include<vector>
using namespace std;
int T;
const int N = 1000010;
int a[N] , b[N] , New[N];
unordered_map<int , int> h;
int n , k;
vector<int> g[11];
vector<int> Ans[100];
bool check(int x , int y){
for(int i = 0;i < n;i++){
if(g[x][i] != g[y][i]) return false;
}
return true;
}
signed main(){
cin >> T;
while(T--){
h.clear();
memset(Ans , 0 , sizeof Ans);
memset(g , 0 , sizeof g);
scanf("%d%d" , &n , &k); --k;
for(int i = 1;i <= n;i++) scanf("%d" , &a[i]) , h[a[i]]++;
int mex = 0;
while(h[mex]) mex++;
for(int d = 0;d < 5;d++){
for(int i = 1;i <= n;i++){
if(h[a[i]] == 1 && a[i] < mex) New[i] = a[i];
else New[i] = mex;
}
for(int i = 1;i <= n;i++) a[i] = New[i];
for(int i = 1;i <= n;i++) g[d].push_back(New[i]);
}
int pos1 , pos2;
for(int i = 0;i < 5;i++){
for(int j = i + 1;j < 5;j++){
if(check(i , j)){
pos1 = i , pos2 = j;
break;
}
}
}
int cnt = 0;
int len = pos2 - pos1;
int fr = pos1;
for(int i = pos1;i < pos2;i++){
for(auto j : g[i]) Ans[cnt].push_back(j);
++cnt;
}
if(k < pos1){
for(auto i : g[k]) printf("%d " , i);
cout << endl;
}
else{
k -= fr;
k %= len;
for(auto i : Ans[k]) printf("%d " , i);
cout << endl;
}
}
return 0;
}