#include <bits/stdc++.h>
using namespace std;
const int maxN = 1000005;
int sp[maxN];
void seive() {
  for (int i = 2; i <= 1000000; ++i) {
    if (sp[i] != 0) continue;
    for (int j = i; j <= 1000000; j += i) {
      if (sp[j] == 0) sp[j] = i;
    }
  }
}
int nxtpow(int x) {
  int p = 1;
  while (p < x) p <<= 1;
  return p;
}
int main() {
  seive();
  int n;
  scanf("%d", &n);
  int pow = 0;
  int x = n;
  int val = 1;
  vector<int> pows;
  while (x > 1) {
    int p = sp[x];
    int cnt = 1;
    while (x > 1 && sp[x / p] == p) {
      x /= p;
      ++cnt;
    }
    x /= p;
    pow = max(pow, nxtpow(cnt));
    val *= p;
    pows.push_back(cnt);
  }
  int ans = 0;
  for (int x : pows) {
    if (x != pow) {
      ++ans;
      break;
    }
  }
  while (pow > 1) {
    pow >>= 1;
    ++ans;
  }
  printf("%d %d\n", val, ans);
  return 0;
}
