#include <bits/stdc++.h>
using namespace std;
const int Max = 1e6 + 5;
int isnotprime[Max] = {1, 1, 0};
int prime[Max];
int num = 0;
int b[Max] = {0};
int ind = 0;
int ans = 1;
int m1 = Max;
int m2 = 0;
int pow2[63];
void play_prime() {
  for (int i = 2; i < Max; i++) {
    if (!isnotprime[i]) prime[num++] = i;
    for (int j = 0; j < num && prime[j] * i < Max; j++) {
      isnotprime[prime[j] * i] = 1;
      if (i % prime[j] == 0) break;
    }
  }
}
void solve(int n) {
  for (int ind = 0; ind < num; ind++) {
    if (n % prime[ind] == 0) {
      ans *= prime[ind];
      int t = 0;
      while (n % prime[ind] == 0) {
        n = n / prime[ind];
        t++;
      }
      if (t != 0) m1 = min(t, m1);
      m2 = max(t, m2);
    }
    if (n == 1) break;
  }
}
int main() {
  int n;
  cin >> n;
  play_prime();
  for (int i = 0; i < 63; i++) {
    pow2[i] = pow(2, i);
  }
  solve(n);
  int step = m2;
  int ans_step = 0;
  if (step == 1) {
    ans_step = 0;
  } else if (step > 1) {
    for (int i = 0; i < 63; i++) {
      if (pow2[i] >= step) {
        ans_step = i;
        if (m2 == m1 && step != pow2[i]) ans_step++;
        break;
      }
    }
    if (m1 != m2) ans_step++;
  }
  if (n == 1) ans_step = 0;
  cout << ans << " " << ans_step << endl;
}
