#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9 + 7;
const long long INFL = 9 * 1e18;
const int dx[4] = {1, 0, -1, 0};
const int dy[4] = {0, 1, 0, -1};
template <typename T>
void print(T&& x) {
  cout << x << endl;
}
long long inline digit(long long num) {
  int tmp = 0;
  while (num) {
    tmp++;
    num /= 10;
  }
  return tmp;
}
template <typename T>
inline T digitSum(T num) {
  T sum = 0;
  while (num) {
    sum += num % 10;
    num /= 10;
  }
  return sum;
}
template <typename T>
inline T gcd(T a, T b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
template <typename T>
inline T lcm(T a, T b) {
  T g = gcd(a, b);
  return a / g * b;
}
template <typename T>
inline T power(T a, T b) {
  T tmp = 1;
  for (int i = 0; i < ((int)(b)); ++i) {
    tmp *= a;
  }
  return tmp;
}
template <class T>
inline bool chmax(T& a, T b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T>
inline bool chmin(T& a, T b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
int ctoi(char c) { return c - '0'; }
void dfs(string s, int size) {
  if (s.size() == size - 1) {
    int last = 0;
    for (int i = 0; i < ((int)(size)); ++i) chmax(last, s[i] - 'a');
    for (int i = 0; i < ((int)(last + 2)); ++i) {
      print(s + (char)('a' + i));
    }
    return;
  }
  for (int i = 0; i < ((int)(size)); ++i) {
    s += (char)('a' + i);
    if (s.size() < size) dfs(s, size);
  }
}
int main() {
  int n;
  cin >> n;
  string s;
  dfs(s, n);
  return 0;
}
