
import scala.annotation.tailrec
import scala.collection.mutable
import scala.collection.mutable.ArrayBuffer
object Main extends App {
  import scala.io.StdIn._


  val n = readLong
  val prime = primes(1000000)
  val primeFactor = calPrimeFactor(n)
  if (primeFactor.length == 1 && primeFactor.head == 1){
    println(s"1 1")
  }else {
    val divisor = divisors(primeFactor)
    println(s"${primeFactor.length} $divisor")
  }

  def divisors(primeFactor: List[Int]): Long = {
    var r = 1L
    for (e ← primeFactor){
      r *= (e + 1)
    }
    r - 1
  }
  def calPrimeFactor(number: Long): List[Int] = {
    @tailrec
    def sub(n: Long, i: Int, rest: List[Int] = Nil): List[Int] ={
      if (n == 1) rest
      else if (i == prime.length) 1::rest
      else if (n % prime(i) != 0) sub(n, i + 1, rest)
      else {
        var c = 0
        var nn = n
        while(nn % prime(i) == 0){
          c += 1
          nn /= prime(i)
        }
        sub(nn, i + 1, c::rest)
      }
    }
    sub(number, 0)
  }
  def primes(upper: Int): Array[Int] = {
    val memo = Array.tabulate(upper + 1){_ ⇒ true}
    for (i ← 2 to math.sqrt(upper).toInt if memo(i)){
      for (j ← i * 2 to upper by i){
        memo(j) = false
      }
    }
    (2 to upper).filter(memo).toArray
  }
  implicit class Scope[T](val value: T) extends AnyVal {
    @inline
    def let[A](func: T ⇒ A): A = func(value)
    @inline
    def also(func: T ⇒ Unit): T = {
      func(value)
      value
    }
  }
}
