#include<iostream>
#include<string.h>
#include<string>
#include<vector>
#include<set>
using namespace std;
struct tree{
tree* ch[26];
int cnt;
int f;
};
tree* root;
vector<char> ans;
void in(string s){
tree* nd=root;
for(int i=0; i<s.size(); i++){
if(nd->ch[s[i]-'a']==NULL){
nd->ch[s[i]-'a']=new tree();
}
nd=nd->ch[s[i]-'a'];
nd->cnt=max(nd->cnt,(int)(s.size()-i));
}
nd->f++;
}
void out(tree* nd){
for(int i=0; i<nd->f; i++){
ans.push_back('P');
}
vector<pair<int,int> > p;
for(int i=0; i<26; i++){
if(nd->ch[i]!=NULL){
p.push_back({nd->ch[i]->cnt,i});
}
}
sort(p.begin(),p.end());
for(int i=0; i<p.size(); i++){
ans.push_back(char(p[i].second+97));
out(nd->ch[p[i].second]);
ans.push_back('-');
}
}
int main(){
root=new tree();
int n;
cin>>n;
for(int i=0; i<n; i++){
string s;
cin>>s;
in(s);
}
out(root);
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... |