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) 0 :: IO (IOUArray Int Int) forM_ a $ \i -> do x <- readArray dp i forM_ (takeWhile (\x -> x * x <= n) [i, i * 2 .. ]) $ \j -> do y <- readArray dp j writeArray dp j $ max (x + 1) y dp' <- getElems dp print $ maximum dp'