import Control.Applicative import Control.Monad import Data.Array.IO import Data.List n = 10 ^ 6 main = do _ <- readLn :: IO Int a <- sort . map read . words <$> getLine :: IO [Int] dp <- newArray (0, n) (-1) :: IO (IOUArray Int Int) forM_ a $ \i -> do writeArray dp i 1 forM_ a $ \i -> do forM_ [i * 2, i * 3 .. n] $ \j -> do y <- readArray dp j when (y > 0) $ writeArray dp j =<< max <$> ((+ 1) <$> readArray dp i) <*> readArray dp j print =<< maximum <$> getElems dp