제출 #1196640

#제출 시각아이디문제언어결과실행 시간메모리
1196640nikolashamiType Printer (IOI08_printer)C++20
100 / 100
112 ms99056 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...