#include <bits/stdc++.h>
 
using namespace std;
#define F first 
#define S second
#define sqr(x) ((x) * (x)) 
#define all(c) c.begin(), c.end()
#define tr(c, it) for(decltype (c.begin()) it = c.begin(); it != c.end(); it++)
#define eps 1e-9
#define pb push_back
#define ppb pop_back
#define lb lower_bound
#define ub upper_bound
#define inf 1000000001
#define INF 1e17
#define sz 11000
#define N 100100
#define M 1000000007 
 
   
#define name "a"
#define isFile 0
 
typedef long long ll;	typedef unsigned long long ull;	typedef long double ld; 
int bPow(int v, int u, int mod){	if(!u)	return 1;	int res = bPow(v, u / 2, mod);	res = (res * 1ll * res) % mod;	if(u & 1) res = (res * 1ll * v) % mod;	return res;} 
void faster(){			
	ios_base::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL);	
	if(isFile){	freopen(name".in", "r", stdin);	freopen(name".out", "w", stdout); }}
vector<int> prime; bool notprime[N];
void resh(){ int n = N - 10;	for(int i = 2; i < n; i++)	if(!notprime[i]){	prime.pb(i); for(int j = i; j < n; j += i) notprime[j] = 1;}}
int is_comp(ll p){	for(int i = 0; prime[i] * 1ll * prime[i] <= p; i++){	if(p % prime[i] == 0)	return prime[i]; }	return 0;	}
bool is_prime(ll p){	for(int i = 0; prime[i] * 1ll * prime[i] <= p; i++){	if(p % prime[i] == 0)	return 0; }	return 1;	}
ll gcd(ll a, ll b){	if(a > b)	swap(a, b);	ll temp;	while(a){	temp  = a;	a = b % a;	b = temp;	}	return b;	}
 

int n, p[sz], x, v;
vector<int> w;
void ask1(int i, int j, bool ok){
	cout << "? 1 " << i << ' ' << j << " " << n - 1 << endl;  
	cout.flush();	
	cin >> v;
	if(v == n){
		x = j;
		p[x] = n;
		return;
	}
	if(!ok && v == n - 1){
		w.pb(i);
	}
}
void ask2(int i){
	cout << "? 2 " << i << ' ' << x << " 1" << endl;  
	cout.flush();	
	cin >> p[i];
}
void ans(){
	cout << "! ";
	for(int i = 1; i <= n; i++)
		cout << p[i] << ' ';
	cout << endl;
	cout.flush();
}
void solve(){	
	cin >> n;
	x = 0;
	w.clear();	
	for(int i = 1; i <= n - 1; i += 2){
		ask1(i, i + 1, 0);
		if(x)
			break;
	}
	if(!x && n % 2)
		ask1(n - 1, n, 0);
	if(!x){
		for(int i = 0; i < w.size(); i++){
			int l = 1;
			if(w[i] == l)
				l++;
			ask1(l, w[i], 1);
		}
	}
	for(int i = 1; i <= n; i++)
		if(x != i){
			ask2(i);
		}
	ans();
}
int main(){
	faster();
	int T = 1;
	cin >> T;
	while(T--){
		solve();
		cout << endl;
	}
 	return 0;
}