#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
const int maxn=1e5;
int T,n;
int val[maxn+5];
int p[maxn+5];
int query(int a,int b,int c){
	int x;
	printf("? %d %d %d\n",a,b,c);
	fflush(stdout);
	scanf("%d",&x);
	return x;
}
int main(){
	scanf("%d",&T);
	while(T--){
		int a,b;
		scanf("%d",&n);
		bool ok=0;
		for(int i=1;i<=13&&!ok;i++)
			for(int j=i+1;j<=13&&!ok;j++)
				for(int k=j+1;k<=13&&!ok;k++)
					if(query(i,j,k)*6<=n-4){
						a=i; b=j; ok=1;
					}
		int nowid,nows=0;
		int y[5],toty=0;
		for(int i=1;i<=n;i++){
			val[i]=0;
			if(i==a||i==b) continue;
			val[i]=query(a,b,i);
			if(val[i]>nows){
				nows=val[i]; nowid=i;
			}
		}
		for(int i=1;i<=n;i++)
			if(val[i]==nows-1) y[++toty]=i;
		if(toty==1){ a=nowid; b=y[1]; }
		else{
			int v1=query(nowid,a,y[1]),v2=query(nowid,a,y[2]);
			a=nowid;
			if(v1<v2) b=y[1];
			else b=y[2];
		}
		p[a]=1; p[b]=2;
		for(int i=1;i<=n;i++)
			if(i!=a&&i!=b) p[i]=query(a,b,i)+2;
		if(p[1]>p[2])
			for(int i=1;i<=n;i++) p[i]=n-p[i]+1;
		printf("! ");
		for(int i=1;i<=n;i++) printf("%d ",p[i]);
		printf("\n");
		fflush(stdout);
		scanf("%d",&n);
	}
	return 0;
}

