#include<bits/stdc++.h>
using namespace std;
#define X first
#define Y second
#define PB push_back
#define LL long long
#define pii pair<int,int>
#define INS insert
const int N=3e5+5;
const int MAX=1e9+5;
map<string,set<pair<int,string>>>map2;
map<string,int>map3;
vector<char>rj;
string arr[N];
void dfs(string tr) {
for (auto it : map2[tr]) {
rj.PB(it.Y[it.Y.size()-1]);
dfs(it.Y);
rj.PB('-');
}
if (map2[tr].size()==0) rj.PB('P');
}
void solve() {
int n,naj=0;
cin>>n;
string s;
string ss;
for (int i=0;i<n;i++) {
cin>>s;
arr[i] = s;
if (s.size()>naj) {
naj=s.size();
swap(s,ss);
}
}
string s3="";
for (int i=0;i<ss.size();i++) {
s3+=ss[i];
map3[s3]=1;
}
for (int i=0;i<n;i++) {
string s2 = "";
for (int j=0;j<arr[i].size();j++) {
int cc = 0;
if (map3[s2+arr[i][j]] == 1) cc=1;
map2[s2].INS({cc,s2+arr[i][j]});
s2+=arr[i][j];
}
}
dfs("");
cout << rj.size()-naj<<"\n";
for (int i=0;i<rj.size()-naj;i++) {
cout<<rj[i]<<"\n";
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t=1;
while (t--) 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... |