#include <bits/stdc++.h>
using namespace std;
int prime[1000010];
int check(long long num) {
  long long x = (long long)(log2(num));
  return (1 << x) == (num);
}
void sieve() {
  prime[1] = 1;
  for (int i = 2; i * i <= 1000001; i++) {
    if (prime[i]) continue;
    for (int j = i; j <= 1000001; j += i) prime[j] = i;
  }
  for (int i = 0; i < 1000001; i++)
    if (prime[i] == 0) prime[i] = i;
}
int main(void) {
  sieve();
  int n, allHappy = 1, highestPow = 1, ans = 1, f = 1;
  scanf("%d", &n);
  while (n != 1) {
    int ct = 0, currFact = prime[n];
    ans *= prime[n];
    while (prime[n] == currFact) {
      n /= currFact;
      ct++;
    }
    if (check(ct) == 0) allHappy = 0;
    if (f) {
      highestPow = ct;
      f = 0;
      continue;
    }
    if (ct != highestPow) allHappy = 0;
    highestPow = max(highestPow, ct);
  }
  long long toAdd = 0;
  if (allHappy == 0) toAdd = 1;
  long long fS = (long long)(ceil(log2(highestPow))) + toAdd;
  printf("%d %lld\n", ans, fS);
  return 0;
}
