#include <bits/stdc++.h>
using namespace std;
static const int INTINF = (2147483647 >> 1);
static const long long LLINF = (9223372036854775807 >> 1);
static const int MAX = 1e5 + 1;
static const long long MOD = 1e9 + 7;
namespace Kunitaka {
template <typename TYPE, std::size_t SIZE>
std::size_t array_length(const TYPE (&array)[SIZE]) {
  return SIZE;
}
}  // namespace Kunitaka
using namespace Kunitaka;
namespace Printer {
void br() { cout << endl; }
void loop_cnt(int i) { cout << "i = " << i << endl; }
void loop_cnt(int i, int j) {
  cout << "i = " << i << ", "
       << "j = " << j << endl;
}
template <class T>
void print(T x) {
  cout << x << endl;
}
template <class T, class S>
void print(T x, S y) {
  cout << x << "," << y << endl;
}
template <class T, class S, class U>
void print(T x, S y, U z) {
  cout << x << "," << y << "," << z << endl;
}
template <class T, class S>
void print(pair<T, S> p) {
  cout << p.first << ", " << p.second << endl;
}
template <typename TYPE, std::size_t SIZE>
void print(const TYPE (&array)[SIZE]) {
  int lim = array_length(array);
  for (int i = 0; i < lim; i++) {
    if (i) cout << " ";
    cout << array[i];
  }
  cout << endl;
}
template <class S>
void print(vector<S> v) {
  for (int i = 0; i < v.size(); i++) {
    if (i) cout << " ";
    cout << v[i];
  }
  cout << endl;
}
template <class S>
void print(vector<vector<S> > vv) {
  for (int i = 0; i < vv.size(); i++) {
    for (int j = 0; j < vv[i].size(); j++) {
      if (j) cout << " ";
      cout << vv[i][j];
    }
    cout << endl;
  }
}
void yesno(bool x) {
  if (x)
    cout << "Yes" << endl;
  else
    cout << "No" << endl;
}
};  // namespace Printer
using namespace Printer;
int main(int argc, const char* argv[]) {
  cout << fixed << setprecision(10);
  string arr = "abcdefghij";
  vector<string> anss;
  int N;
  cin >> N;
  for (int t = N - 1; t >= 0; t--) {
    long long ans = 0;
    int arr2[10];
    fill(arr2, arr2 + 10, 0);
    fill(arr2, arr2 + t + 1, 1);
    arr2[t] = N - t;
    while (1) {
      string str = "";
      for (int j = 0; j < (N); ++j) {
        for (int k = 0; k < (arr2[j]); ++k) {
          str = str + arr[j];
        }
      }
      anss.push_back(str);
      bool flag = false;
      for (int j = N - 1; j >= 1; j--) {
        if (arr2[j] > 1 && j - 1 >= 0) {
          arr2[j]--;
          arr2[j - 1]++;
          flag = true;
          break;
        }
      }
      if (!flag) break;
    }
  }
  sort((anss).begin(), (anss).end());
  for (int i = 0; i < (anss.size()); ++i) {
    print(anss[i]);
  }
  return 0;
}
