#include <bits/stdc++.h>
using namespace std;
int dy4[4] = {-1, 0, +1, 0};
int dx4[4] = {0, +1, 0, -1};
int dy8[8] = {-1, -1, 0, 1, 1, 1, 0, -1};
int dx8[8] = {0, 1, 1, 1, 0, -1, -1, -1};
const long long INF = 1LL << 60;
const long long MOD = 1e9 + 7;
bool greaterSecond(const pair<int, int>& f, const pair<int, int>& s) {
  return f.second > s.second;
}
long long gcd(long long a, long long b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
long long lcm(long long a, long long b) { return a / gcd(a, b) * b; }
long long nCr(long long n, long long r) {
  if (r == 0 || r == n) {
    return 1;
  } else if (r == 1) {
    return n;
  }
  return (nCr(n - 1, r) + nCr(n - 1, r - 1));
}
long long nPr(long long n, long long r) {
  r = n - r;
  long long ret = 1;
  for (long long i = n; i >= r + 1; i--) ret *= i;
  return ret;
}
vector<string> ans;
long long n;
void dfs(int d, string s) {
  if (d == n + 1) {
    ans.push_back(s);
    return;
  }
  for (char i = 'a'; i < 'a' + d; i++) {
    dfs(d + 1, s + i);
  }
}
int main(void) {
  cin >> n;
  string s = "";
  dfs(1, s);
  sort((ans).begin(), (ans).end());
  for (int i = 0; i < (int)(ans.size()); i++) {
    cout << ans[i] << endl;
  }
}
