#include<bits/stdc++.h>
using namespace std;
int tree[650130][26],x=1,mx[650130];
bool B[650130];
int sz;
string s;
vector<char> ans;
void in(int nd,int id){
if(id==s.size()){
B[nd]=true;
mx[nd]=max(mx[nd],sz);
return;
}
if(!tree[nd][s[id]-'a']) tree[nd][s[id]-'a']=x++;
in(tree[nd][s[id]-'a'],id+1);
mx[nd]=max(mx[nd],sz);
}
void out(int nd){
if(B[nd]){
ans.push_back('P');
}
vector<pair<int,int> > p;
for(int i=0; i<26; i++){
if(tree[nd][i]){
p.push_back({mx[tree[nd][i]],i});
}
}
sort(p.begin(),p.end());
for(int i=0; i<p.size(); i++){
ans.push_back(char(p[i].second+97));
out(tree[nd][p[i].second]);
ans.push_back('-');
}
}
int main(){
int n;
cin>>n;
for(int i=0; i<n; i++){
cin>>s;
sz=s.size();
in(0,0);
}
out(0);
while(ans[ans.size()-1]=='-'){
ans.pop_back();
}
cout<<ans.size()<<'\n';
for(int i=0; i<ans.size(); i++){
cout<<ans[i]<<"\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... |