import Data.List import Data.Ord nextCollatz n | even n = div n 2 | otherwise = n * 3 + 1 collatzChain lst@(x:xs) | x == 1 = lst | otherwise = collatzChain ((nextCollatz x):lst) collatz n = collatzChain [n] longest = maximumBy (comparing (length . collatz)) [1..1000000] main = putStrLn $ show longest