本人在本地上测是过的,可是交上去却 Wa#1
#include<bits/stdc++.h>
#define F(i,l,r) for(int i=l,i##end=r;i<=i##end;++i)
#define G(i,l,r) for(int i=l,i##end=r;i>=i##end;--i)
#define x first
#define y second
#define pii pair<int,int>
#define mp(x,y) make_pair(x,y)
#define ep emplace_back
#define lowbit(x) (x&-x)
template<typename T>inline void readmain(T &n){T sum=0,x=1;char ch=getchar();while(!isdigit(ch)){if(ch=='-')x=-1;ch=getchar();}while(isdigit(ch)){sum=sum*10+ch-'0';ch=getchar();}n=sum*x;}
template<typename T>inline T& read(T &x){readmain(x);return x;}
template<typename T,typename ...Tr>inline void read(T &x,Tr&... r){readmain(x);read(r...);}
using namespace std;
int ma[20000];int cnt=0;
bool ask(int x,int y,int z)
{
printf("? %d %d %d\n",x,y,z);
cnt++;
fflush(stdout);
int xx;
cin>>xx;
return xx;
}
int ans[20000];
void solve()
{
int n;
fflush(stdout);
cin>>n;cnt=0;
F(i,1,n) ma[i]=-1;
F(i,1,n/3)ma[i*3-2]=ask(i*3-2,i*3-1,i*3);
int _0=-1,_1=-1;
F(i,1,n) ans[i]=-1;
F(i,1,n/3-1)
{
if(_1!=-1 && _0!=-1) break;
if(ma[i*3-2]^ma[i*3+1])
{
int a=i*3-2;
int b=a+1,c=a+2,d=a+3,e=a+4,f=a+5;
if(ma[a])
{
if(!ask(b,c,d)){_1=a;_0=b;goto sk;}
if(!ask(b,c,e)){_1=a;_0=e;goto sk;}
if(!ask(b,c,f)){_1=a;_0=f;goto sk;}
_1=b;
if(ask(_1,d,e)){_0=f;goto sk;}
if(ask(_1,e,f)){_0=d;goto sk;}
if(ask(_1,d,f)){_0=e;goto sk;}
_0=e;
}
else
{
if(ask(b,c,d)){_0=a;_1=b;goto sk;}
if(ask(b,c,e)){_0=a;_1=e;goto sk;}
if(ask(b,c,f)){_0=a;_1=f;goto sk;}
_0=b;
if(!ask(_0,d,e)){_1=f;goto sk;}
if(!ask(_0,e,f)){_1=d;goto sk;}
if(!ask(_0,d,f)){_1=e;goto sk;}
_1=e;
}
sk:
ans[_0]=0;
ans[_1]=1;
if(a!=_0 && a!=_1) ans[a]=ask(_0,_1,a);
if(f!=_0 && f!=_1) ans[f]=ask(_0,_1,f);
if(e!=_0 && e!=_1) ans[e]=ask(_0,_1,e);
if(d!=_0 && d!=_1) ans[d]=ask(_0,_1,d);
if(c!=_0 && c!=_1) ans[c]=ask(_0,_1,c);
if(b!=_0 && b!=_1) ans[b]=ask(_0,_1,b);
break;
}
}
F(i,1,n/3)
{
if(ans[i*3-2]==-1 && ans[i*3-1]==-1 && ans[i*3]==-1)
{
int a=i*3-2,b=i*3-1,c=i*3;
if(ma[a])
{
if(ask(_0,a,b)){ans[a]=1;ans[b]=1;ans[c]=ask(_0,_1,c); }
else{ans[c]=1;ans[a]=ask(a,_0,_1);ans[b]=1^ans[a];}
}
else
{
if(!ask(_1,a,b)){ans[a]=0;ans[b]=0;ans[c]=ask(_0,_1,c); }
else{ans[c]=0;ans[a]=ask(a,_0,_1);ans[b]=1^ans[a];}
}
}
}
cnt=0;
F(i,1,n) if(ans[i]==0) cnt++;
printf("! %d ",cnt);
F(i,1,n) if(ans[i]==0)cout<<i<<" ";
cout<<endl;
fflush(stdout);
}
signed main(){
int T;
read(T);
while(T--)solve();
return 0;
}