#include <bits/stdc++.h>
#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--;
}
for(int v: g[u])
{
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';
}
for(int i = 0; i < maxn; i++)
{
if(g[i].empty()) continue;
int ok = 0;
for(int v: g[i]) ok = max(ok , maxdep[v]);
for(int j = 0; j < g[i].size(); j++)
{
if(maxdep[g[i][j]] == ok)
{
g[i].push_back(g[i][j]);
g[i].erase(g[i].begin() + j);
break;
}
}
}
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... |