import java.util.Scanner

object Main {
  def main(args: Array[String]): Unit = {
    //nextLineとnextを同時に使ったら死ぬ
    val sc = new Scanner(System.in)

    val x = sc.nextLong()

    var count = 1L

    var nums = Vector(0L)
    var map = Map[Long, Long]()
    map = map + (0L -> 0L)

    while (math.pow(count, 5) <= x * x) {
      val n = math.pow(count, 5).toLong
      nums = nums :+ n
      nums = nums :+ (-n)
      map = map + (n -> count) + (-n -> -count)
//      debug(count, n)
      count += 1
    }

    val index = (count - 1) * 2 + 1
    debug(nums.length, index)

    for {
      i <- 0 until index.toInt
      j <- 0 until index.toInt
    } {
      if (nums(i) - nums(j) == x) {
        println(s"${map(nums(i))} ${map(nums(j))}")
        sys.exit(0)
      }
    }
  }

  def debug(args: Any*): Unit = {
    Console.err.println(args.mkString(" "))
  }

  def printExecTime(process: => Unit): Unit = {
    val start = System.currentTimeMillis
    process
    debug("処理時間： " + (System.currentTimeMillis - start) + " ミリ秒")
  }

}
