#include <bits/stdc++.h>
using namespace std;
#define __ ios::sync_with_stdio(0); cin.tie(NULL);
#define pb push_back
#define int long long
#define rep(i,n) for(int i=0;i<n;i++)
#define all(x) x.begin(),x.end()
const int mxn = 5010;
const int mxw = 50000+10;
const int INF = 1e18;
const int mod = 1e9+7;
vector<vector<int>> trie(mxw,vector<int>(26));
int cnt = 0;
vector<int> stop(mxw);
void insert(string s){
int node = 0;
for(char c : s){
if(trie[node][c-'a'] == 0) {
trie[node][c-'a'] = ++cnt;
}
node = trie[node][c-'a'];
}
stop[node] = 1;
}
vector<char> ans;
int letter = 0;
int comp = 0;
int n;
void dfs(int s){
if(stop[s]) {
ans.pb('P');
comp++;
}
for(int i=0;i<26;i++){
if(i == letter && s == 0) continue;
if(trie[s][i]) {
ans.pb(char(i+'a'));
dfs(trie[s][i]);
ans.pb('-');
}
}
}
void dfs2(int s){
if(stop[s]) {
ans.pb('P');
comp++;
}
for(int i=0;i<26;i++){
if(trie[s][i]){
ans.pb(char(i+'a'));
dfs2(trie[s][i]);
if(comp != n) ans.pb('-');
}
}
}
void solve(){
cin >> n;
vector<string> words(n);
rep(i,n){
cin >> words[i];
}
sort(all(words),[](const auto p1, const auto p2){
if(p1.size() == p2.size()) return p1 < p2;
return p1.size() < p2.size();
});
rep(i,n) insert(words[i]);
string longest = words.back();
letter = longest.front()-'a';
// cout << char(letter+'a') << endl;
dfs(0);
ans.pb(char(letter+'a'));
dfs2(trie[0][letter]);
cout << ans.size() << endl;
for(auto u : ans) cout << u << endl;
}
signed main(){ __
int T = 1;
// cin >> T;
while(T--){
solve();
}
return 0;
}
| # | 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... |