#include <bits/stdc++.h>
using namespace std;
const int N = 5e5 + 5;
string ans;
struct node {
bool end = false;
map<char, int> nxt;
int &operator[](char c) {
return nxt[c];
}
};
struct trie {
int d[N];
vector<node> t;
int new_node() {
t.push_back(node());
return t.size() - 1;
}
trie() {
t.clear();
new_node();
}
void insert(string &s) {
int u = 0;
for (auto &c: s) {
if (!t[u].nxt.count(c)) {
t[u][c] = new_node();
}
u = t[u][c];
}
t[u].end = true;
}
void dfs0(int u) {
d[u] = 1;
for (char c = 'a'; c <= 'z'; c++) {
if (t[u].nxt.count(c)) {
dfs0(t[u][c]);
d[u] = max(d[u], d[t[u][c]] + 1);
}
}
}
void dfs(int u) {
if (t[u].end) {
ans += 'P';
}
for (char c = 'a'; c <= 'z'; c++) {
if (t[u].nxt.count(c) && d[t[u][c]] + 1 < d[u]) {
ans += c;
dfs(t[u][c]);
}
}
for (char c = 'a'; c <= 'z'; c++) {
if (t[u].nxt.count(c) && d[t[u][c]] + 1 == d[u]) {
ans += c;
dfs(t[u][c]);
}
}
ans += '-';
}
};
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
trie t;
int n;
cin >> n;
for (int i = 0; i < n; i++) {
string s;
cin >> s;
t.insert(s);
}
t.dfs0(0);
t.dfs(0);
while (ans.back() == '-') {
ans.pop_back();
}
cout << ans.size() << '\n';
for (auto &c: ans) {
cout << c << '\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... |