// UUID: b08b650b-805d-4583-9783-7cdb77eced46
#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> let;
string ans;
int op=0;
string lst;
void insert(string s){
int pos=0;
for(int i=0;i<s.size();i++){
char c=s[i];
if(!let[pos][c-'a']){
let[pos][c-'a']=let.size();
let.push_back(vector<int>(27));
}
pos=let[pos][c-'a'];
if(i==s.size()-1) let[pos][26]=1;
}
}
void dfs(int pos, int ind){
if(let[pos][26]){
op++;
ans.push_back('P');
}
for(int i=0;i<26;i++){
if (ind<lst.size()&&i != lst[ind] - 'a')
if(let[pos][i]){
op++;
ans.push_back(i+'a');
dfs(let[pos][i], ind+1);
op++;
ans.push_back('-');
}
}
if(ind<lst.size()&&let[pos][lst[ind]-'a']){
op++;
ans.push_back(lst[ind]);
dfs(let[pos][lst[ind]-'a'], ind+1);
op++;
ans.push_back('-');
}
}
int main() {
int n;
cin>>n;
let.resize(1, vector<int>(27));
for(int i=0;i<n;i++){
string s;
cin>>s;
if(s.size()>=lst.size()) lst=s;
insert(s);
}
dfs(0, 0);
while(ans.back()=='-'){
ans.pop_back();
op--;
}
cout<<op<<'\n';
for(int i=0;i<op;i++){
cout<<ans[i]<<'\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... |