提交记录 其中#1RE
#include <bits/stdc++.h>
#define int int64_t
//#define int __int128
//#define MOD (1000000007)
//#define eps (1e-6)
#define endl '\n'
#define debug_endl cout<<endl;
#define debug cout<<"debug"<<endl;
const int MOD=0x0d000721;
const int base=0721;
using namespace std;
const int MAXN=2010;
int n,ans;
string s[6];
int p[MAXN];
int mod(int a,int p){
return (a%p+p)%p;
}
int getHash(int idx,int l,int r){
int h=0;
for(int i=l;i<r;++i){
h=mod((h+int(s[idx][i]-'a'+1)*p[r-i-1]),MOD);
}
//cout<<h<<endl;
return h;
}
bool checkString(int idx,int h,int len){
int h2=getHash(idx,0,len);
if(h==h2){
return true;
}
for(int i=1;i<s[idx].size()-len+1;++i){
h2=mod(h2-mod(int(s[idx][i-1]-'a'+1)*p[len-1],MOD),MOD);
h2=mod(h2*base+int(s[idx][i+len-1]-'a'+1),MOD);
if(h2==h){
return true;
}
}
return false;
}
bool check(int l){
for(int k=0;k<s[1].size()-l+1;++k){
int h=getHash(1,k,k+l);
for(int i=2;i<=n;++i){
if(!checkString(i,h,l)){
return false;
}
}
}
return true;
}
signed main(){
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>n;
for(int i=1;i<=n;++i){
cin>>s[i];
}
sort(s+1,s+n+1);
p[0]=1;
for(int i=1;i<s[n].size();++i){
p[i]=(p[i-1]*base)%MOD;
}
int r=s[1].size(),l=1;
while(l<=r){
int mid=(l+r)>>1;
if(check(mid)){
ans=mid;
l=mid+1;
}
else{
r=mid-1;
}
}
cout<<ans;
return 0;
}