#include #include bool twosquares(int64_t n, int64_t &a, int64_t &b) { int64_t maxa = std::sqrt(n / 2LL); for(a = 0; a <= maxa; a++) { b = std::sqrt(n - a*a); if(n == a*a+b*b) return true; } return false; } bool threesquares(int64_t n, int64_t &a, int64_t &b, int64_t &c) { if(n % 4 == 0) { bool ok = threesquares(n/4, a, b, c); if(ok) { a *= 2; b *= 2; c *= 2; } return ok; } if(n % 8 == 7) return false; int64_t maxa = std::sqrt(n / 3LL); for(a = 0; a <= maxa; a++) { if(twosquares(n - a*a, b, c)) return true; } // unreachable return false; } int main() { int64_t n; std::cin >> n; int64_t a, b, c; if(!threesquares(n, a, b, c)) { std::cout << "-1" << std::endl; } else { std::cout << a << " " << b << " " << c << std::endl; } }