text: h> using namespace std; inline long long fpow(long long n, long long k, int p = 998244353) { long long r = 1; for (; k; k >>= 1) { if (k & 1) r = r * n % p; n = n * n % p; } return r; } inline long long inv(long long a, long long p = 998244353) { return fpow(a, p - 2, p); } inline long long addmod(long long a, long long val, long long p = 998244353) { { if ((a = (a + val)) >= p) a -= p; } return a; } inline long long submod(long long a, long long val, long long p = 998244353) { { if ((a = (a - val)) < 0) a += p; } return a; } inline long long mult(long long a, long long b, long long p = 998244353) { return (long long)a * b % p; } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); ; bool greater = false; cout << "?0 0" << endl; int x, y; cin >> x; if (x == 1) greater = true; int cura = 0, curb = 0; for (int i = 29; i >= 0; i--) { cout << "?" << (cura ^ (1 << i)) << " " << curb << endl; cin >> x; cout << "?" << cura << " " << (curb ^ (1 << i)) << endl; cin >> y; if (x != y) { if (y == 1) { cura |= (1 << i); curb |= (1 << i); } } else { if (greater) cura |= (1 << i); else curb |= (1 << i); if (x == 1) greater = true; else greater = false; } } cout << "!" << cura << " " << curb << endl; }