#include <bits/stdc++.h>
using namespace std;
int POWINT(int x, int n) {
  int ret = 1;
  for (int i = (int)0; i < (int)n; i++) ret *= x;
  return ret;
};
long long POWLL(int x, int n) {
  long long ret = 1;
  for (int i = (int)0; i < (int)n; i++) ret *= x;
  return ret;
};
template <class T>
inline bool chmax(T &a, T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
};
template <class T>
inline bool chmin(T &a, T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
};
vector<string> dp[11];
vector<char> T = {'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'};
int main() {
  int N;
  cin >> N;
  dp[1].push_back("a");
  for (int i = (int)2; i < (int)11; i++) {
    for (auto s : dp[i - 1]) {
      char last = s[s.size() - 1];
      for (int j = (int)0; j < (int)(int)last - 'a' + 2; j++) {
        dp[i].push_back(s + T[j]);
      }
    }
  }
  for (int i = (int)0; i < (int)dp[N].size(); i++) {
    cout << dp[N][i] << endl;
  }
  return 0;
};
