#include using namespace std; #define repl(i,a,b) for(int i=(int)(a);i<(int)(b);i++) #define rep(i,n) repl(i,0,n) #define mp(a,b) make_pair((a),(b)) #define pb(a) push_back((a)) #define all(x) (x).begin(),(x).end() #define uniq(x) sort(all(x)),(x).erase(unique(all(x)),end(x)) #define fi first #define se second #define dbg(...) _dbg(#__VA_ARGS__, __VA_ARGS__) void _dbg(string){cout< void _dbg(string s,H h,T... t){int l=s.find(',');cout< ostream& operator<<(ostream& o, const pair &p){o<<"("< ostream& operator<<(ostream& o, const vector &v){o<<"[";for(T t:v){o<>a>>b>>c; vector ans; auto f = [&](long x){ ll X = x; ll y = X*X*X + (ll)a*X*X + b*X + c; return y; }; // lからrの中に必ず解が1つ存在 long l = -INF, r = INF; while(r-l>1){ long m = (l+r)/2; ll fm = f(m); if(fm==0){ l=m; r=m; } else if(fm>0) r = m; else l = m; } ans.pb(l); long p,q; // (x-l)(x^2 + px + q) if(l==0){ p = a; q = b; } else { p = a + l; q = -c/l; } auto g = [&](long x){ return x*x + p*x + q; }; l = -INF; r = INF; while(r-l>2){ long ml = (2*l+r)/3; long mr = (l+2*r)/3; long fl = g(ml); long fr = g(mr); if(fl < fr) r = mr; else l = ml; } long mn = (r+l)/2; l = -INF; r = mn; while(r-l>1){ long m = (r+l)/2; if(g(m)<=0) r = m; else l = m; } ans.pb(r); l = mn; r = INF; while(r-l>1){ long m = (r+l)/2; if(g(m)>0) r = m; else l = m; } ans.pb(l); sort(all(ans)); rep(i,3) cout << ans[i] << " \n"[i==2]; return 0; }