제출 #1122153

#제출 시각아이디문제언어결과실행 시간메모리
1122153LuvidiType Printer (IOI08_printer)C++17
100 / 100
145 ms101640 KiB
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define pll pair<ll, ll>
#define pii pair<int, int>
#define fs first
#define sc second
#define pb push_back

string ans;

struct Node{
    Node *ch[26];
    bool b=0,m=0;
    void dfs(){
        if(b)ans+='P';
        for(int i=0;i<26;i++)if(ch[i]&&!ch[i]->m){
            ans+='a'+i;
            ch[i]->dfs();
        }
        for(int i=0;i<26;i++)if(ch[i]&&ch[i]->m){
            ans+='a'+i;
            ch[i]->dfs();
        }
        if(!m)ans+='-';
    }
};

void solve() {
    int n;
    cin>>n;
    string a[n];
    for(int i=0;i<n;i++)cin>>a[i];
    pii ln;
    for(int i=0;i<n;i++)ln=max(ln,{a[i].size(),i});
    Node *root=new Node();
    root->m=1;
    for(int i=0;i<n;i++){
        auto curr=root;
        for(char c:a[i]){
            int x=c-'a';
            if(curr->ch[x]==NULL)curr->ch[x]=new Node();
            curr=curr->ch[x];
            if(i==ln.sc)curr->m=1;
        }
        curr->b=1;
    }
    root->dfs();
    cout<<ans.size()<<'\n';
    for(char c:ans)cout<<c<<'\n';
}

int main() {
    #ifdef FPO
        freopen("in","r",stdin);
        freopen("out","w",stdout);
    #endif
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

    solve();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...