// UUID: 96a25cc1-e291-4669-9223-5e82ba9535dc
#include <bits/stdc++.h>
using namespace std;
vector<int> sam(26, 0);
vector<bool> e = {false};
vector<vector<int>> trie = {sam};
string lst, ans;
void add(string s) {
if (lst.size() < s.size()) lst = s;
int node = 0;
for (char c : s) {
int i = c - 'a';
if (!trie[node][i]) {
trie[node][i] = trie.size();
trie.push_back(sam);
e.push_back(false);
}
node = trie[node][i];
}
e[node] = true;
}
void dfs(int node, int lev, bool f) {
if (e[node]) ans.push_back('P');
for (int i = 0; i < 26; i++) {
if (!trie[node][i]) continue;
if (f && lst[lev] == i + 'a') continue;
ans.push_back(i + 'a');
dfs(trie[node][i], lev + 1, false);
}
if (f && lev == lst.size()) return;
if (f) {
ans.push_back(lst[lev]);
dfs(trie[node][lst[lev] - 'a'], lev + 1, true);
}
else ans.push_back('-');
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int n;
cin >> n;
while (n--) {
string s;
cin >> s;
add(s);
}
dfs(0, 0, true);
cout << ans.size() << "\n";
for (char 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... |