#include<bits/stdc++.h>
using namespace std;
#define int long long
struct node {
node *adj[26];
int dep;
int cnt_end;
node () {
for (int i = 0 ; i < 26 ; i++) adj[i] = 0;
dep = 0;
cnt_end = 0;
}
};
node *root = new node;
void Insert (string s) {
node *cur = root;
for (char c : s) {
// cur to cur -> adj[c]
if (!cur -> adj[c - 'a']) {
cur -> adj[c - 'a'] = new node;
}
cur = cur -> adj[c - 'a'];
}
cur -> cnt_end++;
}
void dfs1 (node *cur) {
for (int i = 0 ; i < 26 ; i++) {
if (cur -> adj[i]) {
cur -> adj[i] -> dep = cur -> dep + 1;
dfs1(cur -> adj[i]);
}
}
}
string ans;
void dfs2 (node *cur) {
while (cur -> cnt_end--) {
ans += 'P';
}
int m = -1;
for (int i = 0 ; i < 26 ; i++) {
if (cur -> adj[i]) {
if (m == -1 || cur -> adj[i] -> dep > cur -> adj[m] -> dep) {
m = i;
}
}
}
for (int i = 0 ; i < 26 ; i++) {
if (i != m && cur -> adj[i]) {
ans += 'a' + i;
dfs2(cur -> adj[i]);
ans += '-';
}
}
if (m != -1) {
ans += 'a' + m;
dfs2(cur -> adj[m]);
ans += '-';
}
}
signed main () {
int n;
cin >> n;
for (int i = 0 ; i < n ; i++) {
string s; cin >> s;
Insert(s);
}
dfs1(root);
dfs2(root);
while (ans.back() == '-') ans.pop_back();
for (char c : ans) cout << c << '\n';
}