#include<bits/stdc++.h>
#define ll long long
using namespace std;

const int MAXN=100100;
int p[MAXN];
vector<int> vec[MAXN];

int query(int a,int b,int c)
{
	int ret;
	cout<<"? "<<a<<" "<<b<<" "<<c<<endl;
	cin>>ret;
	return ret;
}

int main()
{
	ios_base::sync_with_stdio(false), cin.tie(nullptr);
	int T,n,i,j,k,a,b,mx,id1,id2,ret;
	cin>>T;
	while(T--)
	{
		cin>>n;
		a=0;
		for(i=1;i<=13&!a;i++)
			for(j=i+1;j<=13&!a;j++)
				for(k=j+1;k<=13&!a;k++)
				{
					if(query(i,j,k)<=(n-4)/6)
					{
						a=i,b=j;
						break;
					}
				}
		mx=-1;
		for(i=1;i<=n;i++)
		{
			if(i==a||i==b)
				continue;
			ret=query(i,a,b);
			vec[ret].push_back(i);
			mx=max(ret,mx);
		}
		id1=vec[mx][0];
		id2=vec[mx-1][0];
		if(vec[mx-1].size()>=2)
		{
			if(query(id1,vec[mx-1][0],a)>query(id1,vec[mx-1][1],a))
				id2=vec[mx-1][1];
		}
		p[id1]=1;
		p[id2]=2;
		for(i=1;i<=n;i++)
		{
			if(i==id1||i==id2)
				continue;
			p[i]=query(id1,id2,i)+2;
		}
		if(p[1]>p[2])
		{
			for(i=1;i<=n;i++)
				p[i]=n-p[i]+1;
		}
		cout<<"!";
		for(i=1;i<=n;i++)
			cout<<" "<<p[i];
		cout<<endl;
		cin>>n;
		for(i=0;i<=mx;i++)
			vec[i].clear();
	}
}
