#include <bits/stdc++.h>
using namespace std;
#define int long long
const int INF = 1e18;
int n;
string a[19];
signed main(){
cin >> n;
for(int i = 1;i <= n;i++)
{
cin >> a[i];
}
pair < int , vector < char > > ans = {INF , {}};
for(int st = 1;st <= n;st++)
{
bool used[19];
for(int i = 1;i <= 18;i++) used[i] = 0;
vector < char > res;
for(char c : a[st]) res.push_back(c);
res.push_back('P');
int last = st;
used[st] = 1;
while(true){
pair < int , int > next = {-1 , -1};
for(int j = 1;j <= n;j++){
if(used[j]) continue;
int same = 0;
string F = a[last];
string S = a[j];
for(int i = 0;i < min(F.size() , S.size());i++){
if(F[i] == S[i]) ++same;
else break;
}
next = max(next , {same , j});
}
int RMV = (a[last].size() - next.first);
last = next.second;
if(last == -1) break;
used[last] = 1;
while(RMV--) res.push_back('-');
for(int i = next.first;i < a[last].size();i++) res.push_back(a[last][i]);
res.push_back('P');
}
ans = min(ans , {res.size() , res});
}
vector < char > res = ans.second;
cout << res.size() << endl;
for(char c : res) cout << c << 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... |