divisors k = filter (\ x -> k `rem` x == 0) divisors2 i n = map (\ x -> [x, n `quot` x]) . divisors n . takeWhile (\ x -> x ^ 2 <= n) $ [i .. ] divisors3 n = concat . map (\ x -> map (x : ) $ divisors2 x (n `quot` x)) . divisors n . takeWhile (\ x -> x ^ 3 <= n) $ [1 .. ] evaluate (p : q : r : []) = (p - 1) + (q - 1) + (r - 1) solveMin = minimum . map evaluate . divisors3 solveMax = (+ (-1)) main = do n <- readLn :: IO Integer putStrLn $ (show . solveMin) n ++ " " ++ (show . solveMax) n