#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 1000005;
struct node
{
int maxdep,dep,sub;
node *adj[26];
node()
{
for(int i=0;i<26;i++)
{
adj[i] = 0;
}
maxdep=0;
dep=0;
sub=0;
}
};
node *root = new node;
void insert(string s)
{
node *cur = root;
for(auto i:s)
{
if(cur -> adj[i-'a'] == 0)
{
cur -> adj[i-'a'] = new node;
}
cur = cur -> adj[i-'a'];
}
cur -> sub++;
}
void dfs1(node *cur)
{
cur -> maxdep = cur-> dep;
for(int i=0;i<26;i++)
{
if(cur -> adj[i] != 0)
{
cur->adj[i]->dep = cur->dep +1;
dfs1(cur -> adj[i]);
cur -> maxdep = max(cur -> maxdep,cur -> adj[i] -> maxdep);
}
}
}
string ans;
void dfs2(node *cur)
{
if(cur -> sub--)
{
ans +='P';
}
int m=-1;
for(int i=0;i<26;i++)
{
if(cur -> adj[i])
{
if(m==-1 || cur -> adj[i] -> maxdep > cur -> adj[m] -> maxdep)
{
m=i;
}
}
}
for(int i=0;i<26;i++)
{
if(i!=m && cur -> adj[i])
{
ans += (char)(i+'a');
dfs2(cur->adj[i]);
ans+='-';
}
}
if(m!= -1)
{
ans+=m+'a';
dfs2(cur->adj[m]);
ans+='-';
}
}
signed main()
{
cin.tie(0);
ios_base::sync_with_stdio(0);
int n;
cin >> n;
string s;
for(int i=0;i<n;i++)
{
cin >> s;
insert(s);
}
dfs1(root);
dfs2(root);
while(ans.back() == '-')
{
ans.pop_back();
}
cout << ans.size() << '\n';
for(auto i:ans)
{
cout << i << '\n';
}
}