#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define ll long long #define ld long double #define EPS 0.0000000001 #define INF 1e9 #define LINF (ll)INF*INF #define MOD 1000000007 #define rep(i,n) for(int i=0;i<(n);i++) #define loop(i,a,n) for(int i=a;i<(n);i++) #define all(in) in.begin(),in.end() #define shosu(x) fixed< vi; typedef vector vs; typedef pair pii; typedef vector vp; int gcd(int a, int b){ if(b==0) return a; return gcd(b,a%b); } int lcm(int a, int b){ return a*b/gcd(a,b); } pii f(int i, int j){ int a = 1000*i/(i+j)+5; int b = 1000*j/(i+j)+5; return pii(a/10,b/10); } int f(int x, int y, int z){ cout << "?" << " " << x << " " << y << " " << z << endl; int ret; cin >> ret; return ret; } signed main(void) { int x,y,z,lb,ub,t; x = y = z = 1; lb = -150, ub = 150; rep(_,15){ int m1 = (lb+lb+ub)/3; int m2 = (lb+ub+ub)/3; int t1 = f(m1,y,z); int t2 = f(m2,y,z); if(t1 < t2) ub = m2; else lb = m1; } t = f(lb,y,z); loop(i,lb,ub+1){ int tmp = f(i,y,z); if(t > tmp){ t = tmp; lb = i; } } x = lb; lb = -150, ub = 150; rep(_,15){ int m1 = (lb+lb+ub)/3; int m2 = (lb+ub+ub)/3; int t1 = f(x,m1,z); int t2 = f(x,m2,z); if(t1 < t2) ub = m2; else lb = m1; } t = f(x,lb,z); loop(i,lb,ub+1){ int tmp = f(x,i,z); if(t > tmp){ t = tmp; lb = i; } } y = lb; lb = -150, ub = 150; rep(_,15){ int m1 = (lb+lb+ub)/3; int m2 = (lb+ub+ub)/3; int t1 = f(x,y,m1); int t2 = f(x,y,m2); if(t1 < t2) ub = m2; else lb = m1; } t = f(x,y,lb); loop(i,lb,ub+1){ int tmp = f(x,y,i); if(t > tmp){ t = tmp; lb = i; } } z = lb; cout << "!" << " " << x << " " << y << " " << z << endl; }