#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define vt vector<ll>
#define vvt vector<vt>
#define all(a) a.begin(), a.end()
#define pb push_back
void print(vt &a){
for(auto val: a)
cout<<val<<" ";
cout<<endl;
}
void read(vt &a){
for(int i=0;i<a.size();i++)
cin>>a[i];
}
void solve(){
ll n;
cin>>n;
vvt a(n+1, vt(n+1,0));
vt out(n+1, 0);
for(int i=2;i<=n;i++)
for(int j=2;j<=n;j++){
if(i==j)
continue;
cout<<"? 3 "<<1<<" "<<i<<" "<<j<<endl;
ll ans;
cin>>ans;
a[i][j]|=ans;
}
for(int j=2;j<=n;j++)
a[1][j]=1;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
out[i]+=a[i][j];
}
vt topo(n+1);
ll cur=1;
for(int i=1;i<=n;i++){
for(int val=1;val<=n;val++){
if(out[val]==0){
topo[val]=cur;
out[val]=-1;
cur++;
for(int par=1;par<=n;par++){
if(a[par][val]){
out[par]--;
}
}
break;
}
}
}
vvt edge;
for(int i=2;i<=n;i++){
ll mn=INT_MAX;
ll ans=-1;
for(int par=1;par<=n;par++){
if(a[par][i]){
if(topo[par]<mn){
mn = topo[par];
ans=par;
}
}
}
if(ans!=-1)
edge.pb({ans, i});
}
cout<<"!"<<endl;
for(auto val: edge)
print(val);
}
int main() {
// your code goes here
ll t;
cin>>t;
while(t--){
solve();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgdnQgdmVjdG9yPGxsPgojZGVmaW5lIHZ2dCB2ZWN0b3I8dnQ+CiNkZWZpbmUgYWxsKGEpIGEuYmVnaW4oKSwgYS5lbmQoKQojZGVmaW5lIHBiIHB1c2hfYmFjawoKdm9pZCBwcmludCh2dCAmYSl7Cglmb3IoYXV0byB2YWw6IGEpCgkJY291dDw8dmFsPDwiICI7Cgljb3V0PDxlbmRsOwp9Cgp2b2lkIHJlYWQodnQgJmEpewoJZm9yKGludCBpPTA7aTxhLnNpemUoKTtpKyspCgkJY2luPj5hW2ldOwp9Cgp2b2lkIHNvbHZlKCl7CglsbCBuOwoJY2luPj5uOwoJdnZ0IGEobisxLCB2dChuKzEsMCkpOwoJdnQgb3V0KG4rMSwgMCk7CgkKCWZvcihpbnQgaT0yO2k8PW47aSsrKQoJZm9yKGludCBqPTI7ajw9bjtqKyspewoJCWlmKGk9PWopCgkJY29udGludWU7CgkJY291dDw8Ij8gMyAiPDwxPDwiICI8PGk8PCIgIjw8ajw8ZW5kbDsKCQlsbCBhbnM7CgkJY2luPj5hbnM7CgkJYVtpXVtqXXw9YW5zOwoJfQoJZm9yKGludCBqPTI7ajw9bjtqKyspCgkJYVsxXVtqXT0xOwoJCglmb3IoaW50IGk9MTtpPD1uO2krKyl7CgkJZm9yKGludCBqPTE7ajw9bjtqKyspCgkJCW91dFtpXSs9YVtpXVtqXTsKCX0KCQoJdnQgdG9wbyhuKzEpOwoJbGwgY3VyPTE7Cglmb3IoaW50IGk9MTtpPD1uO2krKyl7CgkJZm9yKGludCB2YWw9MTt2YWw8PW47dmFsKyspewoJCQlpZihvdXRbdmFsXT09MCl7CgkJCQl0b3BvW3ZhbF09Y3VyOwoJCQkJb3V0W3ZhbF09LTE7CgkJCQljdXIrKzsKCQkJCWZvcihpbnQgcGFyPTE7cGFyPD1uO3BhcisrKXsKCQkJCQlpZihhW3Bhcl1bdmFsXSl7CgkJCQkJCW91dFtwYXJdLS07CgkJCQkJfQoJCQkJfQoJCQkJYnJlYWs7CgkJCX0KCQl9Cgl9CgkKCXZ2dCBlZGdlOwoJZm9yKGludCBpPTI7aTw9bjtpKyspewoJCWxsIG1uPUlOVF9NQVg7CgkJbGwgYW5zPS0xOwoJCWZvcihpbnQgcGFyPTE7cGFyPD1uO3BhcisrKXsKCQkJaWYoYVtwYXJdW2ldKXsKCQkJCWlmKHRvcG9bcGFyXTxtbil7CgkJCQkJbW4gPSB0b3BvW3Bhcl07CgkJCQkJYW5zPXBhcjsKCQkJCX0KCQkJfQoJCX0KCQkKCQlpZihhbnMhPS0xKQoJCQllZGdlLnBiKHthbnMsIGl9KTsKCX0KCQoJY291dDw8IiEiPDxlbmRsOwoJZm9yKGF1dG8gdmFsOiBlZGdlKQoJcHJpbnQodmFsKTsKfQoKaW50IG1haW4oKSB7CgkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCglsbCB0OwoJCgljaW4+PnQ7Cgl3aGlsZSh0LS0pewoJCXNvbHZlKCk7Cgl9CglyZXR1cm4gMDsKfQ==