// #define _GLIBCXX_DEBUG // for STL debug (optional) #include #include #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 std; #define debug(...) fprintf(stderr, __VA_ARGS__) #define int long long int template void chmax(T &a, T b) {a = max(a, b);} template void chmin(T &a, T b) {a = min(a, b);} template void chadd(T &a, T b) {a = a + b;} typedef pair pii; typedef long long ll; int dx[] = {0, 0, 1, -1}; int dy[] = {1, -1, 0, 0}; const ll INF = 1001001001001001LL; const ll MOD = 1000000007LL; signed main() { int A, B, C; cin >> A >> B >> C; int lb = -1000 * 1000, ub = -lb; int X, Y, Z; for(X=lb; X<=ub; X++) { __int128_t ea = (__int128_t)X*X*X; __int128_t eb = (__int128_t)A*X*X; __int128_t ec = (__int128_t)B*X+C; if(ea + eb + ec == 0) { break; } } if(X == 0) { // X(X-p)(X-q) // X^2 + A*X + B = 0 C = B, B = A; } else { // (X-p)(X-q)(X-r) // 多項式を X-r で割る C = -C/X, B = A+X; } long double D = B*B - 4*C; long double S = (-B + sqrt(D)) / 2.0; for(Y=S-2; Y<=S+2; Y++) { Z = -B-Y; const int NINE = 1000000000; if(abs(Y) > NINE) continue; if(abs(Z) > NINE) continue; if(Y*Z != C) continue; if(Y+Z != -B) continue; break; } vector ans = {X, Y, Z}; sort(ans.begin(), ans.end()); printf("%lld %lld %lld\n", ans[0], ans[1], ans[2]); return 0; }