#include <bits/stdc++.h>
using namespace std;
#define ll long long
vector<vector<int>> tr (5e5+3, vector<int>(26, -1));
vector<int> m (5e5+3, 0);
vector<bool> czy (5e5+3, 0);
int trsize = 1;
void add(int v, string &s, int i) {
if (i == (int)s.size()) {
czy[v] = 1;
return;
}
if (tr[v][s[i]-'a'] == -1) {
tr[v][s[i]-'a'] = trsize;
trsize++;
}
m[tr[v][s[i]-'a']] = max(m[tr[v][s[i]-'a']], (int)s.size());
add(tr[v][s[i]-'a'], s, i+1);
}
void print(int v, string &s) {
if (czy[v]) {
s.push_back('P');
}
vector<pair<int, int>> g;
for (int i = 0; i < 26; i++) {
if (tr[v][i] != -1) {
g.push_back({m[tr[v][i]], i});
}
}
sort(g.begin(), g.end());
for (auto i : g) {
s.push_back('a'+i.second);
print(tr[v][i.second], s);
s.push_back('-');
}
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int n;
cin >> n;
for (int i = 0; i < n; i++) {
string s;
cin >> s;
add(0, s, 0);
}
string s;
print(0, s);
while (s[s.size()-1] == '-') {
s.pop_back();
}
cout << s.size() << '\n';
for (char c : s) {
cout << c << '\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... |