#include <bits/stdc++.h>
using namespace std;
#define ll long long
struct vert {
    bool s = 0;
    unordered_map<int, int> mp;
    int o = -1;
    char c = '_';
};
int add(int v, vector<vert> &tr, string &s, int i) {
    if (i == (int)s.size()) {
        tr[v].s = 1;
        return v;
    }
    if (!tr[v].mp.contains(s[i]-'a')) {
        tr[v].mp[s[i]-'a'] = tr.size();
        tr.push_back(vert());
        tr[tr.size()-1].o = v;
        tr[tr.size()-1].c = s[i];
    }
    return add(tr[v].mp[s[i]-'a'], tr, s, i+1);
}
void print(int v, vector<vert> &tr, string &s) {
    vector<bool> odw (tr.size(), 0);
    vector<queue<int>> q (tr.size());
    for (int i = 0; i < (int)tr.size(); i++) {
        for (auto j : tr[i].mp) {
            q[i].push(j.second);
        }
        tr[i].mp = unordered_map<int, int>();
    }
    while (v != -1) {
        if (tr[v].s) {
            s.push_back('P');
            tr[v].s = 0;
        }
        if (q[v].empty()) {
            s.push_back(tr[v].c);
            odw[v] = 1;
            v = tr[v].o;
            continue;
        }
        int x = q[v].front();
        q[v].pop();
        if (!odw[x]) {
            s.push_back('-');
            v = x;
        }
    }
}
int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int n;
    cin >> n;
    pair<int, int> a = {0, 0};
    vector<string> vs;
    vector<vert> tr (1);
    for (int i = 0; i < n; i++) {
        string s;
        cin >> s;
        a = max(a, {s.size(), add(0, tr, s, 0)});
    }
    string s;
    print(a.second, tr, s);
    if (s[s.size()-1] == '_') {
        s.pop_back();
    }
    cout << s.size() << '\n';
    reverse(s.begin(), s.end());
    for (char c : s) {
        cout << c << '\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... |