#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N; cin >> N; vector>tmp(N); vectornow(N); iota(now.begin(),now.end(),0); while(now.size() > 1) { vectornxt; for(int i = 0; i < now.size(); i += 2) { if(i+1 == now.size()) { nxt.push_back(now[i]); } else { cout << "? " << now[i]+1 << " " << now[i+1]+1 << endl; int a; cin >> a; nxt.push_back(a-1); tmp[a-1].push_back(now[i]^now[i+1]^(a-1)); } } now = nxt; } int a = tmp[now[0]][0]; for(int i = 1; i < tmp[now[0]].size(); i++) { cout << "? " << a+1 << " " << tmp[now[0]][i]+1 << endl; cin >> a; a--; } cout << "! " << a+1 << endl; }