#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef pair PII; typedef vector VI; typedef vector VVI; #define MP make_pair #define PB push_back #define inf 1000000007 #define mod 1000000007 #define rep(i,n) for(int i=0;i<(int)(n);++i) int q(int a,int b){ cout << "? " << a << " " << b << endl; int res; cin >> res; return res; } int main(){ int n; cin >> n; int ans; vectora; rep(i,n){ a.push_back(i+1); } vector > s(n+1); int mx = 0; while(1){ vector b; int m = a.size(); if(m==1){ mx = a[0]; break; } rep(i,m/2){ int p = q(a[2*i],a[2*i+1]); b.push_back(p); if(p==a[2*i]){ s[p].push_back(a[2*i+1]); }else{ s[p].push_back(a[2*i]); } } if(m%2){ b.push_back(a[m-1]); } a = b; } a = s[mx]; while(1){ vector b; int m = a.size(); if(m==1){ mx = a[0]; break; } rep(i,m/2){ int p = q(a[2*i],a[2*i+1]); b.push_back(p); if(p==a[2*i]){ s[p].push_back(a[2*i+1]); }else{ s[p].push_back(a[2*i]); } } if(m%2){ b.push_back(a[m-1]); } a = b; } cout << "! " << mx << endl; return 0; }