// UUID: 55a0e178-e0d8-4cc0-a388-1d2d5ff4eb80
#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> trie(25000*20+1, vector<int>(26, -1));
vector<bool> last(25000*20+1, false);
vector<bool> iswordend(25000*20+1, false);
vector<char> ops;
int nodes = 0;
void insert(string s, bool l){
int node = 0;
for(char c : s){
if (trie[node][c-'a'] == -1) trie[node][c-'a'] = ++nodes;
node = trie[node][c-'a'];
last[node] = l || last[node];
}
iswordend[node] = true;
}
void dfs(int node){
if(iswordend[node]) ops.push_back('P');
int thelast = -1;
for(int i = 0; i < 26; i++) {
if (trie[node][i] == -1) continue;
if(last[trie[node][i]]) {
thelast = i;
continue;
}
ops.push_back((char) i + 'a');
dfs(trie[node][i]);
ops.push_back('-');
}
if (thelast != -1) {
ops.push_back((char) thelast + 'a');
dfs(trie[node][thelast]);
}
}
void solve() {
int n;
cin >> n;
vector<string> s(n);
string m = "";
for(int i = 0; i < n; i++) {
cin >> s[i];
if (m.size() < s[i].size()) m = s[i];
}
for (int i = 0; i < n; i++) {
insert(s[i], s[i] == m);
}
dfs(0);
for(int i = ops.size()-1; i >= 0; i--) {
if (ops[i] != '-') break;
ops.pop_back();
}
cout << ops.size() << "\n";
for (char i : ops) cout << i << "\n";
return;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t = 1;
//cin >> t;
while (t--) {
solve();
}
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... |