#include <bits/stdc++.h>
using namespace std;
constexpr long long MOD = 998244353;
long long INF = 6001001001001001001;
long double EPS = 1e-11;
long double PI = 3.141592653589793238;
template <typename T>
void remove(std::vector<T>& vector, unsigned int index) {
  vector.erase(vector.begin() + index);
}
using Graph = vector<vector<long long>>;
long long N;
vector<string> TS;
long long B[10];
void DFS(string S, string T, long long M, long long cnt) {
  bool flag = 1;
  for (long long i = (long long)0; i < (long long)M; i++)
    if (S[i] == '.') flag = 0;
  if (flag) {
    string s = "";
    for (long long i = (long long)0; i < (long long)M; i++) {
      for (long long j = (long long)0; j < (long long)B[i]; j++) s += S[i];
    }
    TS.push_back(s);
  } else {
    if (S[0] == '.') {
      S[0] = 'a';
      T[0] = '1';
      DFS(S, T, M, cnt + 1);
    } else if (S[1] == '.') {
      S[1] = 'b';
      T[1] = '1';
      DFS(S, T, M, cnt + 1);
    } else {
      long long itr = 0;
      for (long long i = (long long)0; i < (long long)M; i++) {
        if (i == 0) {
          if (S[cnt - 1] != 'a') {
            S[cnt] = 'a';
            DFS(S, T, M, cnt + 1);
            S[cnt] = '.';
          }
        } else {
          if (T[cnt - 1] == '.') {
            break;
          } else {
            if (S[cnt - 1] != 'a' + i) {
              S[cnt] = 'a' + i;
              T[i] = '1';
              DFS(S, T, M, cnt + 1);
              S[cnt] = '.';
            }
          }
        }
      }
    }
  }
}
void dfs(string S) {
  long long n = S.size();
  long long sum = 0;
  for (long long i = (long long)0; i < (long long)n; i++) {
    if (S[i] == '#')
      sum += 10;
    else
      sum += S[i] - '0';
  }
  if (sum == N) {
    for (long long i = (long long)0; i < (long long)10; i++) B[i] = 0;
    for (long long i = (long long)0; i < (long long)S.size(); i++) {
      if (S[i] == '#') {
        B[i] = 10;
      } else {
        B[i] = S[i] - '0';
      }
    }
    string t = "", s = "";
    for (long long i = (long long)0; i < (long long)S.size(); i++) {
      s += '.';
      t += '.';
    }
    DFS(s, t, S.size(), 0);
  }
  for (long long i = (long long)1; i < (long long)N - sum + 1; i++) {
    if (i == 10) {
      dfs(S + '#');
    } else {
      dfs(S + char('0' + i));
    }
  }
  return;
}
int main() {
  cin >> N;
  dfs("");
  sort(TS.begin(), TS.end());
  string END = "";
  for (long long i = (long long)0; i < (long long)N; i++) {
    END += 'a' + i;
  }
  for (long long i = (long long)0; i < (long long)TS.size(); i++) {
    cout << TS[i] << '\n';
    if (TS[i] == END) {
      return 0;
    }
  }
}
