#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,fma")
#pragma GCC optimize("unroll-loops")
using namespace std;
const double eps = 1e-12;
const double PI = acos(-1.0);
const long long INF = 1e18;
const long long MOD = 1e9 + 7;
long long int gcd(long long int a, long long int b) {
  if (a == 0) return b;
  return gcd(b % a, a);
}
bool isPowerOfTwo(long long int x) { return x && (!(x & (x - 1))); }
bool isPerfectSquare(long long int n) {
  double p1;
  long long int p2;
  p2 = sqrt(n);
  p1 = sqrt(n);
  if (p1 == p2) return true;
  return false;
}
long long ceil(long long x, long long y) { return (x + y - 1) / y; }
long long fast_pow(long long a, long long p) {
  if (p == 0) return 1;
  long long z = fast_pow(a, p / 2);
  z = (z * z) % MOD;
  if (p % 2) z = (z * a) % MOD;
  return z;
}
long long mod_divide(long long a, long long b) {
  return ((a % MOD) * (fast_pow(b, MOD - 2) % MOD)) % MOD;
}
vector<long long> primes;
long long nax = 2e5 + 5;
vector<bool> is_prime(nax + 1, true);
void sieve() {
  is_prime[0] = is_prime[1] = false;
  for (long long i = 2; i <= nax; i++) {
    if (is_prime[i] && i * i <= nax) {
      for (long long j = i * i; j <= nax; j += i) is_prime[j] = false;
    }
  }
  for (long long i = 2; i <= nax; i++) {
    if (is_prime[i]) {
      primes.push_back(i);
    }
  }
}
map<long long, long long> factorization(long long n) {
  map<long long, long long> factors;
  for (long long d : primes) {
    if (d * d > n) break;
    while (n % d == 0) {
      factors[d]++;
      n /= d;
    }
  }
  if (n > 1) factors[n]++;
  return factors;
}
void solve() {
  long long int i, n, ans, k, m, j;
  cin >> n;
  if (n == 1) {
    cout << 1 << " " << 0 << "\n";
    return;
  }
  vector<long long> squares;
  sieve();
  map<long long, long long> factors = factorization(n);
  m = 1;
  for (i = 1; i <= 25; i++) {
    squares.push_back(m);
    m *= 2;
  }
  ans = 0;
  vector<long long> A;
  long long int uff = 1;
  for (auto x : factors) {
    ans = max(ans, x.second);
    uff *= x.first;
    A.push_back(x.second);
  }
  sort((A).begin(), (A).end());
  if (A[0] == A[A.size() - 1]) {
    for (i = 0; i < 25; i++) {
      if (squares[i] >= A[0]) break;
    }
    if (squares[i] > A[0]) i += 1;
    cout << uff << " ";
    cout << i << "\n";
    return;
  }
  long long int print = 1;
  for (i = 0; i < 25; i++) {
    if (squares[i] >= ans) break;
  }
  print += i;
  cout << uff << " " << print << "\n";
  return;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  ;
  long long int t = 1, i;
  while (t--) solve();
  return 0;
}
