#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
const int maxn = 1e6;
int p, k;
vector<unsigned long long> prim;
bool vis[maxn + 5];
void init() {
  memset(vis, 1, sizeof vis);
  vis[1] = false;
  for (int i = 2; i <= maxn; i++) {
    if (vis[i]) prim.push_back(i);
    for (int j = 0; j < prim.size() && 1LL * i * prim[j] <= maxn; j++) {
      vis[i * prim[j]] = false;
      if (i % prim[j] == 0) break;
    }
  }
}
int sum, num;
int qpow[20];
vector<int> ppp;
int main() {
  int t;
  unsigned long long n, m;
  init();
  scanf("%I64d", &n);
  m = n;
  vector<unsigned long long> zhi;
  int cnt = 0;
  sum = 0;
  qpow[1] = 2;
  for (int i = 2; i < 20; i++) qpow[i] = qpow[i - 1] * 2;
  for (int i = 0; i < prim.size() && prim[i] * prim[i] <= n; i++) {
    unsigned long long p = prim[i];
    if (m % p) continue;
    zhi.push_back(p);
    cnt = 0;
    while (m % p == 0) {
      cnt++;
      m /= p;
    }
    ppp.push_back(cnt);
    sum = max(sum, cnt);
    if (m == 1) break;
  }
  if (m == n)
    printf("%I64d 0\n", n);
  else {
    if (m != 1) {
      zhi.push_back(m);
      sum = max(1, sum);
      ppp.push_back(1);
    }
    unsigned long long ans = 1LL;
    bool jud = true;
    for (int j = 0; j < zhi.size(); j++) {
      ans = ans * zhi[j];
      if (jud && ppp[j] < sum) jud = false;
    }
    int y = 0;
    int u = 0;
    for (int i = 21; i >= 1; i--) {
      if (sum > qpow[i] && sum < qpow[i + 1]) u++;
    }
    if (!jud && u == 0)
      y++;
    else if (u > 0)
      y++;
    sum--;
    while (sum > 0) {
      sum >>= 1;
      y++;
    }
    printf("%I64d %d\n", ans, y);
  }
  return 0;
}
