#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for(int i=a;i<n;i++) 

//int main(){
    //A
    /*
    vector<int> a={1, 1, 1, 2, 1, 2, 1, 5, 2, 2, 1, 5, 1, 2, 1, 14, 1, 5, 1, 5, 2, 2, 1, 15, 2, 2, 5, 4, 1, 4, 1, 51};
    int K;
    cin>>K;
    cout<<a[K-1]<<endl;
    */
   //B
   /*
   long long H,W;
   cin>>H>>W;
   if(H==1||W==1) cout<<1<<endl;
   else cout<<(H*W+1)/2<<endl;
   */
   //C
   /*
   long long a,b,c; //int型は2*10^9くらいの値まで
   cin>>a>>b>>c;
   long long d = c-a-b;
   if(d>0&&d*d>4*a*b) cout<<"Yes"<<endl;
   else cout<<"No"<<endl;
   */
   //D dfsのリターンについて・・・1度のdfs関数への代入で複数のreturnが起こる？
   int n;
   void dfs(string s,char end){
       if(s.size()==n){
           cout<<s<<endl;
           return ;
       }
       for(char i='a';i<=end;i++){
           char nxt = end;
           if(i==end) nxt++;
           dfs(s+i,nxt);
       }
   }
  // }
//return 0;
//}
    int main(){
        cin>>n;
        dfs('a','a');
        return 0;
    }