#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
const int maxn = 5e4 + 10;
long long gcd(long long a, long long b) { return (b == 0) ? a : gcd(b, a % b); }
bool isPrime(int n) {
  if (n <= 3) {
    return n > 1;
  }
  if (n % 6 != 1 && n % 6 != 5) {
    return false;
  }
  int sqr = sqrt(n);
  for (int i = 5; i <= sqr; i += 6) {
    if (n % i == 0 || n % (i + 2) == 0) {
      return false;
    }
  }
  return true;
}
int dis[4][2] = {0, 1, 0, -1, 1, 0, -1, 0};
char s[20];
int n;
void fun(int num, int sum) {
  if (sum == n) {
    for (int i = 0; i < n; i++) cout << s[i];
    cout << endl;
    return;
  }
  if (num == 1) {
    s[sum] = 'a';
    fun(1, sum + 1);
    s[sum] = 'b';
    fun(2, sum + 1);
  } else {
    int vis[26];
    memset(vis, 0, sizeof(vis));
    for (int i = 0; i < sum; i++) vis[s[i] - 'a']++;
    int ans = 0;
    for (int i = 0; i < 26; i++)
      if (vis[i]) ans++;
    for (int i = 0; i < ans; i++) {
      s[sum] = 'a' + i;
      fun(2, sum + 1);
    }
    int flag = 1;
    for (int i = 0; i < sum; i++) {
      if (s[i] != 'a' + i) flag = 0;
    }
    if (flag) {
      s[sum] = 'a' + sum;
      fun(2, sum + 1);
    }
  }
}
int main() {
  cin >> n;
  memset(s, 0, sizeof(s));
  s[0] = 'a';
  fun(1, 1);
}
