#include <bits/stdc++.h>
using namespace std;
using namespace std;
int operations = 0;
bool isPrime(long long n);
pair<long long, long long> calculate(long long n);
int main() {
  long long n = 1;
  scanf("%lld", &n);
  long long minimum = 0;
  int operations = 0;
  while (int(sqrt(n)) == sqrt(n) && n > 1) {
    n = sqrt(n);
    operations++;
  }
  pair<long long, long long> ans = calculate(n);
  cout << ans.first << " " << ans.second + operations << "\n";
  return 0;
}
bool isPrime(long long num) {
  if (num == 2) return true;
  if (num % 2 == 0) return false;
  for (int i = 3; i <= sqrt(num); i += 2) {
    if (num % i == 0) return false;
  }
  return true;
}
pair<long long, long long> calculate(long long val) {
  long long target = val;
  int maxPower = 0;
  vector<int> primes;
  vector<int> powers;
  for (long long j = 2; j <= val / 2; j++) {
    long long mul = j * j;
    while (target > 0 && target % mul == 0) {
      target = target / j;
    }
    if (!isPrime(j) || val % j) {
      continue;
    }
    int power = 0;
    int num = val;
    while (num > 1) {
      if (num % j) break;
      power++;
      num /= j;
    }
    primes.push_back(j);
    powers.push_back(power);
    maxPower = max(power, maxPower);
  }
  double logSum = log(val);
  long long nextPower = (int)pow(2, ceil(log(maxPower) / log(2)));
  for (int i = 0; i < primes.size(); i++) {
    int diff = nextPower - powers[i];
    if (diff) {
      logSum += diff * log(primes[i]);
    }
  }
  double rhs = logSum / log(target);
  int res = 0;
  if (logSum != 0) res = log2(rhs + 10e-9);
  if (res > 0) res++;
  return {target, res};
}
