#include #define rep(i, a, n) for(int i = a; i < n; i++) #define REP(i, n) rep(i, 0, n) #define repb(i, a, b) for(int i = a; i >= b; i--) #define all(a) a.begin(), a.end() #define int long long #define chmax(x, y) x = max(x, y) #define chmin(x, y) x = min(x, y) using namespace std; typedef pair P; const int mod = 1000000007; const int INF = 1e12; // 質問クエリ int ask(int x, int y, int z) { int d; cout << "?" << " " << x << " " << y << " " << z << endl; cin >> d; return d; } // 回答クエリ void answer(int x, int y, int z) { cout << "!" << " " << x << " " << y << " " << z << endl; } signed main(){ ios::sync_with_stdio(false); cin.tie(0); int a[3] = {10, 10, 10}; int l = -150, r = 150, MIN = INF; rep(i, 0, 20){ int m1 = (l * 2 + r) / 3; int m2 = (l + 2 * r) / 3; int tmp1, tmp2; tmp1 = ask(m1, a[1], a[2]); tmp2 = ask(m2, a[1], a[2]); if(tmp1 < tmp2){ r = m2; }else{ l = m1; } if(tmp1 < MIN){ MIN = tmp1; a[0] = m1; } if(tmp2 < MIN){ MIN = tmp2; a[0] = m2; } } l = -150, r = 150, MIN = INF; rep(i, 0, 20){ int m1 = (l * 2 + r) / 3; int m2 = (l + 2 * r) / 3; int tmp1, tmp2; tmp1 = ask(a[0], m1, a[2]); tmp2 = ask(a[0], m2, a[2]); if(tmp1 < tmp2){ r = m2; }else{ l = m1; } if(tmp1 < MIN){ MIN = tmp1; a[1] = m1; } if(tmp2 < MIN){ MIN = tmp2; a[1] = m2; } } l = -150, r = 150, MIN = INF; rep(i, 0, 20){ int m1 = (l * 2 + r + 2) / 3; int m2 = (l + 2 * r) / 3; int tmp1, tmp2; tmp1 = ask(a[0], a[1], m1); tmp2 = ask(a[0], a[1], m2); if(tmp1 < tmp2){ r = m2; }else{ l = m1; } if(tmp1 < MIN){ MIN = tmp1; a[2] = m1; } if(tmp2 < MIN){ MIN = tmp2; a[2] = m2; } } answer(a[0], a[1], a[2]); return 0; }