import Control.Monad.Identity import Control.Monad.State import System.Environment type M = StateT Char Identity main = do [x] <- getArgs print $ head $ runIdentity $ evalStateT (f $ read x) 'a' f :: Int -> M [Char] f 0 = return [] f (n+1) = do st <- get rest <- f n return (st:rest)