#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
vector<char> v;
int D=0,n;
class TrieNode{
public:
TrieNode* par=nullptr;
TrieNode* children[26];
ll c=0;
TrieNode(){
for(int a=0;a<26;a++){
children[a]=nullptr;
}
}
};
class Trie{
private:
TrieNode* root;
public:
Trie(){
root=new TrieNode();
}
void aa(string s){
TrieNode* node=root;
for(auto z:s){
int i=z-'a';
if(node->children[i]==nullptr){
node->children[i]=new TrieNode();
}
node->children[i]->par=node;
node=node->children[i];
}
node->c++;
}
void dfs(TrieNode* node){
if(node->c==1){
v.push_back('P');
D++;
if(D==n){
return;
}
}
for(int a=0;a<26;a++){
if(node->children[a]!=nullptr){
v.push_back('a'+a);
dfs(node->children[a]);
if(D==n){
return;
}
}
}
v.push_back('-');
}
void bb(){
TrieNode* node=root;
dfs(node);
}
};
void solve(){
cin>>n;
vector<string> s(n);
Trie trie;
for(int a=0;a<n;a++){
cin>>s[a];
trie.aa(s[a]);
}
trie.bb();
cout<<v.size()<<endl;
for(auto z:v){
cout<<z<<endl;
}
}
signed main(){
ios::sync_with_stdio();
cin.tie(0);
cout.tie(0);
// freopen("a.in", "r", stdin);
// freopen("a.out", "w", stdout);
ll t=1;
// cin>>t;
for(ll a=0;a<t;a++){
solve();
}
}