#include <bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define ll long long
using namespace std;
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});
}
return atb;
}
vector<int> s(vector<int> sk){
if(sk.size()==1) return sk;
int c=sk[0],n=sk.size();
vector<int> so(n,-1),t(505,0);
for(int i=1; i<n; i++){
auto atb=ask(0,c,sk[i]);
for(int j=0; j<atb.size(); j++){
if(atb[j].fi==0) c=atb[j].se;
}
}
so[0]=c;
t[c]=1;
int la=0;
int d=1;
while(d<sk.size()){
for(int i=0; i<n; i++){
int a=sk[i];
if(t[a]==1) continue;
auto atb=ask(0,so[la],a);
if(atb.size()==2){
so[la*2+1]=a;
t[a]=1;
d++;
}
else if(atb[0].se==a || atb[0].fi==a){
t[a]=1;
d++;
int l=0,r=la-1;
while(l<r){
int mid=(l+r)/2;
atb=ask(so[mid],so[la],a);
if(atb.size()==2){
l=r=mid;
break;
}
else if(atb[0].fi==so[mid]) r=mid-1;
else l=mid+1;
}
so[la*2-l]=a;
}
}
la=la*2+1;
}
return so;
}
void solve(){
int n; cin>>n;
int l,r,m=-1;
for(int i=2; i<n; i++){
int sk=0;
auto atb=ask(0,1,i);
for(int j=0; j<atb.size(); j++){
if(atb[j].fi==0) sk++;
}
if(sk==2){
l=1;
r=i;
break;
}
}
vector<int> lsk,rsk;
lsk.pb(l);
rsk.pb(r);
for(int i=2; i<n; i++){
if(i==r) continue;
auto atb=ask(l,r,i);
if(atb.size()>1) m=i;
else{
if(atb[0].fi==l || atb[0].se==l) lsk.pb(i);
else rsk.pb(i);
}
}
lsk=s(lsk);
rsk=s(rsk);
cout<<"! 0";
for(int i=0; i<lsk.size(); i++) cout<<' '<<lsk[i];
if(m!=-1) cout<<' '<<m;
for(int i=rsk.size()-1; i>=0; i--) cout<<' '<<rsk[i];
cout<<endl;
return;
}
int main()
{
int t,k;
cin>>t>>k;
while(t--) solve();
return 0;
}