#include using namespace std; using ll = long long; #include namespace mp = boost::multiprecision; int main () { ll n, m, l; cin >> n >> m >> l; ll ng = 0, ok = (ll)1e9 + 1; while (abs(ok - ng) > 1) { ll mu = (ok + ng) / 2; ll x; cout << "? " << mu << " 1" << endl; cin >> x; if (mu == x) { ng = mu; } else { ok = mu; } } mp::cpp_int ml = 1; for (int i = 0; i < l; i ++) ml *= m; ll ans = 1; n %= ok; while (ml) { if (ml & 1) { ans = (ans * n) % ok; } ml>>= 1; n = (n * n) % ok; } cout << "! " << ans << endl; }