#include<bits/stdc++.h>
using namespace std;
inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
return s*w;
}
inline void out(int x){
if(x==0){putchar('0');return;}
int len=0,k1=x,c[10005];
if(k1<0)k1=-k1,putchar('-');
while(k1)c[len++]=k1%10+'0',k1/=10;
while(len--)putchar(c[len]);
puts("");
}
const int N=2e5+5;
int a[N],b[N],s[N],maj[N],cnt[N],ans;
bool flag[N];
vector<int>v[N],can;
inline void upd(int v, int c){
if(ans<v){
ans=v,can[0]=c;
fill(can.begin(),can.end(),1ll);
}
else if(ans==v)can.push_back(c);
}
inline void add(const int &col){
if(v[col].size()>470)return;
for(int i=cnt[col]-1,j=1;i!=-1;i--,j++){
for(int k=v[col][i];k>0&&maj[k]<j;k--){
maj[k]=j;
}
}
}
inline void check(const int &col){
if(v[col].size()>470)return;
for(int i=cnt[col]-1,k=0; ~i; --i,++k){
int vv=maj[v[col][i]+1]-k;
upd(v[col].size()+vv,col);
}
}
signed main(){
int T=read();
while(T--){
int n=read();ans=0;
for(int i=1;i<=n;i++)fill(v[i].begin(),v[i].end(),0ll);
fill(can.begin(),can.end(),0ll);
for(int i=1;i<=n;i++)a[i]=b[i]=read();
sort(b+1,b+n+1);
int num=unique(b+1,b+n+1)-b-1;
for(int i=1;i<=n;i++)a[i]=lower_bound(b+1,b+n+1,a[i])-b;
for(int i=1;i<=n;i++)v[a[i]].push_back(i);
for(int k=1;k<=n;k++){
if(v[k].size()>470){
memset(s,0,sizeof s);
for(int &i:v[k])s[i]++;
for(int i=2;i<=n;i++)s[i]+=s[i-1];
int now=1;
for(int i=1;i<=num;i++){
if(i!=k){
int len=v[i].size(),m=0,m2=0,t=1;
for(int j=0;j<len;j++){
if(m>=j-s[v[i][j]])m=j-s[v[i][j]];
else now=max(now,j+1-s[v[i][j]]-m);
if(m2>=s[v[i][j]]-j)m2=s[v[i][j]]-j-1;
else t=max(t,s[v[i][j]]-j-m2);
}
t=max(t,s[n]-len-m2);
upd(t+len,i);
}
upd(now+s[n],k);
}
}
}
memset(maj,0,sizeof maj);
memset(cnt,0,sizeof cnt);
for(int r=1;1;r++){
cnt[a[r]]++;
add(a[r]);
if(r==n)break;
if(a[r]==a[r+1])continue;
check(a[r+1]);
upd(maj[1]-cnt[a[r+1]]+v[a[r+1]].size(),a[r+1]);
}
for(int i=1;i<=num;i++){
if(i!=a[n])check(i);
}
out(ans);
memset(flag,0,sizeof flag);
for(int i=1;i<=ans;i++)flag[i]=1;
for(int i=1;i<=num;i++){
if(flag[i])out(b[i]);
}
}
return 0;
}
满江紫
悬2关