#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define endl "\n";
#define all(x) x.begin(), x.end()
#define int long long
const int MOD = 1e9 + 7;
const ll INF = 1e18;
const int MAXLEN = 25*25000;
int trie[MAXLEN][26];
bool finish[MAXLEN];
int nodeCount;
vector<char> ans;
void insert(string& s) {
int curNode = 0;
for (char c : s) {
if (trie[curNode][c-'a'] == 0) {
trie[curNode][c-'a'] = ++nodeCount;
}
curNode = trie[curNode][c-'a'];
}
finish[curNode] = true;
}
int maxDepth(int node) {
int d = 0;
for (int i = 0; i < 26; i++) {
if (trie[node][i] != 0) {
d = max(d, 1 + maxDepth(trie[node][i]));
}
}
return d;
}
void traverse(int node) {
if (finish[node]) {
ans.push_back('P');
}
int maxD = 0;
int maxDIndex = -1;
for (int i = 0; i < 26; i++) {
if (trie[node][i] == 0) continue;
int d = maxDepth(trie[node][i]);
if (d > maxD) {
maxD = d;
maxDIndex = i;
}
}
for (int i = 0; i < 26; i++) {
if (trie[node][i] == 0 || i == maxDIndex) continue;
ans.push_back((char) (i + 'a'));
traverse(trie[node][i]);
}
if (maxDIndex != -1) {
ans.push_back((char) ('a' + maxDIndex));
traverse(trie[node][maxDIndex]);
}
ans.push_back('-');
}
void solve() {
int n; cin >> n;
nodeCount = 0;
for (int i = 0; i < n; i++) {
string s; cin >> s;
insert(s);
}
traverse(0);
while (ans.back() == '-') {
ans.pop_back();
}
cout << ans.size() << endl;
for (char c : ans) {
cout << c << endl;
}
}
signed main() {
ios::sync_with_stdio(0); cin.tie(NULL);
// freopen("island.in", "r", stdin);
// freopen("ans.out", "w", stdout);
ll t = 1; //cin >> t;
while (t--) {
solve();
}
}
| # | 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... |