#include <bits/stdc++.h>
using namespace std;
#define ll long long
struct vert {
bool s = 0;
array<int, 26> mp = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
int o = -1;
char c = '_';
};
int add(int v, vector<vert> &tr, string &s, int i) {
if (i == (int)s.size()) {
tr[v].s = 1;
return v;
}
if (tr[v].mp[s[i]-'a'] == -1) {
tr[v].mp[s[i]-'a'] = tr.size();
tr.push_back(vert());
tr[tr.size()-1].o = v;
tr[tr.size()-1].c = s[i];
}
return add(tr[v].mp[s[i]-'a'], tr, s, i+1);
}
void print(int v, vector<vert> &tr, string &s) {
vector<bool> odw (tr.size(), 0);
vector<queue<int>> q (tr.size());
for (int i = 0; i < (int)tr.size(); i++) {
for (int j = 0; j < 26; j++) {
if (tr[i].mp[j] != -1) {
q[i].push(tr[i].mp[j]);
}
}
}
while (v != -1) {
if (tr[v].s) {
s.push_back('P');
tr[v].s = 0;
}
if (q[v].empty()) {
s.push_back(tr[v].c);
odw[v] = 1;
v = tr[v].o;
continue;
}
int x = q[v].front();
q[v].pop();
if (!odw[x]) {
s.push_back('-');
v = x;
}
}
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int n;
cin >> n;
pair<int, int> a = {0, 0};
vector<vert> tr (1);
for (int i = 0; i < n; i++) {
string s;
cin >> s;
a = max(a, {s.size(), add(0, tr, s, 0)});
}
string s;
print(a.second, tr, s);
if (s[s.size()-1] == '_') {
s.pop_back();
}
cout << s.size() << '\n';
reverse(s.begin(), s.end());
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... |