#include<bits/stdc++.h>
#include<iostream>
#include<stdio.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

#define fr(i,j,n)   for(long long i=j;i<(n);++i)
#define bk(i,j,n)   for(long long i=j;i>=n;--i)
#define pb push_back
#define mp make_pair
#define F first
#define S second
#define endl "\n"
#define MOD 1000000007
#define debug1(x) cout<<#x<<" "<<x<<endl;
#define debug2(x,y) cout<<#x<<" "<<x<<" "<<#y<<" "<<y<<endl;
#define debug3(x,y,z) cout<<#x<<" "<<x<<" "<<#y<<" "<<y<<" "<<#z<<" "<<z<<endl;
#define srt(x) sort(x.begin(),x.end());
#define run ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define ordered_set tree<ll , null_type, less<ll>, rb_tree_tag, tree_order_statistics_node_update>

typedef long long ll;
ll modpower(ll a,ll b,ll c)
{
	ll res=1;
	while(b)
	{
		if(b&1LL)
			res=(res*a)%c;
		a=(a*a)%c;
		b>>=1;
	}
	return res;
}



int main()
{
    run;
    ll n;
    cin>>n;
    if(n==1)
    {
        cout<<"a";
        return 0;
    }else if(n==2)
    {
        cout<<"aa";
        cout<<"ab";
        return 0;
    }
    string s;
    if(n==3)
    {
        cout<<"aaa"<<endl;
        s="aab";
        cout<<s<<endl;
        s="aba";
        cout<<s<<endl;
        s="abb";
        cout<<s<<endl;
        s="abc";
        cout<<s<<endl;

        return 0;
    }
    if(n==4)
    {
        char a='a',b='b',c='c',d='d';
        vector<char> v;
        v.pb(a);
        v.pb(b);
        v.pb(c);
        v.pb(d);
        ll p=1;
        fr(i,1,n+1)
        {
            p*=i;
        }


        set<string> st;

        fr(i,0,p)
        {
            string u;
            u.pb(a);
            fr(i,0,2)
            {
                u.pb(v[i]);
                fr(j,0,3)
                {
                    u.pb(v[j]);
                    fr(k,0,4)
                    {
                        u.pb(v[k]);
                        st.insert(u);
                        u.pop_back();
                    }
                    u.pop_back();
                }
                u.pop_back();
            }
        }

        ll vis[26];
        memset(vis,-1ll,sizeof vis);

        string y;
        set<string> ss;


        for(auto it=st.begin();it!=st.end();it++)
        {
            y=*it;
            memset(vis,-1ll,sizeof vis);
            ll dif=0;
            string ji;

            fr(i,0,n)
            {
                if(vis[y[i]-'a']==-1)
                {
                    vis[y[i]-'a']=dif;
                    ji.pb(dif+'a');

                    dif++;
                }else{
                    ji.pb(vis[y[i]-'a']+'a');

                }
            }
            ss.insert(ji);


           // cout<<*it<<endl;
        }
        for(auto it=ss.begin();it!=ss.end();it++)
        {
            cout<<*it<<endl;
        }
        return 0;



    }

    if(n==5)
    {
        char a='a',b='b',c='c',d='d';
        vector<char> v;
        v.pb(a);
        v.pb(b);
        v.pb(c);
        v.pb(d);
        v.pb('e');
        ll p=1;
        fr(i,1,n+1)
        {
            p*=i;
        }


        set<string> st;

        fr(i,0,p)
        {
            string u;
            u.pb(a);
            fr(i,0,2)
            {
                u.pb(v[i]);
                fr(j,0,3)
                {
                    u.pb(v[j]);
                    fr(k,0,4)
                    {
                        u.pb(v[k]);
                        fr(l,0,5)
                        {
                            u.pb(v[l]);
                            st.insert(u);
                            u.pop_back();
                        }
                        //u.pb(v[k]);
                        //st.insert(u);
                        u.pop_back();
                    }
                    u.pop_back();
                }
                u.pop_back();
            }
        }

        ll vis[26];
        memset(vis,-1ll,sizeof vis);

        string y;
        set<string> ss;


        for(auto it=st.begin();it!=st.end();it++)
        {
            y=*it;
            memset(vis,-1ll,sizeof vis);
            ll dif=0;
            string ji;

            fr(i,0,n)
            {
                if(vis[y[i]-'a']==-1)
                {
                    vis[y[i]-'a']=dif;
                    ji.pb(dif+'a');

                    dif++;
                }else{
                    ji.pb(vis[y[i]-'a']+'a');

                }
            }
            ss.insert(ji);


           // cout<<*it<<endl;
        }
        for(auto it=ss.begin();it!=ss.end();it++)
        {
            cout<<*it<<endl;
        }
        return 0;



    }

    if(n==6)
    {
        char a='a',b='b',c='c',d='d';
        vector<char> v;
        v.pb(a);
        v.pb(b);
        v.pb(c);
        v.pb(d);
        v.pb('e');
        v.pb('f');
        ll p=1;
        fr(i,1,n+1)
        {
            p*=i;
        }


        set<string> st;

        fr(i,0,p)
        {
            string u;
            u.pb(a);
            fr(i,0,2)
            {
                u.pb(v[i]);
                fr(j,0,3)
                {
                    u.pb(v[j]);
                    fr(k,0,4)
                    {
                        u.pb(v[k]);
                        fr(l,0,5)
                        {
                            u.pb(v[l]);
                            fr(t,0,6)
                            {
                                u.pb(v[t]);
                                st.insert(u);
                                u.pop_back();
                            }
                           // u.pb(v[l]);
                            //st.insert(u);
                            u.pop_back();
                        }
                        //u.pb(v[k]);
                        //st.insert(u);
                        u.pop_back();
                    }
                    u.pop_back();
                }
                u.pop_back();
            }
        }

        ll vis[26];
        memset(vis,-1ll,sizeof vis);

        string y;
        set<string> ss;


        for(auto it=st.begin();it!=st.end();it++)
        {
            y=*it;
            memset(vis,-1ll,sizeof vis);
            ll dif=0;
            string ji;

            fr(i,0,n)
            {
                if(vis[y[i]-'a']==-1)
                {
                    vis[y[i]-'a']=dif;
                    ji.pb(dif+'a');

                    dif++;
                }else{
                    ji.pb(vis[y[i]-'a']+'a');

                }
            }
            ss.insert(ji);


           // cout<<*it<<endl;
        }
        for(auto it=ss.begin();it!=ss.end();it++)
        {
            cout<<*it<<endl;
        }
        return 0;



    }

    if(n==7)
    {
        char a='a',b='b',c='c',d='d';
        vector<char> v;
        v.pb(a);
        v.pb(b);
        v.pb(c);
        v.pb(d);
        v.pb('e');
        v.pb('f');
        v.pb('g');
        ll p=1;
        fr(i,1,n+1)
        {
            p*=i;
        }


        set<string> st;

        fr(i,0,p)
        {
            string u;
            u.pb(a);
            fr(i,0,2)
            {
                u.pb(v[i]);
                fr(j,0,3)
                {
                    u.pb(v[j]);
                    fr(k,0,4)
                    {
                        u.pb(v[k]);
                        fr(l,0,5)
                        {
                            u.pb(v[l]);
                            fr(t,0,6)
                            {
                                u.pb(v[t]);
                                fr(ii,0,7)
                                {
                                    u.pb(v[ii]);
                                    st.insert(u);
                                    u.pop_back();
                                }
                               // u.pb(v[t]);
                                //st.insert(u);
                                u.pop_back();
                            }
                           // u.pb(v[l]);
                            //st.insert(u);
                            u.pop_back();
                        }
                        //u.pb(v[k]);
                        //st.insert(u);
                        u.pop_back();
                    }
                    u.pop_back();
                }
                u.pop_back();
            }
        }

        ll vis[26];
        memset(vis,-1ll,sizeof vis);

        string y;
        set<string> ss;


        for(auto it=st.begin();it!=st.end();it++)
        {
            y=*it;
            memset(vis,-1ll,sizeof vis);
            ll dif=0;
            string ji;

            fr(i,0,n)
            {
                if(vis[y[i]-'a']==-1)
                {
                    vis[y[i]-'a']=dif;
                    ji.pb(dif+'a');

                    dif++;
                }else{
                    ji.pb(vis[y[i]-'a']+'a');

                }
            }
            ss.insert(ji);


           // cout<<*it<<endl;
        }
        for(auto it=ss.begin();it!=ss.end();it++)
        {
            cout<<*it<<endl;
        }
        return 0;



    }

    if(n==8)
    {
        char a='a',b='b',c='c',d='d';
        vector<char> v;
        v.pb(a);
        v.pb(b);
        v.pb(c);
        v.pb(d);
        v.pb('e');
        v.pb('f');
        v.pb('g');
        v.pb('h');
        ll p=1;
        fr(i,1,n+1)
        {
            p*=i;
        }


        set<string> st;

        fr(i,0,p)
        {
            string u;
            u.pb(a);
            fr(i,0,2)
            {
                u.pb(v[i]);
                fr(j,0,3)
                {
                    u.pb(v[j]);
                    fr(k,0,4)
                    {
                        u.pb(v[k]);
                        fr(l,0,5)
                        {
                            u.pb(v[l]);
                            fr(t,0,6)
                            {
                                u.pb(v[t]);
                                fr(ii,0,7)
                                {
                                    u.pb(v[ii]);
                                    fr(jj,0,8)
                                    {
                                        u.pb(v[jj]);
                                        st.insert(u);
                                        u.pop_back();
                                    }

                                   // st.insert(u);
                                    u.pop_back();
                                }
                               // u.pb(v[t]);
                                //st.insert(u);
                                u.pop_back();
                            }
                           // u.pb(v[l]);
                            //st.insert(u);
                            u.pop_back();
                        }
                        //u.pb(v[k]);
                        //st.insert(u);
                        u.pop_back();
                    }
                    u.pop_back();
                }
                u.pop_back();
            }
        }

        ll vis[26];
        memset(vis,-1ll,sizeof vis);

        string y;
        set<string> ss;


        for(auto it=st.begin();it!=st.end();it++)
        {
            y=*it;
            memset(vis,-1ll,sizeof vis);
            ll dif=0;
            string ji;

            fr(i,0,n)
            {
                if(vis[y[i]-'a']==-1)
                {
                    vis[y[i]-'a']=dif;
                    ji.pb(dif+'a');

                    dif++;
                }else{
                    ji.pb(vis[y[i]-'a']+'a');

                }
            }
            ss.insert(ji);


           // cout<<*it<<endl;
        }
        for(auto it=ss.begin();it!=ss.end();it++)
        {
            cout<<*it<<endl;
        }
        return 0;



    }

    if(n==9)
    {
        char a='a',b='b',c='c',d='d';
        vector<char> v;
        v.pb(a);
        v.pb(b);
        v.pb(c);
        v.pb(d);
        v.pb('e');
        v.pb('f');
        v.pb('g');
        v.pb('h');
        v.pb('i');
        ll p=1;
        fr(i,1,n+1)
        {
            p*=i;
        }


        set<string> st;

        fr(i,0,p)
        {
            string u;
            u.pb(a);
            fr(i,0,2)
            {
                u.pb(v[i]);
                fr(j,0,3)
                {
                    u.pb(v[j]);
                    fr(k,0,4)
                    {
                        u.pb(v[k]);
                        fr(l,0,5)
                        {
                            u.pb(v[l]);
                            fr(t,0,6)
                            {
                                u.pb(v[t]);
                                fr(ii,0,7)
                                {
                                    u.pb(v[ii]);
                                    fr(jj,0,8)
                                    {
                                        u.pb(v[jj]);
                                        fr(kk,0,9)
                                        {
                                            u.pb(v[kk]);
                                             st.insert(u);
                                        u.pop_back();
                                        }

                                        //st.insert(u);
                                        u.pop_back();
                                    }

                                   // st.insert(u);
                                    u.pop_back();
                                }
                               // u.pb(v[t]);
                                //st.insert(u);
                                u.pop_back();
                            }
                           // u.pb(v[l]);
                            //st.insert(u);
                            u.pop_back();
                        }
                        //u.pb(v[k]);
                        //st.insert(u);
                        u.pop_back();
                    }
                    u.pop_back();
                }
                u.pop_back();
            }
        }

        ll vis[26];
        memset(vis,-1ll,sizeof vis);

        string y;
        set<string> ss;


        for(auto it=st.begin();it!=st.end();it++)
        {
            y=*it;
            memset(vis,-1ll,sizeof vis);
            ll dif=0;
            string ji;

            fr(i,0,n)
            {
                if(vis[y[i]-'a']==-1)
                {
                    vis[y[i]-'a']=dif;
                    ji.pb(dif+'a');

                    dif++;
                }else{
                    ji.pb(vis[y[i]-'a']+'a');

                }
            }
            ss.insert(ji);


           // cout<<*it<<endl;
        }
        for(auto it=ss.begin();it!=ss.end();it++)
        {
            cout<<*it<<endl;
        }
        return 0;



    }


    if(n==10)
    {
        char a='a',b='b',c='c',d='d';
        vector<char> v;
        v.pb(a);
        v.pb(b);
        v.pb(c);
        v.pb(d);
        v.pb('e');
        v.pb('f');
        v.pb('g');
        v.pb('h');
        v.pb('i');
        v.pb('j');
        ll p=1;
        fr(i,1,n+1)
        {
            p*=i;
        }


        set<string> st;

        fr(i,0,p)
        {
            string u;
            u.pb(a);
            fr(i,0,2)
            {
                u.pb(v[i]);
                fr(j,0,3)
                {
                    u.pb(v[j]);
                    fr(k,0,4)
                    {
                        u.pb(v[k]);
                        fr(l,0,5)
                        {
                            u.pb(v[l]);
                            fr(t,0,6)
                            {
                                u.pb(v[t]);
                                fr(ii,0,7)
                                {
                                    u.pb(v[ii]);
                                    fr(jj,0,8)
                                    {
                                        u.pb(v[jj]);
                                        fr(kk,0,9)
                                        {
                                            u.pb(v[kk]);
                                            fr(ll,0,10)
                                            {
                                                u.pb(v[ll]);
                                                st.insert(u);
                                                u.pop_back();
                                            }
                                            // st.insert(u);
                                        u.pop_back();
                                        }

                                        //st.insert(u);
                                        u.pop_back();
                                    }

                                   // st.insert(u);
                                    u.pop_back();
                                }
                               // u.pb(v[t]);
                                //st.insert(u);
                                u.pop_back();
                            }
                           // u.pb(v[l]);
                            //st.insert(u);
                            u.pop_back();
                        }
                        //u.pb(v[k]);
                        //st.insert(u);
                        u.pop_back();
                    }
                    u.pop_back();
                }
                u.pop_back();
            }
        }

        ll vis[26];
        memset(vis,-1ll,sizeof vis);

        string y;
        set<string> ss;


        for(auto it=st.begin();it!=st.end();it++)
        {
            y=*it;
            memset(vis,-1ll,sizeof vis);
            ll dif=0;
            string ji;

            fr(i,0,n)
            {
                if(vis[y[i]-'a']==-1)
                {
                    vis[y[i]-'a']=dif;
                    ji.pb(dif+'a');

                    dif++;
                }else{
                    ji.pb(vis[y[i]-'a']+'a');

                }
            }
            ss.insert(ji);


           // cout<<*it<<endl;
        }
        for(auto it=ss.begin();it!=ss.end();it++)
        {
            cout<<*it<<endl;
        }
        return 0;



    }





}
