#include <bits/stdc++.h>
const int maxn = 1e6 + 100;
using namespace std;
int prime[maxn];
int index_max = 0;
int index_min = INT_MAX;
int p[maxn];
int flag[maxn];
void get_prime() {
  int cnt = 0;
  for (int i = 2; i <= maxn - 10; i++) {
    if (flag[i] == 0) prime[++cnt] = i;
    for (int j = 1; j <= cnt && prime[j] * i < maxn; j++) {
      flag[prime[j] * i] = 1;
      if (i % prime[j] == 0) break;
    }
  }
}
int main() {
  get_prime();
  int n;
  cin >> n;
  int cnt = 0;
  long long ans = 1;
  for (int i = 1; i <= maxn; i++) {
    int tmp_index = 0;
    int flag = 0;
    while (n % prime[i] == 0) {
      if (flag == 0) {
        p[++cnt] = prime[i];
        flag = 1;
        ans = ans * prime[i];
      }
      tmp_index++;
      n = n / prime[i];
    }
    index_max = max(index_max, tmp_index);
    index_min = min(index_min, tmp_index);
    if (n == 1) break;
  }
  if (index_min == 0) index_min = 1;
  if (cnt == 1) index_min = index_max;
  long long ans2;
  for (int i = 0; i <= maxn; i++)
    if (pow(2, i) >= index_max) {
      ans2 = i;
      break;
    }
  if (pow(2, ans2) > index_min) ans2 = ans2 + 1;
  cout << ans << " ";
  cout << ans2 << endl;
  return 0;
}
