//テンプレート //Visual Studio用 #define _CRT_SECURE_NO_WARNINGS #include using namespace std; template bool chmin(T& a, T b) {return a > b ? a = b, true : false;} template bool chmax(T& a, T b) {return a < b ? a = b, true : false;} template vector cumulate(vector& a) { const int n = (int)a.size(); vector res(n + 1); a.emplace_back(0); exclusive_scan(a.begin(), a.end(), res.begin(), 0ll); a.pop_back(); return res; } templateistream& operator>>(istream& is, vector& v) { for (auto& e : v)is >> e; return is; } templateostream& operator<<(ostream& os, vector& v) { for (auto& e : v)os << e << " "; return os; } using ll = long long; using ull = unsigned long long; using uint = unsigned int; struct Edge { int to; ll weight; Edge(int t, ll w) :to(t), weight(w) {} bool operator==(Edge e) { return this->to == e.to and this->weight == e.weight; } bool operator<(Edge e) { if (this->to < e.to) { return this->weight <= e.weight; } else return false; } }; ostream& operator<<(ostream& os, Edge e) { cout << e.to; return os; } using graph_ = vector>; class Graph { graph_ g; public: Graph(int n) :g(n) {} graph_::iterator begin() { return g.begin(); } graph_::const_iterator begin() const { return g.begin(); } graph_::iterator end() { return g.end(); } graph_::const_iterator end() const { return g.end(); } vector& operator [](int v) { return g[v]; } const graph_& data() { return g; } void add(int u, int v, ll w = 1) { g[u].emplace_back(Edge{ v,w }); } void wadd(int u, int v, ll w = 1) { add(u, v, w); add(v, u, w); } }; //Atcoder Library /**/ #include using namespace atcoder; using mint = modint998244353; //using mint = modint1000000007; //using mint0 = dynamic_modint<0>; //using mint = modint; //mint::set_mod(); istream& operator>>(istream& is, mint& x) { ll r; cin >> r; x = r; return is; } ostream& operator<<(ostream& os, mint& x) { cout << x.val(); return os; } /**/ //debug用 #define SHOW(n) cout << #n << " = " << n << endl; /* ここまでテンプレート */ int main() { /**/ cin.tie(nullptr); ios::sync_with_stdio(false); /**/ cout << "? " << 100 << endl; int x; cin >> x; cout << "? " << 100 - x - 1 << endl; int y; cin >> y; int b = y + 1, a = 0; for (int i = 1; i < b; ++i) { if ((i + 100 - x) % b == 0) { a = i; break; } } cout << "! " << a << ' ' << b << endl; return 0; }