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 Kotlin (1.3.71) (judge verdict: Wrong Answer)

import kotlin.math.*

fun main(args: Array<String>) {
    d()
}

fun a() {
    when(readLine()) {
        "ABC" -> println("ARC")
        "ARC" -> println("ABC")
        else -> Unit
    }
}

fun b() {
    val (N, K) = readLine()!!.split(" ").map { it.toInt() }.let { it[0] to it[1] }
    val set = (1 .. N).toMutableSet()
    repeat(K) {
        val d = readLine()!!.toInt()
        val As = readLine()!!.split(" ").map { it.toInt() }
        set.removeAll(As)
    }
    println(set.count())
}

fun c() {
    val (N, M) = readLine()!!.split(" ").map { it.toInt() }.let { it[0] to it[1] }
    val H = readLine()!!.split(" ").map { it.toLong() }
    val set = (0 until N).toMutableSet()
    repeat(M) {
        val (A, B) = readLine()!!.split(" ").map { it.toInt() - 1 }.let { it[0] to it[1] }
        when {
            H[A] == H[B] -> {
                set.remove(A)
                set.remove(B)
            }
            H[A] > H[B] -> {
                set.remove(B)
            }
            H[A] < H[B] -> {
                set.remove(A)
            }
        }
    }
    println(set.count())
}

fun d() {
    val X = readLine()!!.toLong()
    val list = primeFactorization(X)
    list.forEach {
        val pow5 = it.toDouble().pow(5).toLong()
        when{
            pow5 == X -> { println("$it 0"); return }
            pow5 > X -> {
                var l = pow5
                var a = it
                var b = 0
                while (l > X) {
                    a--
                    b++
                    l = a*a*a*a*a - b*b*b*b*b
                    if (X == l) {
                        println("$a $b")
                        return
                    }
                }
            }
            pow5 < X -> {
                var l = pow5
                var a = it
                var b = 0
                while (l < X) {
                    a++
                    b--
                    l = a*a*a*a*a - b*b*b*b*b
                    if (X == l) {
                        println("$a $b")
                        return
                    }
                }
            }
        }
    }
}

fun primeFactorization(value : Long) : List<Long>{
    if (value == 1L) return listOf(1)
    val max = Math.sqrt(value.toDouble()).toLong()
    return prime(2, max).filter { value % it == 0L }
}

fun prime(from : Long, to : Long = from) : List<Long> {
    return (from..to).filter { i ->
        val max = Math.sqrt(i.toDouble()).toLong()
        (2..max).all { j ->  i % j != 0L }
    }
}