#include <bits/stdc++.h>
const int N=5e5+10;
int trie[N][27];
int dep[N];
bool leaf[N];
int ptr=1;
void print(int s,bool ldep){
//std::cout << s << "D";
if(leaf[s])std::cout << "P\n";
if(ldep){
for(int i=0;i<26;i++){
if(trie[s][i]!=-1){
std::cout << (char)(i+'a') << "\n";
print(trie[s][i],true);
std::cout << "-\n";
}
}
return;
}
int large = -1;
for(int i=0;i<26;i++){
if((trie[s][i]!=-1)&&(large==-1||dep[trie[s][i]]>dep[trie[s][large]]))large=i;
}
if(large==-1)return;
for(int i=0;i<26;i++){
if(trie[s][i]!=-1&&i!=large){
std::cout << (char)(i+'a') << "\n";
print(trie[s][i],true);
std::cout << "-\n";
}
}
std::cout << (char)(large+'a') << "\n";
print(trie[s][large],false);
}
int main() {
int n;
std::cin >> n;
std::fill(trie[0],trie[0]+26,-1);
for(int i=0;i<n;i++){
std::string in;
std::cin >> in;
int p=0;
for(int j=0;j<in.size();j++){
int idx = in[j]-'a';
if(trie[p][idx]==-1){
std::fill(trie[ptr],trie[ptr]+26,-1);
trie[p][idx]=ptr++;
}
dep[p]=std::max(dep[p],(int)in.size()-j);
p=trie[p][idx];
}
leaf[p]=1;
}
std::cout << (ptr-1)*2-dep[0]+n<<"\n";
print(0,false);
}