import Data.Array

main = do
  li <- getLine
  let n = read li
  let ans = compute n
  putStrLn $ unlines ans

compute :: Int -> [String]
compute n = pla ! (n,'a')
  where
    xs = take n ['a'..]
    xx = last xs
-- 長さnで、xsの辞書順リスト。ただし新たな要素を使うなら必ずk
-- kを使った場合、それ以降はk+1まで使ってよい。
-- DPしなくても余裕だったがやってみる。
    pla = array ((0,'a'),(n,xx)) [ ((n,k),permlim n k) | n <- [0..n], k <- xs ]
    permlim 0 _ = [ [] ]
    permlim n k =
      [ x:ys
      | x <- takeWhile (k >=) xs
      , ys <- pla ! (pred n,if x == k then min xx $ succ k else k) ]
