// UUID: 6b28326b-85e8-4fe9-8796-61663562b6df
#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> trie(2.5e5+1, vector<int>(26, 0));
vector<bool> word_end(2.5e5+1, false);
vector<int> utso(2.5e5+1, -1);
vector<char>out;
int cmt = 1;
void add(string word, bool last){
int x = 1;
for(char c: word){
int j = c - 'a';
if(!trie[x][j]){
cmt++;
trie[x][j] = cmt;
}
if(last) utso[x] = j;
x = trie[x][j];
}
word_end[x] = true;
}
void dfs(int csucs){
if(word_end[csucs]) out.push_back('P');
for(int i = 0; i < 26; i++){
if(utso[csucs] == i || trie[csucs][i] == 0){
continue;
}
out.push_back(char(i+'a'));
dfs(trie[csucs][i]);
}
if(utso[csucs] != -1){
out.push_back(char(utso[csucs]+'a'));
dfs(trie[csucs][utso[csucs]]);
}
out.push_back('-');
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int n;
cin >> n;
string mx_word = "";
for(int i = 0; i < n; i++){
string s;
cin >> s;
add(s, false);
if(s.size() > mx_word.size()){
mx_word = s;
}
}
add(mx_word, true);
dfs(1);
cout << out.size()-mx_word.size()-1 << "\n";
for(int i = 0; i < out.size()-mx_word.size()-1; i++){
cout << out[i] << "\n";
}
}
| # | 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... |