#include <iostream>
#include <cstdio>
using namespace std;
char a[100000],te='`';
long long int i,j,k[10000],kp=0,l,co=0,n,ap=0,np=0,y,temp,fl,o;
bool isChar(char a)
{
if((a>='a')&&(a<='z')){return true;}
else return false;
}
int main()
{
cin>>n; //Take in the number of rows for the input
for(i=0;i<=n;i++) //Loop for taking in the sentence and ignoring the punctuations(they arent printed in the sample output)
{
while(te!='\n')
{
cin.get(te);
if((te=='\n')&&(a[ap]!=' '))
{
a[ap]=' '; ap++;
break;
}
else if(((te>='a')&&(te<='z'))||((te>='A')&&(te<='Z')))
{a[ap]=te; ap++;}
else if(te=='\''){}
else
{
if(a[ap-1]!=' '){a[ap]=te; ap++;}
}
}
te='`';
}
for(i=0;a[i]!='\0';i++) //Converting all characters to lower case and storing length of array in i
{
if((a[i]>='A')&&(a[i]<='Z')){a[i]+=32;}
}
if((a[0]>='a')&&(a[0]<='z')) //Checking the first letter (corner case for my algo
{
k[0]=0; kp++; co++;
}
for(j=0;j<i;j++) //Calculating total number of words and storing the first letter's index in another array
{
if(((a[j]<'a')||(a[j]>'z'))&&((a[j+1]>='a')&&(a[j+1]<='z')))//&&(a[j-1]==' '))
{
k[kp]=j+1;
kp++;
co++;
}
}
for(l=0;l<kp;l++) //sorting the indexes of words in a lexicographical order
{
for(j=1;j<kp;j++)
{
y=0;
if(a[k[j]]<a[k[j-1]])
{temp=k[j-1]; k[j-1]=k[j]; k[j]=temp;}
else if(a[k[j]]==a[k[j-1]])
{
while((a[k[j]+y]==a[k[j-1]+y])&&(a[k[j]+y]!=' ')){y++;}
if(a[k[j]+y]<a[k[j-1]+y])
{temp=k[j-1]; k[j-1]=k[j]; k[j]=temp;}
}
}
}
np=1;
for(j=0;j<kp;j++,np++) //Finding and marking duplicates by replacing index by -1
{
o=0,fl=0;
while(isChar(a[k[np]+o]) && isChar(a[k[j]+o]))
{
if(a[k[np]+o]!=a[k[j]+o]){fl=1;}
o++;
}
if(((fl==0))&&((!isChar(a[k[j]+o]))&&(!isChar(a[k[np]+o]))))
{
k[j]=-1;
co--;
}
}
cout<<co<<"\n";
for(j=0;j<kp;j++) //Displaying all the words in lexicographical order
{
y=0;
while(((a[k[j]+y]>='a')&&(a[k[j]+y]<='z'))&&(k[j]!=-1))
{
cout<<a[k[j]+y];
y++;
}
if(((a[k[j]+y-1]>='a')&&(a[k[j]+y-1]<='z'))&&(k[j]!=-1))
cout<<"\n";
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGlvPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjaGFyIGFbMTAwMDAwXSx0ZT0nYCc7CmxvbmcgbG9uZyBpbnQgaSxqLGtbMTAwMDBdLGtwPTAsbCxjbz0wLG4sYXA9MCxucD0wLHksdGVtcCxmbCxvOwpib29sIGlzQ2hhcihjaGFyIGEpCnsKICAgIGlmKChhPj0nYScpJiYoYTw9J3onKSl7cmV0dXJuIHRydWU7fQogICAgZWxzZSByZXR1cm4gZmFsc2U7Cn0KaW50IG1haW4oKQp7CiAgICBjaW4+Pm47ICAgICAgICAgICAgIC8vVGFrZSBpbiB0aGUgbnVtYmVyIG9mIHJvd3MgZm9yIHRoZSBpbnB1dAogICAgZm9yKGk9MDtpPD1uO2krKykgICAvL0xvb3AgZm9yIHRha2luZyBpbiB0aGUgc2VudGVuY2UgYW5kIGlnbm9yaW5nIHRoZSBwdW5jdHVhdGlvbnModGhleSBhcmVudCBwcmludGVkIGluIHRoZSBzYW1wbGUgIG91dHB1dCkKICAgIHsKICAgICAgICB3aGlsZSh0ZSE9J1xuJykKICAgICAgICB7CiAgICAgICAgY2luLmdldCh0ZSk7CiAgICAgICAgaWYoKHRlPT0nXG4nKSYmKGFbYXBdIT0nICcpKQogICAgICAgIHsKICAgICAgICAgICAgYVthcF09JyAnOyBhcCsrOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZigoKHRlPj0nYScpJiYodGU8PSd6JykpfHwoKHRlPj0nQScpJiYodGU8PSdaJykpKQogICAgICAgICAgICB7YVthcF09dGU7IGFwKys7fQogICAgICAgIGVsc2UgaWYodGU9PSdcJycpe30KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICBpZihhW2FwLTFdIT0nICcpe2FbYXBdPXRlOyBhcCsrO30KICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRlPSdgJzsKICAgIH0KICAgIGZvcihpPTA7YVtpXSE9J1wwJztpKyspICAgICAgICAgLy9Db252ZXJ0aW5nIGFsbCBjaGFyYWN0ZXJzIHRvIGxvd2VyIGNhc2UgYW5kIHN0b3JpbmcgbGVuZ3RoIG9mIGFycmF5IGluIGkKICAgIHsKICAgICAgICBpZigoYVtpXT49J0EnKSYmKGFbaV08PSdaJykpe2FbaV0rPTMyO30KICAgIH0KICAgIGlmKChhWzBdPj0nYScpJiYoYVswXTw9J3onKSkgIC8vQ2hlY2tpbmcgdGhlIGZpcnN0IGxldHRlciAoY29ybmVyIGNhc2UgZm9yIG15IGFsZ28KICAgIHsKICAgICAgICBrWzBdPTA7IGtwKys7IGNvKys7CiAgICB9CiAgICBmb3Ioaj0wO2o8aTtqKyspICAgICAgIC8vQ2FsY3VsYXRpbmcgdG90YWwgbnVtYmVyIG9mIHdvcmRzIGFuZCBzdG9yaW5nIHRoZSBmaXJzdCBsZXR0ZXIncyBpbmRleCBpbiBhbm90aGVyIGFycmF5CiAgICB7CiAgICAgICAgaWYoKChhW2pdPCdhJyl8fChhW2pdPid6JykpJiYoKGFbaisxXT49J2EnKSYmKGFbaisxXTw9J3onKSkpLy8mJihhW2otMV09PScgJykpCiAgICAgICAgewogICAgICAgICAgICBrW2twXT1qKzE7CiAgICAgICAgICAgIGtwKys7CiAgICAgICAgICAgIGNvKys7CiAgICAgICAgfQogICAgfQogICAgZm9yKGw9MDtsPGtwO2wrKykgICAgICAgICAgIC8vc29ydGluZyB0aGUgaW5kZXhlcyBvZiB3b3JkcyBpbiBhIGxleGljb2dyYXBoaWNhbCBvcmRlcgogICAgewogICAgZm9yKGo9MTtqPGtwO2orKykKICAgIHsKICAgICAgICB5PTA7CiAgICAgICAgaWYoYVtrW2pdXTxhW2tbai0xXV0pCiAgICAgICAgICAgIHt0ZW1wPWtbai0xXTsga1tqLTFdPWtbal07IGtbal09dGVtcDt9CiAgICAgICAgZWxzZSBpZihhW2tbal1dPT1hW2tbai0xXV0pCiAgICAgICAgewogICAgICAgICAgICB3aGlsZSgoYVtrW2pdK3ldPT1hW2tbai0xXSt5XSkmJihhW2tbal0reV0hPScgJykpe3krKzt9CiAgICAgICAgICAgIGlmKGFba1tqXSt5XTxhW2tbai0xXSt5XSkKICAgICAgICAgICAge3RlbXA9a1tqLTFdOyBrW2otMV09a1tqXTsga1tqXT10ZW1wO30KICAgICAgICB9CgogICAgfQogICAgfQogICAgbnA9MTsKICAgIGZvcihqPTA7ajxrcDtqKyssbnArKykgICAgICAgICAgIC8vRmluZGluZyBhbmQgbWFya2luZyBkdXBsaWNhdGVzIGJ5IHJlcGxhY2luZyBpbmRleCBieSAtMQogICAgewogICAgICAgIG89MCxmbD0wOwogICAgICAgICAgICB3aGlsZShpc0NoYXIoYVtrW25wXStvXSkgJiYgaXNDaGFyKGFba1tqXStvXSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmKGFba1tucF0rb10hPWFba1tqXStvXSl7Zmw9MTt9CiAgICAgICAgICAgICAgICBvKys7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYoKChmbD09MCkpJiYoKCFpc0NoYXIoYVtrW2pdK29dKSkmJighaXNDaGFyKGFba1tucF0rb10pKSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGtbal09LTE7CiAgICAgICAgICAgICAgICBjby0tOwogICAgICAgICAgICB9CiAgICB9CiAgICBjb3V0PDxjbzw8IlxuIjsKCiAgICBmb3Ioaj0wO2o8a3A7aisrKSAgICAgICAgICAgLy9EaXNwbGF5aW5nIGFsbCB0aGUgd29yZHMgaW4gbGV4aWNvZ3JhcGhpY2FsIG9yZGVyCiAgICB7CiAgICAgICAgeT0wOwogICAgICAgIHdoaWxlKCgoYVtrW2pdK3ldPj0nYScpJiYoYVtrW2pdK3ldPD0neicpKSYmKGtbal0hPS0xKSkKICAgICAgICB7CiAgICAgICAgICAgIGNvdXQ8PGFba1tqXSt5XTsKICAgICAgICAgICAgeSsrOwogICAgICAgIH0KICAgICAgICBpZigoKGFba1tqXSt5LTFdPj0nYScpJiYoYVtrW2pdK3ktMV08PSd6JykpJiYoa1tqXSE9LTEpKQogICAgICAgIGNvdXQ8PCJcbiI7CiAgICB9CiAgICByZXR1cm4gMDsKfQo=