#include using namespace std; using lint = long long; template using V = vector; template using VV = V< V >; int main() { int n; cin >> n; auto fn = [&](V<> id) -> VV<> { VV<> v{id}; while (id.size() >= 2) { int m = id.size(); V<> nid; for (int i = 0; i < m; i += 2) { if (i + 1 < m) { cout << "? " << id[i] << ' ' << id[i + 1] << endl; int x; cin >> x; nid.push_back(x); } else nid.push_back(id[i]); } swap(id, nid); v.push_back(id); } return v; }; V<> id(n); iota(begin(id), end(id), 1); auto v = fn(id); int x = v.back().back(); V<>().swap(id); for (const auto& e : v) { int m = e.size(); for (int i = 0; i < m; ++i) if (e[i] == x) { if ((i ^ 1) < m) id.push_back(e[i ^ 1]); } } int res = fn(id).back().back(); cout << "! " << res << endl; }