#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 atcoder; using namespace std; using ll = long long; #define all(A) A.begin(),A.end() using vll = vector; #define rep(i, n) for (long long i = 0; i < (long long)(n); i++) using Graph = vector>>; vector seen; bool C = true; vector dist; ll mod =1e9+7; int op(int a, int b) { return min(a, b); } int e() { return int(1e9); } int main() { cout << "? 0 0" << endl; ll d1, d2; cin >> d1; cout << "? 100 0" << endl; cin >> d2; rep(i, 101)rep(j, 101) { if (i * i + j * j == d1&& (i - 100) * (i - 100) + j* j == d2) { cout << "! " << i << " " << j << endl; return 0; } } }