#include<bits/stdc++.h>
using namespace std;
using ll=long long;
#define pb push_back
const ll N=5e5+1;
ll ch[N][26],term[N],nd=1;
vector<char>ans;
void ins(string s){
ll u=1;
for(char&c:s){
ll x=c-'a';
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');
for(int i=0;i<26;++i){
if(ch[u][i])dfs(ch[u][i],i);
}
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);
n=ans.size();
ll sz=0,len=0,mx=-1,id=-1;
for(int i=0;i<n;++i){
sz+=(ans[i]=='-'?-1:(ans[i]!='P'));
if(ans[i]=='-')++len;
else len=0;
if(!sz){
if(len>mx){
mx=len;
id=i;
}
}
}
vector<char>ans2=ans;
if(id!=-1){
ans2.clear();
for(int i=id+1;i<n;++i)
ans2.push_back(ans[i]);
for(int i=0;i<=id;++i)
ans2.push_back(ans[i]);
}
while(ans2.size()&&ans2.back()=='-')
ans2.pop_back();
cout<<ans2.size()<<'\n';
for(char&c:ans2)
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... |