#include <iostream>
#include <deque>
#include <map>
#include <vector>
#include <string>

using namespace std;

typedef deque<string> Prefix;

const int nwords = 15000;
const int npref = 2;
char NONWORD[] = "\n";

typedef map<Prefix, vector<string> > tt;

tt statetab;

void add( Prefix& prefix, const string& s)
{
        if ( prefix.size() == npref )
        {
                statetab[prefix].push_back(s);
                prefix.pop_front();
        }
        prefix.push_back(s);
}
void build( Prefix& prefix, istream& in)
{
        string buf;

        while ( in >> buf )
                add( prefix, buf);
}
void generate(int nwords)
{
        Prefix prefix;
        int i;
        int len = 0;

        for ( i = 0; i < npref; ++i)
                add( prefix, NONWORD);

        for ( i = 0; i < nwords; ++i)
        {
                vector<string>& suf = statetab[prefix];
                const string& w = suf[rand() % suf.size()];

                if ( w == NONWORD )
                        break;

                if ( len + w.size() > 70 )
                {
                        cout << endl;
                        len = 0;
                }
                cout << w << " ";
                len += w.size()+1;

                prefix.pop_front();
                prefix.push_back(w);
        }
}
int main()
{
        Prefix prefix;

        for ( int i = 0; i < npref; ++i)
                add( prefix, NONWORD);

        build( prefix, cin);
        add( prefix, NONWORD);
        generate(nwords);

        return 0;
}