divisors2 i n | i ^ 2 > n = [] | n `rem` i == 0 = [i, n `quot` i] : divisors2 (i + 1) n | otherwise = divisors2 (i + 1) n divisors3 i n | i ^ 3 > n = [] | n `rem` i == 0 = (map (i : ) (divisors2 i (n `quot` i))) ++ divisors3 (i + 1) n | otherwise = divisors3 (i + 1) n minElement xs = foldr min (head xs) xs evaluate pqr = (p - 1) + (q - 1) + (r - 1) where p = pqr !! 0 q = pqr !! 1 r = pqr !! 2 solveMin = minElement . map evaluate . divisors3 1 solveMax n = n - 1 main = do n <- readLn :: IO Integer putStrLn $ (show . solveMin) n ++ " " ++ (show . solveMax) n