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 C (GCC 9.2.1) (judge verdict: Runtime Error)

#include <stdio.h>

int factorize(long long n, int p[], int m[])
{
	int i, k;
	for (i = 2, k = 0; i * i <= n; i++) {
		if (n % i != 0) continue;
		p[k] = i;
		for (m[k] = 0; n % p[k] == 0; m[k]++, n /= p[k]);
		k++;
	}
	if (n > 1) {
		p[k] = n;
		m[k++] = 1;
	}
	return k;
}

int main()
{
	long long X;
	scanf("%lld", &X);
	
	int i, j, k, p[101], m[101], l[101] = {};
	long long A, B, C, Y = 1, Z = X;
	k = factorize(X, p, m);
	while (l[k] == 0) {
		for (B = 0; B > -Y; B--) {
			A = B + Y;
			C = A * A * (A * A + A * B + B * B) + B * B * B * (A + B);
			if (C == Z) {
				printf("%lld %lld\n", A, B);
				fflush(stdout);
				return 0;
			}
		}
		for (B = 1; 1; B++) {
			A = B + Y;
			C = A * A * (A * A + A * B + B * B) + B * B * B * (A + B);
			if (C == Z) {
				printf("%lld %lld\n", A, B);
				fflush(stdout);
				return 0;
			} else if (C > Z) break;
		}
		for (B = -Y; 1; B--) {
			A = B + Y;
			C = A * A * (A * A + A * B + B * B) + B * B * B * (A + B);
			if (C == Z) {
				printf("%lld %lld\n", A, B);
				fflush(stdout);
				return 0;
			} else if (C > Z) break;
		}
		
		for (i = 0; i < k && l[i] == m[i]; i++);
		for (l[i]++, Y *= p[i--]; i >= 0; i--) {
			for (j = 0; j < m[i]; j++) Y /= p[i];
		}
		Z = X / Y;
	}
}