#include <bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define ll long long
using namespace std;
map<pair<int,pair<int,int>>,vector<pair<int,int>>> mp;
vector<pair<int,int>> ask(int a, int b, int c){
if(a>b) swap(a,b);
if(a>c) swap(a,c);
if(b>c) swap(b,c);
if(mp.find({a,{b,c}})!=mp.end()) return mp[{a,{b,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});
}
mp[{a,{b,c}}]=atb;
return atb;
}
void solve(){
int n; cin>>n;
mp.clear();
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),sk(1100,-1);
t[0]=t[l]=t[r]=1;
sk[550]=l;
sk[551]=0;
sk[552]=r;
int lf=550,rf=552,d=3;
while(d<n){
for(int i=1; i<n; i++){
if(t[i]) continue;
while(sk[lf]!=-1) lf--;
lf++;
while(sk[rf]!=-1) rf++;
rf--;
auto atb=ask(sk[lf],sk[rf],i);
if(atb.size()==3){
int di=rf-lf;
sk[rf+di]=i;
sk[rf+di-n]=i;
t[i]=1;
d++;
}
if(atb.size()==2){
if((atb[0].fi==i || atb[0].se==i) && (atb[1].fi==i || atb[1].se==i)){
int di=(n-rf+lf)/2;
sk[rf+di]=i;
sk[rf+di-n]=i;
t[i]=1;
d++;
}else{
int di=rf-lf;
pair<int,int> pa;
if(atb[0].fi==i || atb[0].se==i) pa=atb[0];
else pa=atb[1];
if(pa.fi==sk[rf] || pa.se==sk[rf]){
sk[rf+di]=i;
sk[rf+di-n]=i;
}else{
sk[lf-di]=i;
sk[lf-di+n]=i;
}
t[i]=1;
d++;
}
}
if(atb.size()==1){
if(atb[0].fi!=i && atb[0].se!=i) continue;
if(atb[0].fi==sk[rf] || atb[0].se==sk[rf]){
l=lf+1,r=rf-1;
while(l<r){
int mid=(l+r)/2;
atb=ask(sk[mid],sk[rf],i);
if(atb.size()==2) l=r=mid;
else if(atb[0].fi==i || atb[0].se==i) l=mid+1;
else r=mid-1;
}
int di=rf-l;
sk[rf+di]=i;
sk[rf+di-n]=i;
}
else{
l=lf+1,r=rf-1;
while(l<r){
int mid=(l+r)/2;
atb=ask(sk[mid],sk[lf],i);
if(atb.size()==2) l=r=mid;
else if(atb[0].fi==i || atb[0].se==i) r=mid-1;
else l=mid+1;
}
int di=l-lf;
sk[lf-di]=i;
sk[lf-di+n]=i;
}
t[i]=1;
d++;
}
}
}
cout<<"!";
for(int i=lf; i<lf+n; i++) cout<<' '<<sk[i];
cout<<endl;
return;
}
int main()
{
int t,k;
cin>>t>>k;
while(t--) solve();
return 0;
}