Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long tint;
- #define forsn(i, s, n) for(int i=s;i<int(n);i++)
- #define forn(i, n) forsn(i, 0, n)
- #define all(v) v.begin(),v.end()
- #define rall(v) v.rbegin(), v.rend()
- #define NACHO ios::sync_with_stdio(0); cin.tie(NULL);
- const int INF = 1e6;
- const int MOD = 1e9+7;
- int t[503][26];
- int fin[503];
- int depth[503];
- int maxi = 0;
- string best = "";
- string a="";
- void dfs(int node=0, int d=0){
- depth[node]+=fin[node];
- forn(i, 26){
- if(t[node][i] != -1){
- a+=(char)('a'+i);
- dfs(t[node][i], d+1);
- depth[node]+=depth[t[node][i]];
- }
- }
- if(d*d*depth[node] > maxi){
- maxi = d*d*depth[node];
- best = a;
- }
- a.pop_back();
- }
- int main(){
- //ifstream cin("equipo.in");
- //ofstream cout("equipo.out");
- int sz; cin >> sz;
- int n; cin >> n;
- forn(i, 501){
- forn(j, 26){
- t[i][j]= -1;
- }
- }
- int m = 1;
- forn(i, n){
- string s;
- cin >> s;
- int u=0;
- for(char d : s) {
- if(t[u][d-'a'] == -1)
- t[u][d-'a']=m++;
- u=t[u][d-'a'];
- }
- ++fin[u];
- }
- dfs();
- cout << maxi << "\n";
- cout << best << "\n";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement