import java.io.BufferedReader import java.io.InputStream import java.io.InputStreamReader import java.io.PrintWriter import java.lang.StringBuilder import java.util.* fun PrintWriter.solve(sc: FastScanner) { var n = sc.nextInt() val pf = mutableMapOf() var d = 2 while (d * d <= n) { var count = 0 while (n % d == 0) { count++ n /= d } if (count > 0) { pf[d] = count } d++ } if (n > 1) { pf[n] = 1 } var a = 1 var b = 1 for ((p, e) in pf) { for (i in 0 until e / 2) { a *= p } if (e % 2 == 1) { b *= p } } println("$a $b") } fun main(args: Array) { val writer = PrintWriter(System.out, false) writer.solve(FastScanner(System.`in`)) writer.flush() } class FastScanner(s: InputStream) { private var st = StringTokenizer("") private val br = BufferedReader(InputStreamReader(s)) fun next(): String { while (!st.hasMoreTokens()) st = StringTokenizer(br.readLine()) return st.nextToken() } fun nextInt() = next().toInt() fun nextLong() = next().toLong() fun nextLine() = br.readLine() fun nextDouble() = next().toDouble() fun ready() = br.ready() }