#include<bits/stdc++.h>
using namespace std;
using ll=long long;
#define pb push_back
const ll N=5e5+1;
ll ch[N][26],duz[N],term[N],nd=1;
vector<char>ans;
void ins(string s){
ll u=1;
for(int i=0;i<s.size();++i){
ll x=s[i]-'a';
duz[u]=max(duz[u],(ll)s.size()-i);
if(!ch[u][x])ch[u][x]=++nd;
u=ch[u][x];
}
term[u]=1;
}
void dfs(ll u,ll sl){
if(sl!=-1)ans.pb(sl+'a');
if(term[u])ans.pb('P');
ll nx=69;
for(int i=0;i<26;++i)
if(ch[u][i]&&duz[u]==duz[ch[u][i]]+1)nx=i;
for(int i=0;i<26;++i)
if(ch[u][i]&&i!=nx)dfs(ch[u][i],i);
if(nx<69)dfs(ch[u][nx],nx);
if(u!=1)ans.pb('-');
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
ll n;cin>>n;
while(n--){
string s;
cin>>s;
ins(s);
}
dfs(1,-1);
while(ans.size()&&ans.back()=='-')
ans.pop_back();
cout<<ans.size()<<'\n';
for(char&c:ans)
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... |