#define _CRT_SECURE_NO_WARNINGS #include using namespace std; #define int long long int N; void GetDiv(vector &res, int n) { int i; for (i = 1; i*i < n; i++) { if (n % i == 0) res.push_back(i); } if (i*i == n) res.push_back(i); } int Solve2D(int n) { int s = sqrt(n) + 1e-1; while (n % s) s--; return s + n/s; } int GetMin(int n) { vector div; GetDiv(div, N); int l = 0, r = div.size() - 1; while (r - l > 10) { int mid1 = (l*2 + r)/3, mid2 = (l + r*2)/3; if (Solve2D(N/div[mid1]) + div[mid1] < Solve2D(N/div[mid2]) + div[mid2]) r = mid2; else l = mid1; } int res = LLONG_MAX; for (int i = l; i <= r; i++) { res = min(res, Solve2D(N/div[i]) + div[i]); } return res - 3; } signed main() { cin >> N; printf("%lld %lld\n", GetMin(N), N - 1); return 0; }