#include <bits/stdc++.h>
using namespace std;
#define lli long long
#define pii pair<lli, lli>
#define tii tuple<lli, lli, lli>
#define ff first
#define ss second
#define pb push_back
#define endl '\n'
struct Trie{
map<char, Trie> children;
bool is_word=false;
// int mais_longa=0;
void insert(const string & s, int pos){
if(pos!=s.size()){
children[s[pos]].insert(s, pos+1);
}
else {
// children[s[pos]].ss=1;
is_word=true;
}
}
};
Trie trie;
vector<char> resp;
string last_word="";
void solve(Trie t, int pos, bool last){
// char letra='a';
// int maior=0;
if(t.is_word){
resp.pb('P');
}
pair<char, Trie> ult;
ult.ff='-';
for(auto [c, p]:t.children){
if(last&&last_word[pos]==c){
ult={c, p};
continue;
}else{
resp.pb(c);
solve(p, pos+1, 0);
resp.pb('-');
}
}
if(ult.ff!='-'){
resp.pb(ult.ff);
solve(ult.ss, pos+1, 1);
}
}
int main() {
int n; cin >> n;
vector<string> words;
for(int i=0; i<n; i++){
string s; cin >> s;
words.pb(s);
trie.insert(s, 0);
if(last_word.size()<s.size()){
last_word=s;
}
}
solve(trie, 0, 1);
cout<<resp.size()<<endl;
for(char i:resp){
cout<<i<<endl;
}
}
| # | 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... |