#include <bits/stdc++.h>
#define emb emplace_back
using namespace std;
const int N = 500005;
struct Trie {
int child[26];
int cnt = 0;
int h = 0;
} tr[N];
int node_cnt = 1;
void add(int root, const string &s) {
int cur = root;
for (char x : s) {
int c = x - 'a';
if (tr[cur].child[c] == 0) {
tr[cur].child[c] = node_cnt++;
}
cur = tr[cur].child[c];
}
tr[cur].cnt++;
}
vector<char> res;
void query1(int root) {
while (tr[root].cnt--) {
res.emb('P');
}
int u = -1, v = -1;
for (int i = 0; i < 26; ++i) {
if (tr[root].child[i] == 0) continue;
if (tr[tr[root].child[i]].h > u) {
u = tr[tr[root].child[i]].h;
v = i;
}
}
for (int i = 0; i < 26; ++i) {
if (tr[root].child[i] == 0 || i == v) continue;
res.emb('a' + i);
query1(tr[root].child[i]);
res.emb('-');
}
if (v != -1) {
res.emb('a' + v);
query1(tr[root].child[v]);
res.emb('-');
}
}
void query(int root, int u) {
tr[root].h = max(tr[root].h, u);
for (int i = 0; i < 26; ++i) {
if (tr[root].child[i] == 0) continue;
query(tr[root].child[i], u + 1);
tr[root].h = max(tr[root].h, tr[tr[root].child[i]].h);
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n;
string s;
cin >> n;
for (int i = 1; i <= n; ++i) {
cin >> s;
add(0, s);
}
query(0, 0);
query1(0);
while (!res.empty() && res.back() == '-') res.pop_back();
cout << res.size() << '\n';
for (char x : res) cout << x << '\n';
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |