#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
typedef long long ll;
const ll mod=1000000007;
const ll p=10000019;
const ll maxn=1010;
ll powp[maxn],h1[maxn]={0},h2[maxn]={0};
vector<pair<int,int> > pr1,pr2;
void init(int len){
powp[0]=1;
for(int i=1;i<=len;i++){
powp[i]=(powp[i-1]*p)%mod;
}
}
void calh(ll h[],string &str){
h[0]=str[0];
for(int i=1;i<str.length();i++){
h[i]=(h[i-1]*p+str[i])%mod;
}
}
int callsinglesubh(ll h[],int i,int j){
if(i==0) return h[j];
return ((h[j]-h[i-1]*powp[j-i+1])%mod+mod)%mod;
}
void calsubh(ll h[],int len,vector<pair<int,int> >&pr){
for(int i=0;i<len;i++){
for(int j=i;j<len;j++){
int hashvalue=callsinglesubh(h,i,j);
pr.push_back(make_pair(hashvalue,j-i+1));
}
}
}
int getmax(){
int ans=0;
for(int i=0;i<pr1.size();i++){
for(int j=0;j<pr2.size();j++){
if(pr1[i].first == pr2[j].first)
ans=max(ans,pr1[i].second);
}
}
return ans;
}
int main(){
string str1,str2;
getline(cin,str1);
getline(cin,str2);
init(max(str1.length(),str2.length()));
calh(h1,str1);
calh(h2,str2);
calsubh(h1,str1.length(),pr1);
calsubh(h2,str2.length(),pr2);
printf("ans=%d\n",getmax());