#include <bits/stdc++.h>
using namespace std;
#define a first
#define b second
const int mod = 1e9 + 7;
const int inv2 = (mod + 1) / 2;
using ll = long long;
const int N = 5e5;
int trie[N][26];
bool w[N];
int dep[N];
int ptr = 1;
void dfs(int s, bool back) {
if (w[s]) cout << "P\n";
if (back) {
for (int i = 0; i < 26; i++)
if (trie[s][i] != -1) {
cout << (char)(i + 'a') << "\n";
dfs(trie[s][i], 1);
cout << "-\n";
}
return;
}
int md = -1;
for (int i = 0; i < 26; i++)
if (trie[s][i] != -1 &&
(md == -1 || dep[trie[s][i]] > dep[trie[s][md]]))
md = i;
if (md == -1) return;
for (int i = 0; i < 26; i++)
if (trie[s][i] != -1 && i != md) {
cout << (char)(i + 'a') << "\n";
dfs(trie[s][i], 1);
cout << "-\n";
}
cout << (char)(md + 'a') << "\n";
dfs(trie[s][md], 0);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
fill(trie[0], trie[0] + 26, -1);
for (int x = 0; x < n; x++) {
string s;
cin >> s;
int p = 0;
for (int i = 0; i < s.size(); i++) {
int d = s[i] - 'a';
if (trie[p][d] == -1) {
fill(trie[ptr], trie[ptr] + 26, -1);
trie[p][d] = ptr++;
}
dep[p] = max(dep[p], (int)s.size() - i);
p = trie[p][d];
}
w[p] = 1;
}
cout << ptr * 2 - 2 - dep[0] + n << "\n";
dfs(0, 0);
}