import           Control.Monad
import           Control.Monad.ST
import qualified Data.Array                    as A
import qualified Data.Array.Unboxed            as AU
import qualified Data.Array.ST                 as ST
import qualified Data.ByteString.Char8         as BS
import           Data.Char
import           Data.Foldable                  ( toList )
import           Data.Int
import qualified Data.IntMap                   as IM
import           Data.List
import qualified Data.Map                      as M
import           Data.Maybe
import           Data.Ord
import qualified Data.Set                      as S
import qualified Data.Sequence                 as SQ
import           Data.Time
import qualified Data.Vector                   as V
import qualified Data.Vector.Mutable           as VM
import qualified Data.Vector.Unboxed           as VU
import qualified Data.Vector.Unboxed.Mutable   as VUM

readInt = map (fst . fromJust . BS.readInt) . BS.words <$> BS.getLine
readInts n = replicateM n readInt
readString = map BS.unpack . BS.words <$> BS.getLine
readStrings n = replicateM n readString
toPair [x, y] = (x, y)

main = do
  [n] <- readInt
  mapM_ putStrLn $ solve n

solve n = nums
 where
  nums = concatMap
    (map (map (\x -> m x ['a', 'b' .. 'z'])))
    (zipWith (\a as -> take (length as `div` a) as) [1 ..] $ map (f n) [1 .. n])

f n m =
  filter (\nums -> length (group $ sort nums) == m) $ replicateM n [1 .. m]

m 1 (s : ss) = s
m n (s : ss) = m (n - 1) ss
