#include <bits/stdc++.h>
using namespace std;
int dx[4] = {1, 0, -1, 0};
int dy[4] = {0, 1, 0, -1};
const int long long MOD = 1e9 + 7;
static const int MAX = 100;
static const int INF = (1 << 23);
template <class T>
T gcd(T a, T b) {
  return b ? gcd(b, a % b) : a;
}
template <class T>
T lcm(T a, T b) {
  return a / gcd(a, b) * b;
}
vector<string> ans;
int n;
string s;
char al[11] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k'};
void dfs(string ss) {
  if (ss.size() == n) {
    ans.push_back(ss);
  } else {
    int k = ss.size();
    map<char, int> m;
    for (int i = 0; i < ss.size(); i++) {
      m[ss[i]]++;
    }
    if (m.size() == 1) {
      for (int i = 0; i < 2; i++) {
        string s2 = ss + al[i];
        dfs(s2);
      }
    } else if (m.size() == k) {
      for (int i = 0; i < k + 1; i++) {
        string s2 = ss + al[i];
        dfs(s2);
      }
    } else {
      for (int i = 0; i < k + 1; i++) {
        string s2 = ss + al[i];
        dfs(s2);
      }
    }
  }
}
int main() {
  cin >> n;
  s = 'a';
  dfs(s);
  sort(ans.begin(), ans.end());
  for (int i = 0; i < ans.size(); i++) {
    cout << ans[i] << endl;
  }
  return 0;
}
