#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> p;
typedef priority_queue<int,vector<int>,greater<int>> qs;
typedef priority_queue<p> qlib;
typedef priority_queue<p,vector<p>,greater<p>> qlis;
int t,n,a[300010];
bool vis[300010];
int lis[300010],cnt;
int ls[300010],nxt[300010];
int main(){
scanf("%d",&t);
while(t--){
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
cnt=0;
for(int i=1;i<=n;i++) vis[i]=ls[i]=nxt[i]=0;
qs q;
for(int i=1;i<=n;i++){
if(vis[a[i]]==0) lis[++cnt]=a[i],ls[a[i]]=i,vis[a[i]]=1;
else nxt[ls[a[i]]]=i,ls[a[i]]=i;
}
for(int i=1;i<=n;i++)
if(nxt[i]==0) q.push(i);
printf("%d\n",cnt);
qlib b; qlis s;
int p=1;
int ans=1;
while(ans<=cnt){
while(!q.empty())
if(!vis[a[q.top()]]) q.pop();
else break;
while(p<=n&&p<=q.top()){
b.push(make_pair(a[p],-p));
s.push(make_pair(a[p],p));
p++;
}
int cur;
while(!b.empty())
if(!vis[b.top().first]) b.pop();
else break;
while(!s.empty())
if(!vis[s.top().first]) s.pop();
else break;
if(ans&1) printf("%d ",b.top().first),vis[b.top().first]=0,cur=-b.top().second;
else printf("%d ",s.top().first),vis[s.top().first]=0,cur=s.top().second;
ans++;
while(!b.empty())
if(-b.top().second<=cur) b.pop();
else break;
while(!s.empty())
if(s.top().second<=cur) s.pop();
else break;
}
putchar('\n');
}
return 0;
}