Problem: This is an interactive problem.

There is a secret permutation p (1-indexed) of numbers from 1 to n. More formally, for 1 ≤ i ≤ n, 1 ≤ p[i] ≤ n and for 1 ≤ i < j ≤ n, p[i] ≠ p[j]. It is known that p[1]<p[2].

In 1 query, you give 3 distinct integers a,b,c (1 ≤ a,b,c ≤ n), and receive the median of \{|p[a]-p[b]|,|p[b]-p[c]|,|p[a]-p[c]|\}.

In this case, the median is the 2-nd element (1-indexed) of the sequence when sorted in non-decreasing order. The median of \{4,6,2\} is 4 and the median of \{0,123,33\} is 33.

Can you find the secret permutation in not more than 2n+420 queries?

Note: the grader is not adaptive: the permutation is fixed before any queries are made.

Input

The first line of input contains a single integer t (1 ≤ t ≤ 1000) — the number of testcases.

The first line of each testcase consists of a single integer n (20 ≤ n ≤ 100000) — the length of the secret permutation.

It is guaranteed that the sum of n over all test cases does not exceed 100000.

Interaction

For each testcase, you begin the interaction by reading n.

To perform a query, output "? a b c" where a,b,c is the 3 indices you want to use for the query.

Numbers have to satisfy 1 ≤ a,b,c ≤ n and a ≠ b,b ≠ c,a ≠ c.

For each query, you will receive a single integer x: the median of \{|p[a]-p[b]|,|p[b]-p[c]|,|p[a]-p[c]|\}.

In case your query is invalid or you asked more than 2n+420 queries, the interactor will print "−1" and will finish interaction. You will receive Wrong answer verdict. Make sure to exit immediately to avoid getting other verdicts.

When you have determined the secret permutation, output "! p[1] p[2] ... p[n]". If the secret permutation is correct, the interactor will print "1". Otherwise, the interactor will print "-1" and will finish interaction. You will receive Wrong answer verdict. Make sure to exit immediately to avoid getting other verdicts.

After printing a query do not forget to output the end of line and flush the output. Otherwise, you will get Idleness limit exceeded verdict.

To do this, use:

  * fflush(stdout) or cout.flush() in C++;
  * System.out.flush() in Java;
  * flush(output) in Pascal;
  * stdout.flush() in Python;
  * see documentation for other languages.



Hacks:

To hack, use the following format of test:

The first line should contain a single integer t (1 ≤ t ≤ 1000) — the number of testcases.

The first line of each testcase should contain a single integer n (20 ≤ n ≤ 100000) — the length of the secret permutation.

The following line of should contain n integers p[1],p[2],p[3],…,p[n]. p[1]<p[2] and p must be a permutation of integers from 1 to n.

You must ensure that the sum of n over all testcases does not exceed 100000.

Example

Input


1
20

6

9

1

Output




? 1 5 2

? 20 19 2

! 9 10 19 7 16 18 11 14 15 6 20 8 17 4 5 3 12 2 13 1

Note

The secret permutation is \{9,10,19,7,16,18,11,14,15,6,20,8,17,4,5,3,12,2,13,1\}.

For the first query, the values of (a,b,c) is (1,5,2). Since p[1]=9, p[5]=16 and p[2]=10. The return value is the median of \{|9-16|,|16-10|,|9-10|\} which is 6.

For the second query, the values of (a,b,c) is (20,19,2). Since p[20]=1, p[19]=13 and p[2]=10. The return value is the median of \{|1-13|,|13-10|,|1-10|\} which is 9.

By some miracle, we have figured out that the secret permutation is \{9,10,19,7,16,18,11,14,15,6,20,8,17,4,5,3,12,2,13,1\}. We output it and receive 1 from the interactor, meaning that we have guessed the secret permutation correctly.

Solution (in CPP):

Solution:
#include<bits/stdc++.h>
using namespace std;
#define int long long
int read(){
	int a=0,fh=1;char c=getchar();
	while(c>'9'||c<'0'){if(c=='-')fh=-1;c=getchar();}
	while('0'<=c&&c<='9'){
		a=a*10+c-48;
		c=getchar();
	}
	return a*fh;
}
#define MN 200005
#define pii pair<int,int>
#define mp make_pair
#define x first
#define y second
#define pb push_back
#define vc vector
int T,n;
pii val[MN];
int ans[MN];
//int p[MN];
int qry(int a,int b,int c){
//	assert(a!=b&&b!=c&&a!=c);
//	if(p[a]>p[b])swap(a,b);
//	if(p[b]>p[c])swap(b,c);
//	if(p[a]>p[b])swap(a,b);
//	return max(p[b]-p[a],p[c]-p[b]);
	cout<<"? "<<a<<" "<<b<<" "<<c<<endl;
	int v;cin>>v;
	return v;
}
#define y1 hhakioi
signed main(){
	ios::sync_with_stdio(0);
	T=read();
	while(T--){
		n=read();
//		for(int i=1;i<=n;++i)
//			p[i]=i;
//		random_shuffle(p+1,p+1+n);
//		if(p[1]>p[2])for(int i=1;i<=n;++i)p[i]=n-p[i]+1;
//		for(int i=1;i<=n;++i){
//			cerr<<p[i]<<" ";
//		}
//		cerr<<endl;
		int A=0,B=0;
		while(1){
			int a=rand()%n+1,b=rand()%n+1,c=rand()%n+1;	
			while(a==b||a==c||b==c)a=rand()%n+1,b=rand()%n+1,c=rand()%n+1;	
			if(qry(a,b,c)<=(n-4)/6){A=a,B=b;break;}
		}
		int mx=0,pos=0;
		for(int i=1;i<=n;++i){
			if(i!=A&&i!=B)val[i]=mp(qry(A,B,i),i);
			else val[i]=mp(0,0);
		}	
		sort(val+1,val+1+n);
		reverse(val+1,val+1+n);
		int aa=val[1].y,bb;
		pii y1,y2;
		if(val[2].x==val[1].x)y1=val[3],y2=val[4];
		else y1=val[2],y2=val[3];
		if(y1.x==y2.x){
			if(qry(aa,A,y1.y)<qry(aa,A,y2.y))bb=y1.y;
			else bb=y2.y;
		}
		else bb=y1.y;
//		cerr<<"find: "<<aa<<" "<<bb<<endl;
		ans[aa]=1;ans[bb]=2;
		for(int i=1;i<=n;++i){
			if(i==aa||i==bb)continue;	
			ans[i]=2+qry(aa,bb,i);
		}
		if(ans[1]>ans[2])
			for(int i=1;i<=n;++i)ans[i]=n-ans[i]+1;
		cout<<"! ";
		for(int i=1;i<=n;++i)cout<<ans[i]<<" ";
		cout<<endl;
		int sb;cin>>sb;
	}
	return 0;
}

//神tm每次最后有返回信息