#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define popcount __builtin_popcount using namespace std; typedef long long ll; typedef pair P; int main() { int n; cin>>n; vector

v(n*n-n); for(int i=1; i>p>>q; v[i]=P(p, q); } vector

vs=v; sort(vs.begin(), vs.end()); int a0=-1, b0=-1; for(int i=1; i w(n*n-n); int k=0; for(int a=1; aq) swap(p, q); w[k++]=P(p, q); } } sort(w.begin(), w.end()); bool dame=0; for(int a=0; a=n || y<0 || y>=n) return false; return true; }; int ans[3000]; fill(ans, ans+n*n-n, -1); ans[0]=a0*n+b0; map mp; for(int i=1; iv[imn].first+v[imn].second) imn=i; } ans[imx]=n*n-1, ans[imn]=n; for(int i=1; iq1) swap(p1, q1); if(p2>q2) swap(p2, q2); if(p1!=p2 || q1!=q2){ cout<<"? "<>p>>q; ans[i]=(a0-v[i].first)*n+(b0-v[i].second); ans[j]=(a0-v[i].second)*n+(b0-v[i].first); if(p==p2 && q==q2){ swap(ans[i], ans[j]); }else if(p!=p1 || q!=q1){ assert(0); } }else{ p1=a0-v[i].first-(n-1), q1=b0-v[i].second-(n-1), p2=a0-v[i].second-(n-1), q2=b0-v[i].first-(n-1); if(p1>q1) swap(p1, q1); if(p2>q2) swap(p2, q2); assert(p1!=p2 || q1!=q2); cout<<"? "<>p>>q; ans[i]=(a0-v[i].first)*n+(b0-v[i].second); ans[j]=(a0-v[i].second)*n+(b0-v[i].first); if(p==p2 && q==q2){ swap(ans[i], ans[j]); }else if(p!=p1 || q!=q1){ assert(0); } } } int ans1[3030]; for(int i=0; i