#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
inline long long add(long long x, long long y) {
  x += y;
  if (x >= 1000000007) x -= 1000000007;
  return x;
}
inline long long sub(long long a, long long b) {
  if (a < b) swap(a, b);
  return (((a % 1000000007) - (b % 1000000007) + 1000000007) % 1000000007);
}
inline long long mul(long long x, long long y) {
  return (x % 1000000007 * 1ll * y % 1000000007) % 1000000007;
}
inline long long pwr(long long a, long long b) {
  long long x = 1 % 1000000007;
  while (b) {
    if (b & 1) x = mul(x, a);
    a = mul(a, a);
    b >>= 1;
  }
  return x % 1000000007;
}
inline long long inv(long long a) {
  return pwr(a, 1000000007 - 2) % 1000000007;
}
long long gcd(long long a, long long b) {
  if (!a) return b % 1000000007;
  return gcd(b % a, a) % 1000000007;
}
template <typename Arg1>
void __f(const char* name, Arg1&& arg1) {
  cout << name << " : " << arg1 << "\n";
}
template <typename Arg1, typename... Args>
void __f(const char* names, Arg1&& arg1, Args&&... args) {
  const char* comma = strchr(names + 1, ',');
  cout.write(names, comma - names) << " : " << arg1 << " | ";
  __f(comma + 1, args...);
}
vector<string> ans;
void recur(long long curr, long long n, string s) {
  if (curr == n) {
    ans.push_back(s);
    return;
  }
  if ((long long)(s).size() == 0) {
    recur(curr + 1, n, "a");
  } else
    for (long long i = 0;
         i <= (long long)(s[(long long)(s).size() - 1] + 1 - 'a'); i++) {
      string s1;
      s1 = s + (char)(i + 'a');
      recur(curr + 1, n, s1);
    }
}
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long n;
  cin >> n;
  string emp = "";
  recur(0, n, emp);
  for (auto it : ans) {
    cout << it << " ";
    cout << "\n";
  };
}
