#include <bits/stdc++.h>
using namespace std;
#define REP(i, n) for (int i = 0, _n = (n); i < _n; ++i)
#define FORE(i, v) for (__typeof((v).begin()) i = (v).begin(); i != (v).end(); ++i)
#define file(name) if (fopen(name".inp", "r")) { freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); }
struct Node {
Node *child[26];
int terminal;
Node() {
REP(i, 26) child[i] = nullptr;
terminal = 0;
}
};
int N;
string maxS;
Node *root = new Node();
void addString(const string &s) {
Node *p = root;
FORE(it, s) {
if (p->child[*it - 'a'] == nullptr) p->child[*it - 'a'] = new Node();
p = p->child[*it - 'a'];
}
p->terminal++;
}
void init(void) {
cin >> N;
REP(i, N) {
string s; cin >> s;
if (maxS.size() < s.size()) maxS = s;
addString(s);
}
}
string res;
void dfs(Node *p, int depth, bool type) {
REP(i, p->terminal) res += 'P';
if (depth == maxS.size()) return;
if (type) {
REP(i, 26) if (p->child[i] != nullptr && i != maxS[depth] - 'a') {
res += char(i + 'a');
dfs(p->child[i], depth + 1, 0);
res += '-';
}
res += maxS[depth];
dfs(p->child[maxS[depth] - 'a'], depth + 1, 1);
} else {
REP(i, 26) if (p->child[i] != nullptr) {
res += char(i + 'a');
dfs(p->child[i], depth + 1, 0);
res += '-';
}
}
}
void process(void) {
dfs(root, 0, 1);
cout << res.size() << '\n' << res;
}
int main(void) {
ios_base::sync_with_stdio(false); cin.tie(nullptr); // cout.tie(nullptr);
file("type-printer");
init();
process();
return (0^0);
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSAgICAgICAgICAgUkVQKGksIG4pICBmb3IgKGludCBpID0gMCwgX24gPSAobik7IGkgPCBfbjsgKytpKQojZGVmaW5lICAgICAgICAgIEZPUkUoaSwgdikgIGZvciAoX190eXBlb2YoKHYpLmJlZ2luKCkpIGkgPSAodikuYmVnaW4oKTsgaSAhPSAodikuZW5kKCk7ICsraSkKI2RlZmluZSAgICAgICAgICBmaWxlKG5hbWUpICBpZiAoZm9wZW4obmFtZSIuaW5wIiwgInIiKSkgeyBmcmVvcGVuKG5hbWUiLmlucCIsICJyIiwgc3RkaW4pOyBmcmVvcGVuKG5hbWUiLm91dCIsICJ3Iiwgc3Rkb3V0KTsgfQoKc3RydWN0IE5vZGUgewoJTm9kZSAqY2hpbGRbMjZdOwoJaW50IHRlcm1pbmFsOwoJTm9kZSgpIHsKCQlSRVAoaSwgMjYpIGNoaWxkW2ldID0gbnVsbHB0cjsKCQl0ZXJtaW5hbCA9IDA7Cgl9Cn07CgppbnQgTjsKc3RyaW5nIG1heFM7Ck5vZGUgKnJvb3QgPSBuZXcgTm9kZSgpOwoKdm9pZCBhZGRTdHJpbmcoY29uc3Qgc3RyaW5nICZzKSB7CglOb2RlICpwID0gcm9vdDsKCUZPUkUoaXQsIHMpIHsKCQlpZiAocC0+Y2hpbGRbKml0IC0gJ2EnXSA9PSBudWxscHRyKSBwLT5jaGlsZFsqaXQgLSAnYSddID0gbmV3IE5vZGUoKTsKCQlwID0gcC0+Y2hpbGRbKml0IC0gJ2EnXTsKCX0KCXAtPnRlcm1pbmFsKys7Cn0KCnZvaWQgaW5pdCh2b2lkKSB7CgljaW4gPj4gTjsKCVJFUChpLCBOKSB7CgkJc3RyaW5nIHM7IGNpbiA+PiBzOwoJCWlmIChtYXhTLnNpemUoKSA8IHMuc2l6ZSgpKSBtYXhTID0gczsKCQlhZGRTdHJpbmcocyk7Cgl9Cn0KCnN0cmluZyByZXM7Cgp2b2lkIGRmcyhOb2RlICpwLCBpbnQgZGVwdGgsIGJvb2wgdHlwZSkgewoJUkVQKGksIHAtPnRlcm1pbmFsKSByZXMgKz0gJ1AnOwoJaWYgKGRlcHRoID09IG1heFMuc2l6ZSgpKSByZXR1cm47CglpZiAodHlwZSkgewoJCVJFUChpLCAyNikgaWYgKHAtPmNoaWxkW2ldICE9IG51bGxwdHIgJiYgaSAhPSBtYXhTW2RlcHRoXSAtICdhJykgewoJCQlyZXMgKz0gY2hhcihpICsgJ2EnKTsKCQkJZGZzKHAtPmNoaWxkW2ldLCBkZXB0aCArIDEsIDApOwoJCQlyZXMgKz0gJy0nOwoJCX0KCQlyZXMgKz0gbWF4U1tkZXB0aF07CgkJZGZzKHAtPmNoaWxkW21heFNbZGVwdGhdIC0gJ2EnXSwgZGVwdGggKyAxLCAxKTsKCX0gZWxzZSB7CgkJUkVQKGksIDI2KSBpZiAocC0+Y2hpbGRbaV0gIT0gbnVsbHB0cikgewoJCQlyZXMgKz0gY2hhcihpICsgJ2EnKTsKCQkJZGZzKHAtPmNoaWxkW2ldLCBkZXB0aCArIDEsIDApOwoJCQlyZXMgKz0gJy0nOwoJCX0KCX0KfQoKdm9pZCBwcm9jZXNzKHZvaWQpIHsKCWRmcyhyb290LCAwLCAxKTsKCWNvdXQgPDwgcmVzLnNpemUoKSA8PCAnXG4nIDw8IHJlczsKfQoKaW50IG1haW4odm9pZCkgewoJaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IGNpbi50aWUobnVsbHB0cik7IC8vIGNvdXQudGllKG51bGxwdHIpOwoJZmlsZSgidHlwZS1wcmludGVyIik7Cglpbml0KCk7Cglwcm9jZXNzKCk7CglyZXR1cm4gKDBeMCk7Cn0=