#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define ll long long
#define proof ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define tests ll T;cin >> T;while(T--)
using namespace std;
using namespace __gnu_pbds;
#define ordered_set tree< int , null_type , less<int> , rb_tree_tag , tree_order_statistics_node_update>
const ll mod = 1e9 + 7;
struct Node{
ll cntr;
ll nxt[26];
bool endofword = false;
};
vector<Node>tri(1);
void Insert(string &s) {
ll curr = 0;
for (int i = 0;i < s.size();i++) {
if (!tri[curr].nxt[s[i]-'a']) {
tri[curr].nxt[s[i] - 'a'] = tri.size();
tri.emplace_back();
}
curr = tri[curr].nxt[s[i]-'a'];
tri[curr].cntr++;
}
tri[curr].endofword = true;
}
vector<char>ans;
void dfs(ll node,ll start = 0) {
if (tri[node].endofword) ans.push_back('P');
ll cntr = 0;
for (int i = 0;i < 26;i++) {
if (tri[node].nxt[i]) cntr++;
}
for (int i = 0;i < 26;i++) {
if (tri[node].nxt[(i + start) % 26]) {
ans.push_back(((i + start) % 26) + 'a');
if (cntr==1)
dfs(tri[node].nxt[(i + start) % 26],start);
else {
dfs(tri[node].nxt[(i + start) % 26]);
}
ans.push_back('-');
}
}
}
void solve()
{
ll n;cin >> n;
while (n--) {
string s;cin >> s;
Insert(s);
}
vector<char>anss;
ll mini = LLONG_MAX;
for (int i = 0;i < 26;i++) {
dfs(0,i);
while (ans.back() == '-') ans.pop_back();
if (ans.size() < mini) {
mini = ans.size();
anss = ans;
}
ans.clear();
}
cout << anss.size() << '\n';
for (auto &i : anss) {
cout << i << '\n';
}
}
int main()
{
proof;
//tests
solve();
}
# | 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... |