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

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;
        }

        let i = i as i128;

        if x % i == 0 {
            for k in 0.. {
                let k = k as i128;
                let a = i
                    * (k.pow(4)
                        + k.pow(3) * (k - i)
                        + k.pow(2) * (k - i).pow(2)
                        + k * (k - i).pow(3)
                        + (k - i).pow(4));
                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 = i
                    * ((-k).pow(4)
                        + (-k).pow(3) * (-k - i)
                        + (-k).pow(2) * (-k - i).pow(2)
                        + -k * (-k - i).pow(3)
                        + (-k - i).pow(4));
                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!();
}