x , int y , char c)
9 {
10 to[++cnt] = y , val[cnt] = c , next[cnt] = head[x] , head[x] = cnt;
11 }
12 int main()
13 {
14 int n , i , j , k , t , p;
15 char ch;
16 long long ans = 0;
17 scanf("%d" , &n);
18 for(i = 1 ; i <= n ; i ++ )
19 {
20 ch = getchar();
21 while(ch == '\n') ch = getchar();
22 for(j = t = 1 ; ch != '\n' ; j ++ , ch = getchar())
23 {
24 for(p = 0 , k = head[t] ; k ; k = next[k])
25 {
26 if(val[k] == ch)
27 {
28 p = to[k];
29 break;
30 }
31 }
32 if(!p) add(t , p = ++tot , ch);
33 t = p , si[t] ++ , ans = max(ans , (long long)j * si[t]);
34 }
35 }
36 printf("%lld\n" , ans);
37 return 0;
38 }
|