#include using namespace std; #define ll long long const ll maxn=20005; ll pos[maxn+5],bad[maxn+5],nxt[maxn+5],ans[maxn+5]; bool ins[maxn+5]; vector s;set h; ll ask(ll i,ll j){ printf("1 %lld %lld\n",i,j); fflush(stdout); ll zc; scanf("%lld",&zc); return zc; } void del(ll v){ if(!ins[v])return; ins[v]=0; ll zc1=pos[v],zc2=s.back(); s[zc1]=zc2; pos[zc2]=zc1; s.pop_back(); } int main(){ ll t,n,i,j,k,cnt,zc,cur; srand(time(0)); scanf("%lld",&t); while(t--){ scanf("%lld",&n); s.clear();h.clear(); for(i=1;i<=n;i++)s.push_back(i),pos[i]=i-1,ins[i]=1,bad[i]=0,nxt[i]=0,ans[i]=0; while(s.size()>1){ cnt=0; do{ i=s[rand()%s.size()]; j=s[rand()%s.size()]; while(i==j)j=s[rand()%s.size()]; if(i>j)swap(i,j); zc=i*maxn+j; cnt++; }while(h.count(zc)&&cnt<50); if(h.count(zc))break; h.insert(zc); k=ask(i,j); if(k!=-1)del(k); else{ bad[i]++;bad[j]++; if(bad[i]>=2)del(i); if(bad[j]>=2)del(j); } } if(s.size()==2){ i=s[0];j=s[1]; k=1;while(ins[k])k++; zc=ask(i,k); if(zc==-1)cur=j;else cur=i; }else cur=s[0]; ans[cur]=1; for(i=1;i<=n;i++){ if(i==cur)continue; k=ask(cur,i); if(k!=-1)nxt[i]=k; } for(j=1;j