Problem:
Score : 400 points

Problem Statement

Give a pair of integers (A, B) such that A^5-B^5 = X.
It is guaranteed that there exists such a pair for the given integer X.

Constraints

1 \leq X \leq 10^9

X is an integer.

There exists a pair of integers (A, B) satisfying the condition in Problem Statement.

Input

Input is given from Standard Input in the following format:

X

Output

Print A and B, with space in between.
If there are multiple pairs of integers (A, B) satisfying the condition, you may print any of them.

A B

Sample Input 1

33

Sample Output 1

2 -1

For A=2 and B=-1, A^5-B^5 = 33.

Sample Input 2

1

Sample Output 2

0 -1

Solution in Java (OpenJDK 11.0.6) (judge verdict: Wrong Answer)

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Main main = new Main();
        main.solve();
    }

    public void solve() {
        Scanner scan = new Scanner(new BufferedReader(new InputStreamReader(System.in)));
        long X = scan.nextLong();
        List<Long> divisors = new ArrayList<>();
        for (long i = 1; i * i <= X; i++) {
            if (X % i == 0) {
                divisors.add(i);
                if (i * i != X) {
                    divisors.add(X / i);
                }
            }
        }
        for (long d1 : divisors) {
            long d2 = X / d1;
            if (d2 < d1) {
                continue;
            }
            // B == 0
            if (sub(X, d1, 0)) {
                System.out.printf("%d %d\n", d1, 0);
                return;
            }
            for (long B = 1; B <= X; B++) {
                long t = pow(B, 5);
                if (X*2 < t) {
                    break;
                }
                if (sub(X, d1 + B, B)) {
                    System.out.printf("%d %d\n", d1 + B, B);
                    return;
                }
                if (sub(X, d1 - B, -B)) {
                    System.out.printf("%d %d\n", d1 - B, -B);
                    return;
                }
            }
        }
    }
    private boolean sub(long X, long A, long B) {
        long d1 = A - B;
        long d2 = sub2(A, B);
        return d1 * d2 == X;
    }
    private long sub2(long A, long B) {
        long x = A * A * A * A;
        x += A * A * A * B;
        x += A * A * B * B;
        x += A * B * B * B;
        x += B * B * B * B;
        return x;
    }

    private long pow(long base, long c) {
        if (c == 0) {
            return 1;
        }
        if (c % 2 == 1) {
            return base * pow(base, c - 1);
        }
        long x = pow(base, c / 2);
        return x * x;
    }
}