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 Go (1.14.1) (judge verdict: Time Limit Exceeded)

package main

import (
	"bufio"
	"fmt"
	"math"
	"os"
	"strconv"
)

func // Get all prime factors of a given number n
PrimeFactors(n int64) (pfs []int64) {
	for n%2 == 0 {
		pfs = append(pfs, 2)
		n = n / 2
	}
	sqrtN := int64(math.Sqrt(float64(n)))
	for i := int64(3); i*i <= sqrtN; i = i + 2 {
		for n%i == 0 {
			pfs = append(pfs, i)
			n = n / i
		}
	}
	if n > 2 {
		pfs = append(pfs, n)
	}
	return
}

func // UniqInt64 は、与えられた値から重複を取り除いて返します.
lib_UniqInt64(values []int64) (newValues []int64) {
	m := map[int64]bool{}
	for _, value := range values {
		m[value] = true
	}
	for key := range m {
		newValues = append(newValues, key)
	}
	return
}
func main() {
	scanner := bufio.NewScanner(os.Stdin)
	const initialBufSize = 4096
	const maxBufSize = 1000000
	scanner.Buffer(make([]byte, initialBufSize), maxBufSize)
	scanner.Split(bufio.ScanWords)
	var X int64
	scanner.Scan()
	X, _ = strconv.ParseInt(scanner.Text(), 10, 64)
	solve(X)
}
func pow5(v int) int64 {
	return int64(math.Pow(float64(v), 5))
}
func solve(X int64) {
	pfs := PrimeFactors(X)
	pfs = lib_UniqInt64(pfs)
	if X == 1 {
		pfs = []int64{1}
	}
	for A := 0; ; A++ {
		for _, pf := range pfs {
			B := A - int(pf)
			A5 := pow5(A)
			B5 := pow5(B)
			if A5-B5 == X {
				fmt.Println(A, B)
				return
			}
		}
	}
}