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: Accepted)

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.StringJoiner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        long x = sc.nextLong();
        Map<Long, Long> valToKey = new HashMap<>();
        Map<Long, Long> keyToVal = new HashMap<>();
        for (long i = 0; i <= 6_000; i++) {
            keyToVal.put(i, i * i * i * i * i);
            valToKey.put(i * i * i * i * i, i);
        }
        StringJoiner sj = new StringJoiner(" ");
        for (long i = 0; i <= 6_000; i++) {
            // A +, B +
            if (valToKey.containsKey(keyToVal.get(i) - x)) {
                sj.add(String.valueOf(i));
                sj.add(String.valueOf(valToKey.get(keyToVal.get(i) - x)));
                System.out.println(sj);
                return;
            }
            // A +, B -
            if (valToKey.containsKey(x - keyToVal.get(i))) {
                sj.add(String.valueOf(i));
                sj.add(String.valueOf(valToKey.get(x - keyToVal.get(i)) * -1));
                System.out.println(sj);
                return;
            }
            // A -, B -
            if (valToKey.containsKey(x + keyToVal.get(i))) {
                sj.add(String.valueOf(i * -1));
                sj.add(String.valueOf(valToKey.get(x + keyToVal.get(i)) * -1));
                System.out.println(sj);
                return;
            }
        }
    }

}