#include <bits/stdc++.h>
using namespace std;
#define endl "\n"
#define fi first
#define se second
const int MAXN = 2000005;
int n;
int tr[MAXN][26];
int cn[MAXN];
int v = 1;
vector<char> operations;
string longestWord;
int totalOps = 0;
int idx = -1;
int longestWordIndex[25];
void addWord(const string &s) {
int cur = 0;
for (int i = 0; i < (int)s.size(); i++) {
int c = s[i] - 'a';
if (!tr[cur][c]) {
tr[cur][c] = v++;
}
cur = tr[cur][c];
if (i == (int)s.size() - 1) {
cn[cur]++;
}
}
}
void dfs(int ch, int cur) {
idx++;
operations.push_back('-');
totalOps++;
if (idx < (int)longestWord.size() && longestWordIndex[idx] == 0) {
int nxt = tr[cur][longestWord[idx] - 'a'];
longestWordIndex[idx] = nxt;
dfs(longestWord[idx] - 'a', nxt);
}
for (int i = 0; i < 26; i++) {
if (!tr[cur][i]) continue;
if (idx < (int)longestWord.size() && tr[cur][i] == longestWordIndex[idx]) continue;
dfs(i, tr[cur][i]);
}
totalOps++;
if (cn[cur]) {
totalOps++;
operations.push_back('P');
}
operations.push_back(char(ch + 'a'));
idx--;
}
void solve() {
cin >> n;
vector<pair<int, string>> words(n);
for (int i = 0; i < n; i++) {
cin >> words[i].se;
words[i].fi = words[i].se.size();
}
sort(words.begin(), words.end());
for (auto &w : words) {
addWord(w.se);
}
longestWord = words.back().se;
dfs(0, 0);
operations.pop_back();
reverse(operations.begin(), operations.end());
int resultOps = totalOps - longestWord.size() - 2;
cout << resultOps << endl;
for (int i = 0; i < resultOps; i++) {
cout << operations[i] << endl;
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
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... |