#include <bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define ll long long
using namespace std;
int ar[505];
int N;
vector<pair<int,int>> ask(int a, int b, int c){
vector<pair<int,int>> atb;
cout<<"? "<<a<<' '<<b<<' '<<c<<endl;
int r; cin>>r;
for(int i=0; i<r; i++){
int a1,a2;
cin>>a1>>a2;
atb.pb({a1,a2});
}
/*int p1,p2,p3;
for(int i=0; i<N; i++){
if(ar[i]==a) p1=i;
if(ar[i]==b) p2=i;
if(ar[i]==c) p3=i;
}
int d1=min(abs(p1-p2),N-abs(p1-p2));
int d2=min(abs(p1-p3),N-abs(p1-p3));
int d3=min(abs(p3-p2),N-abs(p3-p2));
int md=min({d1,d2,d3});
if(d1==md) atb.pb({min(a,b),max(a,b)});
if(d2==md) atb.pb({min(a,c),max(a,c)});
if(d3==md) atb.pb({min(c,b),max(c,b)});
cout<<atb.size()<<endl;
for(auto au : atb) cout<<au.fi<<' '<<au.se<<endl;*/
return atb;
}
void solve(){
int n; cin>>n;
//N=n;
//for(int i=0; i<n; i++) cin>>ar[i];
int l=1,r=-1;
for(int i=2; i<n; i++){
int sk=0,p=-1;
auto atb=ask(0,l,i);
for(int j=0; j<atb.size(); j++){
if(atb[j].fi==0) sk++,p=j;
}
if(sk==2) r=i;
else if(sk==1) l=atb[p].se;
}
vector<int> lsk(500,-1),rsk(500,-1);
lsk[0]=l;
rsk[0]=r;
vector<int> t(n,0);
t[0]=t[l]=t[r]=1;
int la=0,d=3;
while(d<n){
for(int i=1; i<n; i++){
if(t[i]) continue;
auto atb=ask(0,lsk[la],i);
if(atb.size()==2){
t[i]=1;
lsk[la*2+1]=i;
d++;
continue;
}
if(atb[0].fi!=0){
l=0; r=la-1;
while(l<r){
int mid=(l+r)/2;
atb=ask(lsk[mid],lsk[la],i);
if(atb.size()==2) l=r=mid;
else if(atb[0].fi==lsk[mid] || atb[0].se==lsk[mid]) r=mid-1;
else l=mid+1;
}
t[i]=1;
lsk[la*2-l]=i;
d++;
continue;
}
atb=ask(0,rsk[la],i);
if(atb.size()==2){
t[i]=1;
rsk[la*2+1]=i;
d++;
continue;
}
if(atb[0].fi!=0){
l=0; r=la-1;
while(l<r){
int mid=(l+r)/2;
atb=ask(rsk[mid],rsk[la],i);
if(atb.size()==2) l=r=mid;
else if(atb[0].fi==rsk[mid] || atb[0].se==rsk[mid]) r=mid-1;
else l=mid+1;
}
t[i]=1;
rsk[la*2-l]=i;
d++;
continue;
}
}
la=la*2+1;
}
cout<<"! 0";
int p=0;
while(lsk[p]!=-1){
cout<<' '<<lsk[p];
p++;
}
p=499;
while(rsk[p]==-1) p--;
while(p>=0){
cout<<' '<<rsk[p];
p--;
}
cout<<endl;
return;
}
int main()
{
int t,k;
cin>>t>>k;
while(t--) solve();
return 0;
}