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: Wrong Answer)

	import java.io.ByteArrayInputStream;
	import java.io.IOException;
	import java.io.InputStream;
	import java.io.PrintWriter;
	import java.util.*;
	import java.io.*;
	public class Main {
	InputStream is;
		PrintWriter out;
		String INPUT = ""; 
	//class  Declaration

	static class pair implements Comparable<pair>{
		int x;
		int y;
		
		
		pair (int i,int j)
		{ x=i; y=j;
			
		}
		public int compareTo(pair p){
			if(this.x!=p.x) { return this.x-p.x;}
			else { return this.y-p.y;}
		}
		public int hashCode() { return (x+" "+y).hashCode();}
		public String toString(){ return x+" "+y;} 
		public boolean equals(Object o){ 
			pair x = (pair) o ;
			return (x.x==this.x&&x.y==this.y);}
	}

	long mod  = (long)1e9 + 7 ;

	void solve() throws Exception{

		long x=nl();
		outer : for(long i=0L;i<=100;++i){
			for(long j=i;j<=100;++j){

				long f = (long)Math.pow(i,5 ) - (long) Math.pow(j,5) ;
				long s = (long)Math.pow(i,5 ) - (long) Math.pow(-j,5) ;
				if(x==f){
					pn(i+" "+j);
					break outer ;
				}
				if(x==s){
					pn(i+" "+(-j));
					break outer ;
				}
			}
		}


	}

	long pow(long a,long b){
		long result = 1;
		while(b>0){
		if(b%2==1) result = (result * a) % mod;
			b/=2;
			a=(a*a)%mod;
		}
		return result;
	}

	void print(Object o){
	System.out.println(o);
	System.out.flush();
	}

	int gcd(int a, int b) 
	{ 
	if (b == 0) 
	return a; 
	return gcd(b, a % b);  
	}
	void run() throws Exception{
			is = INPUT.isEmpty() ? System.in : new ByteArrayInputStream(INPUT.getBytes());
	out = new PrintWriter(System.out);
			
			long s = System.currentTimeMillis();
			solve();
			out.flush();
			if(!INPUT.isEmpty())tr(System.currentTimeMillis()-s+"ms");
	}
		
		
	public static void main(String[] args) throws Exception { new Main().run(); }
		
	//output methods
	private void pn(Object o)
	{
		out.println(o);
	}
	private void p(Object o)
	{
		out.print(o);
	}



	//input methods
			private byte[] inbuf = new byte[1024];
		public int lenbuf = 0, ptrbuf = 0;
		

		private int readByte()
		{
			if(lenbuf == -1)throw new InputMismatchException();
			if(ptrbuf >= lenbuf){
				ptrbuf = 0;
				try { lenbuf = is.read(inbuf); } catch (IOException e) { throw new InputMismatchException(); }
				if(lenbuf <= 0)return -1;
			}
			return inbuf[ptrbuf++];
		}
		
		
		
		
		private boolean isSpaceChar(int c) { return !(c >= 33 && c <= 126); }
		private int skip() { int b; while((b = readByte()) != -1 && isSpaceChar(b)); return b; }
		
		private double nd() { return Double.parseDouble(ns()); }
		private char nc() { return (char)skip(); }
		
		private String ns()
		{
			int b = skip();
			StringBuilder sb = new StringBuilder();
			while(!(isSpaceChar(b))){ // when nextLine, (isSpaceChar(b) && b != ' ')
				sb.appendCodePoint(b);
				b = readByte();
			}
			return sb.toString();
		}
		
		private char[] ns(int n)
		{
			char[] buf = new char[n];
			int b = skip(), p = 0;
			while(p < n && !(isSpaceChar(b))){
				buf[p++] = (char)b;
				b = readByte();
			}
			return n == p ? buf : Arrays.copyOf(buf, p);
		}
			
		private char[][] nm(int n, int m)
		{
			char[][] map = new char[n][];
			for(int i = 0;i < n;i++)map[i] = ns(m);
			return map;
		}
		
		private int[] na(int n)
		{
			int[] a = new int[n];
			for(int i = 0;i < n;i++)a[i] = ni();
			return a;
		}
		
		private int ni()
		{
			int num = 0, b;
			boolean minus = false;
			while((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-'));
			if(b == '-'){
				minus = true;
				b = readByte();
			}
			
			while(true){
				if(b >= '0' && b <= '9'){
					num = num * 10 + (b - '0');
				}else{
					return minus ? -num : num;
				}
				b = readByte();
			}
		}
		
		private long nl()
		{
			long num = 0;
			int b;
			boolean minus = false;
			while((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-'));
			if(b == '-'){
				minus = true;
				b = readByte();
			}
			
			while(true){
				if(b >= '0' && b <= '9'){
					num = num * 10 + (b - '0');
				}else{
					return minus ? -num : num;
				}
				b = readByte();
			}
		}
		
		private void tr(Object... o) { if(INPUT.length() > 0)System.out.println(Arrays.deepToString(o)); }
		void watch(Object ... a) throws Exception{
			int i=1;
			pn("watch starts :");
			for(Object o : a ) {
				//print(o);
				boolean notfound = true;
				if(o.getClass().isArray()){
					
					String type = o.getClass().getName().toString();
					//print("type is "+type);
					switch (type) {
						case "[I":{
							int[] test = (int[])o ;
							pn(i+" "+Arrays.toString(test));
							break;
						}
						case "[[I":{
							int[][] obj = (int[][])o;
							
							pn(i+" "+Arrays.deepToString(obj));
							break;
						}
						case "[J" : {
							
							long[] obj  = (long[])o ;
							pn(i+" "+Arrays.toString(obj));
							break;
						}
						case "[[J": {
							
							long[][] obj = (long[][])o;
							pn(i+" "+Arrays.deepToString(obj));
							break;
						}
						case "[D" :{
							
							double[] obj= (double[])o;
							pn(i+" "+Arrays.toString(obj));
							break;
						}
						case "[[D" :{
							
							double[][] obj = (double[][])o;
							pn(i+" "+Arrays.deepToString(obj));
							break;
						}
						case "[Ljava.lang.String": {
							
							String[] obj = (String[])o ;
							pn(i+" "+Arrays.toString(obj));
							break;
						}
						case "[[Ljava.lang.String": {
							
							String[][] obj = (String[][])o ;
							pn(i+" "+Arrays.deepToString(obj));
							break ; 
						}
						case "[C" :{
							char[] obj = (char[])o ;
							pn(i+" "+Arrays.toString(obj));
							break;
						}
						case "[[C" :{
							
							char[][] obj = (char[][])o;
							pn(i+" "+Arrays.deepToString(obj));
							break;
						}

							
					
						default:{
							pn(i+" type not identified");
							break;
						}
					}
					notfound = false;
					
				}
				if(o.getClass() == ArrayList.class){
					pn(i+" al: "+o);
					notfound = false;
				}
				if(o.getClass() == HashSet.class){
					pn(i+" hs: "+o);
					notfound = false;
				}
				if(o.getClass() == TreeSet.class){
					pn(i+" ts: "+o);
					notfound = false;
				}
				if(o.getClass() == TreeMap.class){
					pn(i+" tm: "+o);
					notfound = false;
				}
				if(o.getClass() == HashMap.class){
					pn(i+" hm: "+o);
					notfound = false;
				}
				if(o.getClass() == LinkedList.class){
					pn(i+" ll: "+o);
					notfound = false;
				}
				if(o.getClass() == PriorityQueue.class){
					pn(i+" pq : "+o);
					notfound = false;
				}
				if(o.getClass() == pair.class){
					pn(i+" pq : "+o);
					notfound = false;
				}
				
				if(notfound){
					pn(i+" unknown: "+o);
				}
				i++;
			}
			pn("watch ends ");
		}

	}