#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define SMTYON ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define hi cerr<<"HI\n";
/* -> NO CLEAN CODE HERE <- */
struct Node {
bool isEnd = false;
int adj[26]{};
Node() { memset(adj, 0, sizeof adj); }
};
class Trie {
public:
vector<Node> h;
Trie() { h.emplace_back(); }
void insert(const string &s) {
int node = 0;
for (char c : s) {
int id = c - 'a';
if (!h[node].adj[id]) {
h[node].adj[id] = h.size();
h.emplace_back();
}
node = h[node].adj[id];
}
h[node].isEnd = true;
}
void dfs(int u, vector<char> &ops) {
if (h[u].isEnd) ops.push_back('P');
for (int c = 0; c < 26; c++) {
if (h[u].adj[c]) {
ops.push_back('a' + c);
dfs(h[u].adj[c], ops);
ops.push_back('-');
}
}
}
};
signed main() {
/* ^^^ */
SMTYON /* ^^^ */
// ->> practice makes perfect
int N;
cin >> N;
Trie t;
vector<string> words(N);
for (int i = 0; i < N; i++) {
cin >> words[i];
t.insert(words[i]);
}
vector<char> ops;
t.dfs(0, ops);
cout << ops.size() << "\n";
for (char c : ops) cout << c << "\n";
}
# | 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... |