#include <bits/stdc++.h>
using namespace std;
#define all(v) v.begin(), v.end()
#define rall(v) v.rbegin(), v.rend()
#define int ll
typedef long long ll;
#define Ishouldbeunrated ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
struct Trie {
struct Node {
int ch[26] = {0};
int f = 0;
};
vector<Node> trie;
Trie() { trie.emplace_back(); }
void insert(const string &s) {
int node = 0;
for (char c : s) {
int i = c - 'a';
if (!trie[node].ch[i]) {
trie[node].ch[i] = trie.size();
trie.emplace_back();
}
node = trie[node].ch[i];
++trie[node].f;
}
}
vector<char> op;
void print(int node) {
vector<pair<int, int>> to;
for (int i = 0; i < 26; ++i)
if (trie[node].ch[i])
to.emplace_back(trie[trie[node].ch[i]].f, i);
if (to.empty()) op.push_back('P');
sort(all(to));
for (auto i : to) {
op.push_back(i.second + 'a');
print(trie[node].ch[i.second]);
op.push_back('-');
}
}
};
void die() {
int n;
cin >> n;
vector<string> words(n);
for (auto &w : words) cin >> w;
Trie tr;
for (const auto &w : words) tr.insert(w);
tr.print(0);
while (!tr.op.empty() && tr.op.back() == '-') tr.op.pop_back();
cout << tr.op.size() << "\n";
for (char c : tr.op) cout << c << "\n";
}
signed main() {
Ishouldbeunrated
die();
}
# | 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... |