// UUID: 6be76404-ee2b-4178-931e-0c8362c1868c
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
using pll=pair<ll, ll>;
const ll meret=5e5;
pair<ll, string> longest={0, ""};
vector<vector<ll>> trie(meret, vector<ll> (26));
vector<ll> cnt(meret);
ll nodes=0;
void insert(string s){
ll curr=0;
for (auto& c:s){
if (trie[curr][c-'a']==0) trie[curr][c-'a']=++nodes;
curr=trie[curr][c-'a'];
}
cnt[curr]++;
}
void dfs(ll curr){
for (ll i=0; i<cnt[curr]; i++) cout << "P\n";
for (ll i=0; i<26; i++){
if (trie[curr][i]!=0){
cout << char(i+'a') << '\n';
dfs(trie[curr][i]);
}
}
cout << "-\n";
}
void out(){
ll curr=0;
for (auto& c:longest.second){
for (ll i=0; i<26; i++)
if (i!=c-'a' && trie[curr][i]!=0){
cout << char(i+'a') << '\n';
dfs(trie[curr][i]);
}
cout << c << '\n';
curr=trie[curr][c-'a'];
for (ll i=0; i<cnt[curr]; i++) cout << "P\n";
}
}
int main() {
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
ll n; cin >> n;
for (ll i=0; i<n; i++){
string s; cin >> s; insert(s);
if (s.size()>longest.first){
longest.first=s.size();
longest.second=s;
}
}
cout << nodes*2-longest.first+n << '\n';
out();
}
| # | 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... |