#include<bits/stdc++.h>
#define pb push_back
#define SZ(x) (int)((x).size())
template<typename _Tp>void read(_Tp &x){
	char ch=getchar();bool f=0;while(!isdigit(ch))f|=ch=='-',ch=getchar();
	x=ch&15,ch=getchar();while(isdigit(ch))x=x*10+(ch&15),ch=getchar();
	if(f)x=-x;
}
template<typename _Tp,typename ...Args>void read(_Tp &x,Args &...args){read(x),read(args...);}
template<typename _Tp>inline void chmax(_Tp &a,_Tp b){a=a<b?b:a;}
const int N=200005,NC=(1<<19)+5,B1=310;
int a[N],b[N],t[N],ANS[N];
std::vector<int> vec[N];
struct node{int sum,lsum,rsum,ans;}f[NC];int M;
inline node merge(const node &a,const node &b){return {a.sum+b.sum,std::max(a.lsum,a.sum+b.lsum),std::max(a.rsum+b.sum,b.rsum),std::max({a.ans,b.ans,a.rsum+b.lsum})};}
void build(int n){
	for(M=1;M<=n+2;M<<=1);
	std::fill(f,f+M*2+3,(node){0,0,0,0});
}
void upd(int x,int C){f[x+=M]={C,C,C,C};for(x>>=1;x;x>>=1)f[x]=merge(f[x<<1],f[x<<1|1]);}
int POS,B2;bool mark[N];
struct qry{
	int l,r,o,v,bel;
	inline bool operator < (const qry &o)const{
		return bel==o.bel?(bel&1?r>o.r:r<o.r):bel<o.bel;
	}
}q[50005*(B1+2)];
inline void push(int l,int r,int o,int v){q[++POS]={l,r,o,v,0};}
int cnt[N],ccnt[N],mx;
void ins(int x){--ccnt[cnt[x]],mx=std::max(mx,++cnt[x]),++ccnt[cnt[x]];}
void del(int x){
	--ccnt[cnt[x]],++ccnt[--cnt[x]];
	if(!ccnt[mx])--mx;
}
void MAIN(){
	int n;read(n);
	for(int i=1;i<=n;++i)read(a[i]),t[i]=a[i];
	std::sort(t+1,t+n+1);int pos=std::unique(t+1,t+n+1)-t-1;
	for(int i=0;i<=pos;++i)vec[i].clear();
	for(int i=1;i<=n;++i)b[i]=std::lower_bound(t+1,t+pos+1,a[i])-t,vec[b[i]].pb(i);
	build(n);int ans=0;std::vector<int> res;POS=0;
	bool flag=pos<=5||n<=300;
	for(int i=1;i<=pos;++i){
		if(SZ(vec[i])>=B1||flag){
			mark[i]=0;
			int cur=SZ(vec[i]),mx=cur;
			for(auto it:vec[i])upd(it,-1);
			for(int j=1;j<=pos;++j)if(i!=j){
				for(auto it:vec[j])upd(it,1);
				mx=std::max(mx,cur+f[1].ans);
				for(auto it:vec[j])upd(it,0);
			}
			for(auto it:vec[i])upd(it,0);
			if(mx>ans)ans=mx,res={t[i]};else if(mx==ans)res.pb(t[i]);
		}
		else{
			mark[i]=1,ANS[i]=0;
			int cur=SZ(vec[i]);vec[i].insert(vec[i].begin(),0),vec[i].pb(n+1);
			for(int q=0;q<SZ(vec[i]);++q){
				for(int p=0;p<q;++p){
					int l=vec[i][p]+1,r=vec[i][q]-1;
					if(l<=r)push(l,r,cur-(q-p-1),i);
				}
			}
		}
	}
	if(!POS){
		printf("%d\n",ans);
		for(auto it:res)printf("%d\n",it);
		return;
	}
	B2=1.5*n/sqrt(POS);for(int i=1;i<=POS;++i)q[i].bel=q[i].l/B2;
	std::sort(q+1,q+POS+1);
	for(int i=0;i<=n;++i)ccnt[i]=cnt[i]=0;
	mx=0;int l=1,r=0;for(int i=1;i<=pos;++i)++ccnt[0];
	for(int i=1;i<=POS;++i){
		while(r<q[i].r)ins(b[++r]);
		while(l>q[i].l)ins(b[--l]);
		while(r>q[i].r)del(b[r--]);
		while(l<q[i].l)del(b[l++]);
		chmax(ANS[q[i].v],mx+q[i].o);
	}
	for(int i=1;i<=pos;++i)if(mark[i]){
		if(ANS[i]>ans)ans=ANS[i],res={t[i]};else if(ANS[i]==ans)res.pb(t[i]);
	}
	printf("%d\n",ans);
	for(auto it:res)printf("%d\n",it);
}
int main(){
	freopen("mode.in","r",stdin);
	freopen("mode.out","w",stdout);
	int _;read(_);
	while(_--)MAIN();
	return 0;
}
