#include <bits/stdc++.h>
using namespace std;
struct Node
{
int nxt[26];
Node(){
fill(nxt, nxt+26, -1);
}
};
vector <bool> ending(5e5 + 5, false);
vector <Node> trie(1);
void Insert(string s)
{
int u = 0;
for(auto x : s){
int c = x - 'a';
if(trie[u].nxt[c] == -1){
trie[u].nxt[c] = trie.size();
Node newnode;
trie.push_back(newnode);
}
u = trie[u].nxt[c];
}
ending[u] = true;
}
vector <string> ans(26);
void dfs(int u, int r)
{
if(ending[u]) ans[r] += 'P';
for(int i = 0; i < 26; i++){
if(trie[u].nxt[i] != -1){
ans[r] += i + 'a';
dfs(trie[u].nxt[i],r);
}
}
ans[r] += '-';
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n; cin >> n;
for(int i = 0; i < n; i++){
string s; cin >> s;
Insert(s);
}
vector <int> cnt(26);
for(int i = 0; i < 26; i++){
if(trie[0].nxt[i] != -1){
ans[i].push_back(i + 'a');
dfs(trie[0].nxt[i], i);
for(int j = ans[i].size()-1; j >= 0; j--){
if(ans[i][j] != '-'){
cnt[i] = ans[i].size()-j-1;
break;
}
}
}
}
int longest = 0;
int sum = 0;
for(int i = 0; i < 26; i++){
sum += ans[i].size();
if(cnt[longest] < cnt[i]) longest = i;
}
cout << sum-cnt[longest]<<"\n";
for(int i = 0; i < 26; i++){
if(i == longest) continue;
for(int j = 0; j < ans[i].size(); j++) cout << ans[i][j] << "\n";
}
for(int i = 0; i < ans[longest].size() - cnt[longest]; i++){
cout << ans[longest][i] << "\n";
}
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... |