#include <iostream>
#include <deque>
#include <map>
#include <vector>
#include <string>
using namespace std;
typedef deque<string> Prefix;
const int nwords = 15000;
const int npref = 3;
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;
}