#define ll long long
#define subINF numeric_limits<ll>::min()/2
#define pll pair<ll, ll>
#define ppl pair<pll, ll>
#define BITS 32
#include <bits/stdc++.h>
using namespace std;
void dfs(vector<bool>& mark, vector<vector<ll>>& trie, vector<char>& output, ll node, vector<ll>& h)
{
if(mark[node])
output.push_back('P');
vector<pll> child(0);
for(ll i = 0; i < 26; i++)
{
if(trie[node][i] != -1)
{
child.push_back({h[trie[node][i]], i});
}
}
sort(child.begin(), child.end());
for(pll p : child)
{
ll i = p.second;
output.push_back((char) (((int) 'a') + i));
dfs(mark, trie, output, trie[node][i], h);
}
output.push_back('-');
}
void preDFS(vector<vector<ll>>& trie, ll node, vector<ll>& h)
{
h[node] = 0;
for(ll i = 0; i < 26; i++)
{
if(trie[node][i] != -1)
{
preDFS(trie, trie[node][i], h);
h[node] = max(h[node], h[trie[node][i]]);
}
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
ll n;
cin>>n;
vector<vector<ll>> trie(1, vector<ll> (26, -1));
vector<bool> mark(1, false);
for(ll i = 0; i < n; i++)
{
string s;
cin>>s;
ll k = 0;
for(char c : s)
{
int ind = (int) c - (int) 'a';
if(trie[k][ind] == -1)
{
trie[k][ind] = trie.size();
mark.push_back(false);
trie.push_back({});
trie.back().assign(26, -1);
}
k = trie[k][ind];
}
mark[k] = true;
}
vector<ll> h(trie.size(), 0);
preDFS(trie, 0, h);
vector<char> output(0);
dfs(mark, trie, output, 0, h);
while(output.back() == '-')
output.pop_back();
cout<<output.size()<<"\n";
for(char c : output)
cout<<c<<"\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... |