n方暴力,一直WA,求调试QAQ
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define edg(i,v,u) for(int i=head[u],v=e[i].to;i;i=e[i].nxt,v=e[i].to)
using namespace std;
inline int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9')f=ch=='-'?-1:1,ch=getchar();
while(ch>='0'&&ch<='9')x=x*10+ch-48,ch=getchar();
return x*f;
}
const int maxn=2e3+10;
int n;
int fa[maxn];
int siz[maxn];
int dis[maxn][maxn];
vector < int > dn[maxn];
inline void ask1(int u,int v){int d;
cout<<"? 1 "<<u<<' '<<v<<endl;
fflush(stdout);
cin>>d;
dis[u][v]=dis[v][u]=d;
}
inline void ask2(int u){
cout<<"? 2 "<<u<<endl;
fflush(stdout);
cin>>siz[u];
rep(i,1,siz[u]){int v;
cin>>v;
if(v!=u)dn[u].push_back(v);
}
}
inline void forty(){
rep(i,1,n)ask2(i);
rep(i,1,n){
rep(j,0,siz[i]-2){
if(!dis[i][dn[i][j]])ask1(i,dn[i][j]);
if(dis[i][dn[i][j]]==1){
fa[dn[i][j]]=i;
}
}
}
cout<<"! ";
rep(i,1,n)if(!fa[i])cout<<i<<' ';else cout<<fa[i]<<' ';
cout<<endl;
fflush(stdout);
}
int main(){
cin>>n;
if(n<=500)forty();
return 0;
}