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 Rust (1.42.0) (judge verdict: Runtime Error)

use proconio::{fastout, input};

fn main() {
    input! {
        x: i128
    };

    for i in 0.. {
        let i = i as i128;
        let a = (i).pow(5) - (i - 1).pow(5);
        if a == x {
            println!("{} {}", i, i - 1);
            return;
        }

        if a > x && (i - 1) > 0 {
            break;
        }
    }

    for i in 0.. {
        let i = i as i128;
        let a = (-i).pow(5) - (-i - 1).pow(5);
        if a == x {
            println!("{} {}", -i, -i - 1);
            return;
        }

        if a > x {
            break;
        }
    }

    let mut s = vec![true; 40000];

    for i in 2.. {
        if i >= s.len() {
            break;
        }

        if s[i] {
            let i = i as i128;

            if x % i == 0 {
                for k in 0.. {
                    let k = k as i128;
                    let a = (k).pow(5) - (k - i).pow(5);
                    if a == x {
                        println!("{} {}", k, k - i);
                        return;
                    }

                    if a > x && (k - i) > 0 {
                        break;
                    }
                }

                for k in 0.. {
                    let k = k as i128;
                    let a = (-k).pow(5) - (-k - i).pow(5);
                    if a == x {
                        println!("{} {}", -k, -k - i);
                        return;
                    }

                    if a > x {
                        break;
                    }
                }
            }

            for j in 2.. {
                if j * i >= s.len() as i128 {
                    break;
                }

                s[(j * i) as usize] = false;
            }
        }
    }

    unreachable!();
}