#include <bits/stdc++.h>
using namespace std;
template <typename T, typename D>
std::ostream& operator<<(std::ostream& os, const std::pair<T, D>& p) {
  return os << "(" << p.first << ", " << p.second << ")";
}
map<long long, long long> decompose(long long a) {
  map<long long, long long> res;
  long long left = a;
  for (int i = (2); i < (a); i++) {
    while (left % i == 0) {
      left /= i;
      res[i]++;
    }
  }
  return res;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  long long n;
  cin >> n;
  if (n == 1) {
    cout << "1 0"
         << "\n";
    return 0;
  }
  map<long long, long long> m = decompose(n);
  long long min_res = 1;
  long long min_exp = 900000;
  long long max_exp = 1;
  for (auto p : m) {
    min_res *= p.first;
    max_exp = max(max_exp, p.second);
    min_exp = min(min_exp, p.second);
  }
  if (max_exp == 1) {
    cout << n << " " << 0 << "\n";
  } else {
    long long min_steps = 0;
    if (max_exp == min_exp && __builtin_popcountll(max_exp) == 1) {
    } else {
      min_steps++;
    }
    min_steps += (63 - __builtin_clzll(max_exp));
    if (__builtin_popcountll(max_exp) != 1) min_steps++;
    cout << min_res << " " << min_steps << "\n";
  }
}
