output_description: Assume that there are K strings of length N that are in normal form: w_1,
  \ldots, w_K in lexicographical order. Output should be in the following
  format:
  
      
      
      w_1
      :
      w_K
      
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      N
attempt: import glob
  
  
  # 問題ごとのディレクトリのトップからの相対パス
  REL_PATH = "ABC\\159\\D"
  
  # テスト用ファイル置き場のトップ
  TOP_PATH = "C:\\AtCoder"
  
  
  class Common:
  
      problem = []
      index = 0
  
      def __init__(self, rel_path):
          self.rel_path = rel_path
  
      def initialize(self, path):
          file = open(path)
          self.problem = file.readlines()
          self.index = 0
          return
  
      def input_data(self):
          try:
              IS_TEST
              self.index += 1
              return self.problem[self.index - 1]
  
          except NameError:
              return input()
  
      def resolve(self):
          pass
  
      def exec_resolve(self):
          try:
              IS_TEST
              for path in glob.glob(TOP_PATH + "\\" + self.rel_path + "/*.txt"):
                  print("Test: " + path)
                  self.initialize(path)
                  self.resolve()
                  print("\n\n")
          except NameError:
              self.resolve()
  
  
  class Solver(Common):
  
      alph = []
  
      def rec(self, result, now, N):
  
          if now == N:
              res = ""
              for i in result:
                  res += self.alph[i]
              print(res)
              return
  
          if now == 0:
              result[0] = 0
              self.rec(result, now + 1, N)
              return
  
          if result[now - 1] == 25:
              result[now] = 25
              self.rec(result, now + 1, N)
              return
  
          for i in range(result[now - 1], result[now - 1] + 2):
              result[now] = i
              self.rec(result, now + 1, N)
  
      def resolve(self):
  
          N = int(self.input_data())
  
          self.alph = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z".split(",")
          self.result = [0 for i in range(N)]
          self.rec(self.result, 0, N)
  
  
  solver = Solver(REL_PATH)
  solver.exec_resolve()
  
problem_description: Statement
  
  In this problem, we only consider strings consisting of lowercase English
  letters.
  
  Strings s and t are said to be **isomorphic** when the following conditions
  are satisfied:
  
    * |s| = |t| holds.
    * For every pair i, j, one of the following holds:
      * s_i = s_j and t_i = t_j.
      * s_i \neq s_j and t_i \neq t_j.
  
  For example, `abcac` and `zyxzx` are isomorphic, while `abcac` and `ppppp` are
  not.
  
  A string s is said to be in **normal form** when the following condition is
  satisfied:
  
    * For every string t that is isomorphic to s, s \leq t holds. Here \leq denotes lexicographic comparison.
  
  For example, `abcac` is in normal form, but `zyxzx` is not since it is
  isomorphic to `abcac`, which is lexicographically smaller than `zyxzx`.
  
  You are given an integer N. Print all strings of length N that are in normal
  form, in lexicographically ascending order.
samples: [{"input": "1", "output": "a\n    \n\n* * *"}, {"input": "2", "output": "aa\n    ab"}]