#include #include #include #include #include #include #include #include #include #include #include static const int MOD = 1000000007; using ll = long long; using u32 = uint32_t; using namespace std; template constexpr T INF = ::numeric_limits::max()/32*15+208; template vector divisor(T n){ vector ret; for(T i = 1; i * i <= n; i++) { if(n % i == 0) { ret.push_back(i); if(i * i != n) ret.push_back(n / i); } } sort(begin(ret), end(ret)); return(ret); } template vector make_v(U size, const T& init){ return vector(static_cast(size), init); } template auto make_v(U size, Ts... rest) { return vector(static_cast(size), make_v(rest...)); } template void chmin(T &a, const T &b){ a = (a < b ? a : b); } template void chmax(T &a, const T &b){ a = (a > b ? a : b); } int main() { ll n; cin >> n; auto v = divisor(n); ll ans1 = n-1, ans2 = n-1; ll m = v.size(); auto dp = make_v(m, 4, INF); dp[0][0] = 0; for (int i = 1; i < m; ++i) { for (int j = 0; j < i; ++j) { if(v[i]%v[j] != 0) continue; for (int k = 1; k <= 3; ++k) { if(dp[j][k-1] == INF) continue; chmin(dp[i][k], dp[j][k-1]+v[i]/v[j]-1); } } } cout << *min_element(dp.back().begin(),dp.back().end()) << " " << ans2 << "\n"; return 0; }