#include <bits/stdc++.h>
#define pii pair <int , int>
#define fi first
#define se second
#include <cstdint>
using namespace std;
const int maxn = 5e5 + 7;
const int mod = 1e9 + 7;
struct node
{
int cnt , child[26];
node(){
cnt = 0;
for(int i = 0; i < 26; i++) child[i] = -1;
}
};
vector <node> trie;
vector <int> g[maxn];
int maxdep[maxn];
char val[maxn];
int ans = 0;
void ADD(string s)
{
int cur = 0;
maxdep[0] = max(maxdep[0] , (int)s.size() + 1);
for(char ch: s)
{
int c = ch - 'a';
if(trie[cur].child[c] == -1)
{
trie[cur].child[c] = (int)trie.size();
g[cur].push_back((int)trie.size());
trie.push_back(node());
ans++;
}
cur = trie[cur].child[c];
maxdep[cur] = max(maxdep[cur] , (int)s.size()+1);
val[cur] = ch;
}
trie[cur].cnt++;
}
int remain;
void dfs(int u)
{
if(u != 0) cout << val[u] << '\n';
while(trie[u].cnt > 0 && u != 0)
{
cout << 'P' << '\n';
trie[u].cnt--;
remain--;
}
vector <pii> order;
for(int i = 0; i < 26; i++)
{
order.push_back({maxdep[trie[u].child[i]] , trie[u].child[i]});
}
sort(order.begin() , order.end());
for(pii tmp: order)
{
int v = tmp.se;
if(v == -1) continue;
dfs(v);
}
if(remain > 0) cout << '-' << '\n';
}
int n;
void solve()
{
cin >> n; remain = n;
trie.push_back(node());
for(int i = 1; i <= n; i++)
{
string ss; cin >> ss; ADD(ss); //cout << ans << '\n';
}
cout << ans*2 - (maxdep[0] - 1) + n << '\n';
dfs(0);
}
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
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... |