#include <fstream>
#include <cstdlib>
#include <string>
#define pb push_back
using namespace std;
struct nodo
{
bool fine,col;
nodo* figli[26];
nodo(){for(int i=0;i<26;i++) figli[i]=NULL; fine=false; col=false;}
}root;
ifstream fin("input.txt");
ofstream fout("output.txt");
int N;
string S,maxS,sol;
void inserisci(nodo* N,string S,int P)
{
if(P==S.size()) { N->fine=true; return; }
if(N->figli[S[P]-'a']==NULL) N->figli[S[P]-'a']=new nodo;
inserisci(N->figli[S[P]-'a'],S,P+1);
}
void colora(nodo* N,string S,int P)
{
if(P==S.size()) return;
N->figli[S[P]-'a']->col=true;
colora(N->figli[S[P]-'a'],S,P+1);
}
void dfsS(nodo *N)
{
if(N->fine) sol.pb('P');
for(int i=0;i<26;i++)
{
if(N->figli[i]==NULL) continue;
sol.pb(char('a'+i));
dfsS(N->figli[i]);
}
sol.pb('-');
}
void dfs(nodo *N,int conta)
{
if(N->fine) sol.pb('P');
if(conta==maxS.size()) return;
int idx_col=-1;
for(int i=0;i<26;i++)
{
if(N->figli[i]==NULL) continue;
if(N->figli[i]->col) { idx_col=i; continue;}
sol.pb(char('a'+i));
dfsS(N->figli[i]);
}
sol.pb(char('a'+idx_col));
dfs(N->figli[idx_col],conta+1);
}
int main()
{
fin>>N;
for(int i=0;i<N;i++)
{
fin>>S;
inserisci(&root,S,0);
if(S.size()>maxS.size()) maxS=S;
}
colora(&root,maxS,0);
dfs(&root,0);
fout<<sol.size()<<"\n";
for(int i=0;i<sol.size();i++) fout<<sol[i]<<"\n";
return 0;
}
I2luY2x1ZGUgPGZzdHJlYW0+CiNpbmNsdWRlIDxjc3RkbGliPgojaW5jbHVkZSA8c3RyaW5nPgojZGVmaW5lIHBiIHB1c2hfYmFjawp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IG5vZG8KewogICAgYm9vbCBmaW5lLGNvbDsKICAgIG5vZG8qIGZpZ2xpWzI2XTsKICAgIG5vZG8oKXtmb3IoaW50IGk9MDtpPDI2O2krKykgZmlnbGlbaV09TlVMTDsgZmluZT1mYWxzZTsgY29sPWZhbHNlO30KfXJvb3Q7CgppZnN0cmVhbSBmaW4oImlucHV0LnR4dCIpOwpvZnN0cmVhbSBmb3V0KCJvdXRwdXQudHh0Iik7CgppbnQgTjsKc3RyaW5nIFMsbWF4Uyxzb2w7Cgp2b2lkIGluc2VyaXNjaShub2RvKiBOLHN0cmluZyBTLGludCBQKQp7CiAgICBpZihQPT1TLnNpemUoKSkgeyBOLT5maW5lPXRydWU7IHJldHVybjsgfQoKICAgIGlmKE4tPmZpZ2xpW1NbUF0tJ2EnXT09TlVMTCkgTi0+ZmlnbGlbU1tQXS0nYSddPW5ldyBub2RvOwogICAgaW5zZXJpc2NpKE4tPmZpZ2xpW1NbUF0tJ2EnXSxTLFArMSk7Cn0KCnZvaWQgY29sb3JhKG5vZG8qIE4sc3RyaW5nIFMsaW50IFApCnsKICAgIGlmKFA9PVMuc2l6ZSgpKSByZXR1cm47CiAgICBOLT5maWdsaVtTW1BdLSdhJ10tPmNvbD10cnVlOwogICAgY29sb3JhKE4tPmZpZ2xpW1NbUF0tJ2EnXSxTLFArMSk7Cn0KCnZvaWQgZGZzUyhub2RvICpOKQp7CiAgICBpZihOLT5maW5lKSBzb2wucGIoJ1AnKTsKICAgIGZvcihpbnQgaT0wO2k8MjY7aSsrKQogICAgewogICAgICAgIGlmKE4tPmZpZ2xpW2ldPT1OVUxMKSBjb250aW51ZTsKICAgICAgICBzb2wucGIoY2hhcignYScraSkpOwogICAgICAgIGRmc1MoTi0+ZmlnbGlbaV0pOwogICAgfQogICAgc29sLnBiKCctJyk7Cn0KCnZvaWQgZGZzKG5vZG8gKk4saW50IGNvbnRhKQp7CiAgICBpZihOLT5maW5lKSBzb2wucGIoJ1AnKTsKICAgIGlmKGNvbnRhPT1tYXhTLnNpemUoKSkgcmV0dXJuOwogICAgaW50IGlkeF9jb2w9LTE7CiAgICBmb3IoaW50IGk9MDtpPDI2O2krKykKICAgIHsKICAgICAgICBpZihOLT5maWdsaVtpXT09TlVMTCkgY29udGludWU7CiAgICAgICAgaWYoTi0+ZmlnbGlbaV0tPmNvbCkgeyBpZHhfY29sPWk7IGNvbnRpbnVlO30KICAgICAgICBzb2wucGIoY2hhcignYScraSkpOwogICAgICAgIGRmc1MoTi0+ZmlnbGlbaV0pOwogICAgfQoKICAgIHNvbC5wYihjaGFyKCdhJytpZHhfY29sKSk7CiAgICBkZnMoTi0+ZmlnbGlbaWR4X2NvbF0sY29udGErMSk7Cn0KCmludCBtYWluKCkKewogICAgZmluPj5OOwogICAgZm9yKGludCBpPTA7aTxOO2krKykKICAgIHsKICAgICAgICBmaW4+PlM7CiAgICAgICAgaW5zZXJpc2NpKCZyb290LFMsMCk7CgogICAgICAgIGlmKFMuc2l6ZSgpPm1heFMuc2l6ZSgpKSBtYXhTPVM7CiAgICB9CgogICAgY29sb3JhKCZyb290LG1heFMsMCk7CgogICAgZGZzKCZyb290LDApOwoKICAgIGZvdXQ8PHNvbC5zaXplKCk8PCJcbiI7CiAgICBmb3IoaW50IGk9MDtpPHNvbC5zaXplKCk7aSsrKSBmb3V0PDxzb2xbaV08PCJcbiI7CgogICAgcmV0dXJuIDA7Cgp9