#include #include #include #include #include template std::vector factorize(T n) { std::vector fs; for (auto i = 2; i * i < n; i++) { while (n % i == 0) { fs.push_back(i); n /= i; } } if (n > 1) { fs.push_back(n); } return fs; } template T compute_max(T n) { return n - 1; } template T compute_min(T n) { auto fs = factorize(n); if (fs.size() == 1) { return fs[0] - 1; } else if (fs.size() == 2) { return fs[0] + fs[1] - 2; } else if (fs.size() == 3) { return fs[0] + fs[1] + fs[2] - 3; } else { T lim = std::ceil(3.0 * std::cbrt((double)n)); for (auto s = lim; s < n - 1; s++) { for (auto x = 1; x < s; x++) { for (auto y = x; y < s - x; y++) { auto z = s - x - y; if (x * y * z == n) { return s - 3; } } } } } } int main() { long long n; std::cin >> n; auto tmin = compute_min(n); auto tmax = compute_max(n); std::cout << tmin << " " << tmax << std::endl; return EXIT_SUCCESS; }