#include <bits/stdc++.h>
using namespace std;
long long int a[200001], b[200001];
long long int smallest_prime[2000001];
void seive() {
  long long int i, j, k, l, m, n, o, p;
  for (i = 1; i <= 2000000; i++) {
    smallest_prime[i] = 1;
  }
  smallest_prime[0] = smallest_prime[1] = 1;
  for (i = 2; i <= 2000000; i++) {
    if (smallest_prime[i] == 1) {
      for (j = 2 * i; j <= 2000000; j += i) {
        if (smallest_prime[j] == 1) smallest_prime[j] = i;
      }
      smallest_prime[i] = i;
    }
  }
}
vector<pair<long long int, long long int>> prime_divisors(long long int n) {
  long long int i, j, k, l, m, o, p, q, r, s, t;
  vector<pair<long long int, long long int>> vp;
  if (n <= 1) return vp;
  while (n != 1) {
    p = 0;
    k = smallest_prime[n];
    while (n % k == 0) {
      n /= k;
      p++;
    }
    if (p > 0) vp.push_back(make_pair(k, p));
  }
  if (n > 1) {
    vp.push_back({n, 1});
  }
  return vp;
}
void solve() {
  long long int n, i, j, k, l, m, o, p, q, r, s, t;
  cin >> n;
  if (n == 1) {
    cout << 1 << " " << 0 << endl;
    return;
  } else if (smallest_prime[n] == n) {
    cout << n << " " << 0 << endl;
    return;
  }
  long long int ans = 0;
  long long int flag1 = 0;
  while (1) {
    vector<pair<long long int, long long int>> vp = prime_divisors(n);
    long long int flag = 0;
    for (i = 0; i < vp.size(); i++) {
      if (vp[i].second != 1) {
        flag = 1;
      }
    }
    if (flag == 0) break;
    for (i = 0; i < vp.size(); i++) {
      if ((vp[i].second) % 2 == 1 && flag) {
        n *= vp[i].first;
        flag1 = 1;
      }
    }
    n = sqrt(n);
    ans++;
  }
  if (flag1) ans++;
  cout << n << " " << ans << endl;
}
int main() {
  seive();
  long long int t, n, m, k;
  t = 1;
  while (t--) {
    solve();
  }
  return 0;
}
