#include<stdio.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <ctype.h>
using namespace std;
int main()
{
int no_lines=0;
cin>>no_lines;
cin.ignore();
string line;
vector<string> vec; // vector to store the words
int vecsize=0;
for(int i=0;i<no_lines;i++)
{
getline(cin,line);
for(int i=0;i<line.length();i++) // convert to lower-case
{
line[i]=tolower(line[i]);
}
int str_start;
int c;
int str_end=0;
int i=0;
while(i<line.length())
{
c=0;
while(line[i]>96 && line[i] <123) // splitting the words
{
if (c==0)
{
str_start=i;
}
c++;
i++;
}
str_end= str_start+c-1;
i++;
if(c!=0)
{
string okay = line.substr(str_start,c);
if((find(vec.begin(), vec.end(), okay))== vec.end())
{
vec.push_back(okay);
vecsize++;
}
}
//cout<<"start:"<<str_start<<endl;
}
}
sort(vec.begin(),vec.end());
cout<<vecsize<<endl;
for(int i=0;i<vecsize;i++)
{
cout<<vec[i]<<endl;
}
}
CiNpbmNsdWRlPHN0ZGlvLmg+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGN0eXBlLmg+CgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKaW50IG1haW4oKQoKewogIGludCBub19saW5lcz0wOwogIGNpbj4+bm9fbGluZXM7CiAgY2luLmlnbm9yZSgpOwoKICBzdHJpbmcgbGluZTsKICB2ZWN0b3I8c3RyaW5nPiB2ZWM7IC8vIHZlY3RvciB0byBzdG9yZSB0aGUgd29yZHMKaW50IHZlY3NpemU9MDsKICBmb3IoaW50IGk9MDtpPG5vX2xpbmVzO2krKykKICB7CiAgICAgIGdldGxpbmUoY2luLGxpbmUpOwoKICAgICAgZm9yKGludCBpPTA7aTxsaW5lLmxlbmd0aCgpO2krKykgLy8gY29udmVydCB0byBsb3dlci1jYXNlCiAgICAgICAgIHsKICAgICAgICAgICAgIGxpbmVbaV09dG9sb3dlcihsaW5lW2ldKTsKICAgICAgICAgfQoKICAgICAgICAgaW50IHN0cl9zdGFydDsKICAgICAgICAgaW50IGM7CiAgICAgICAgIGludCBzdHJfZW5kPTA7CiAgICAgICAgIGludCBpPTA7CiAgICAgICAgd2hpbGUoaTxsaW5lLmxlbmd0aCgpKQogICAgICAgICB7CgogICAgICAgICAgIGM9MDsKICAgICAgICAgICB3aGlsZShsaW5lW2ldPjk2ICYmIGxpbmVbaV0gPDEyMykgIC8vIHNwbGl0dGluZyB0aGUgd29yZHMKICAgICAgICAgICB7CiAgICAgICAgICAgICBpZiAoYz09MCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBzdHJfc3RhcnQ9aTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGMrKzsKICAgICAgICAgICAgIGkrKzsKICAgICAgICAgICB9CiAgICAgICAgICAgc3RyX2VuZD0gc3RyX3N0YXJ0K2MtMTsKICAgICAgICAgaSsrOwoKICAgICAgICBpZihjIT0wKQogICAgICAgICB7CiAgICAgICAgICBzdHJpbmcgb2theSA9IGxpbmUuc3Vic3RyKHN0cl9zdGFydCxjKTsKICAgICAgICAgIGlmKChmaW5kKHZlYy5iZWdpbigpLCB2ZWMuZW5kKCksIG9rYXkpKT09IHZlYy5lbmQoKSkKICAgICAgICAgICB7CiAgICAgICAgICAgdmVjLnB1c2hfYmFjayhva2F5KTsKICAgICAgICAgICB2ZWNzaXplKys7CiAgICAgICAgICAgfQoKICAgICAgICAgfQogICAgICAgICAvL2NvdXQ8PCJzdGFydDoiPDxzdHJfc3RhcnQ8PGVuZGw7CgoKICAgICAgICAgfQogfQogIHNvcnQodmVjLmJlZ2luKCksdmVjLmVuZCgpKTsKCmNvdXQ8PHZlY3NpemU8PGVuZGw7CiAgICAgICAgZm9yKGludCBpPTA7aTx2ZWNzaXplO2krKykKICAgICAgICB7CiAgICAgICAgICAgIGNvdXQ8PHZlY1tpXTw8ZW5kbDsKICAgICAgICB9Cn0KCgoK