1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<cmath>
5 #include<cstring>
6 #include<algorithm>
7 #include<queue>
8 using namespace std;
9 const int MAXN=1001;
10 inline void read(int &n)
11 {
12 char c='+';bool flag=0;n=0;
13 while(c<'0'||c>'9'){c=getchar();if(c=='-')flag=1;}
14 while(c>='0'&&c<='9')n=n*10+c-48,c=getchar();
15 }
16 struct E
17 {
18 int u,v,nxt;
19 }edge[MAXN];
20 int head[MAXN];
21 int num=1;
22 struct node
23 {
24 int bh;
25 int num;
26 int val;
27 node(){num=0;val=0;}
28 }trie[MAXN];
29 int tot=0;
30 char a[MAXN];
31 bool vis[MAXN];
32 inline void add_edge(int x,int y)
33 {
34 edge[num].u=x;
35 edge[num].v=y;
36 edge[num].nxt=head[x];
37 head[x]=num++;
38 }
39 long long int ans=0;
40 inline void insert(char *a)
41 {
42 int l=strlen(a);int now=0;
43 for(register int i=0;i<l;i++)
44 {
45 bool flag=0;
46 int debug=a[i];
47 for(register int j=head[now];j!=-1;j=edge[j].nxt)
48 {
49 if(trie[edge[j].v].val==a[i])
50 trie[edge[j].v].num++,
51 flag=1,
52 now=edge[j].v;
53 }
54 if(flag==0)
55 {
56 trie[++tot].bh=tot;
57 trie[tot].num=1;
58 trie[tot].val=a[i];
59 add_edge(now,tot);
60 now=tot;
61 }
62 ans=max(ans,(long long )(i+1)*trie[now].num);
63 }
64 }
65 int main()
66 {
67 memset(head,-1,sizeof(head));
68 int n;
69 read(n);
70 for(int i=1;i<=n;i++)
71 {
72 memset(a,0,sizeof(a));int hh=0;
73 char ch=getchar();bool flag2=0;
74 while(ch=='\n') ch=getchar();
75 while(ch!='\n')
76 a[hh++]=ch,ch=getchar();
77 insert(a);
78 }
79 printf("%lld",ans);
80 return 0;
81 }