#include "bits/stdc++.h"
using namespace std;
#define ll long long
#define SZ(s) (int)s.size()
#define ff first
#define ss second
const int N = (3e4 + 5);
const int M = 1e9 + 7;
int v[N * 26][26], T, cnt[N * 26], sz[N * 26];
string s;
vector <char> ans;
void upd(int nd, int ind) {
if(ind == SZ(s)) {
cnt[nd]++;
sz[nd] = max(sz[nd], SZ(s));
return;
}
int t = (s[ind] - 'a');
if(!v[nd][t]) v[nd][t] = ++T;
upd(v[nd][t], ind+1);
sz[nd] = max(sz[nd], sz[v[nd][t]]);
}
void fnd(int nd) {
for(int i = 0; i < cnt[nd]; i++) {
ans.push_back('P');
}
int mx = 0, x = -1, c;
for(int i = 0; i < 26; i++) {
if(v[nd][i]) {
if(sz[v[nd][i]] > mx) {
if(~x) {
ans.push_back(char('a' + c));
fnd(x);
}
mx = sz[v[nd][i]];
x = v[nd][i];
c = i;
}
else {
ans.push_back(char('a' + i));
fnd(v[nd][i]);
}
}
}
if(~x) {
ans.push_back(char('a' + c));
fnd(x);
}
ans.push_back('-');
}
int main(){
ios_base::sync_with_stdio(false); cin.tie(nullptr);
int n;
cin >> n;
while(n--) {
cin >> s;
upd(0, 0);
}
fnd(0);
while(SZ(ans) and ans.back() == '-')
ans.pop_back();
cout << SZ(ans) << "\n";
for(auto i : ans) {
cout << i << "\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... |