#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("avx")
constexpr int INF = 2147483647;
constexpr long long int INF_LL = 9223372036854775807;
constexpr int MOD = 1000000007;
constexpr double PI = 3.14159265358979323846;
using namespace std;
set<string> ans;
int N;
void dfs(int depth, vector<int> a) {
  if (depth != N) {
    for (int i = 0; i < depth + 1; i++) {
      a.push_back(i);
      dfs(depth + 1, a);
      a.pop_back();
    }
  } else {
    vector<int> s(10, -1);
    string S = "";
    for (int i = 0, j = 0; i < a.size(); i++) {
      if (s[a[i]] == -1) {
        s[a[i]] = j;
        j++;
      }
    }
    for (int i = 0; i < a.size(); i++) {
      S += 'a' + s[a[i]];
    }
    ans.insert(S);
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cin >> N;
  dfs(1, vector<int>(1, 0));
  for (auto itr = ans.begin(); itr != ans.end(); itr++) {
    cout << *itr << endl;
  }
}
