#include<iostream>
#include<map>
#include<cstring>
using namespace std;
int n,m;
int a[100005],b[100005];
unsigned long long ha[100005],hb[100005];
string s,t;
map<unsigned long long,int>mp;
const unsigned long long mod=1e9+7;
unsigned long long quick_pow(unsigned long long a,int b)
{
unsigned long long ans=1;
while(b)
{
if(b&1)
ans*=a;
b>>=1;
a=a*a;
}
return ans;
}
unsigned long long hsh(int l,int r,int op)
{
if(op==1)
return ha[r]-ha[l-1]*quick_pow(mod,r-l+1);
else
return hb[r]-hb[l-1]*quick_pow(mod,r-l+1);
}
bool check(int k)
{
mp.clear();
for(int i=1;i+k-1<=n;i++)mp[hsh(i,i+k-1,1)]++;
for(int i=1;i+k-1<=m;i++)mp[hsh(i,i+k-1,0)]++;
for(auto it=mp.begin();it!=mp.end();it++)
{
if(it->second>=2)return true;
}
return false;
}
int main()
{
cin>>s>>t;
n=(int)(s.size());
m=(int)(t.size());
a[1]=0;
for(int i=1;i<n;i++)
{
if(s[i]==s[i-1])a[i+1]=a[i];
else a[i+1]=a[i]+1;
}
for(int i=1;i<m;i++)
{
if(t[i]==t[i-1])b[i+1]=b[i];
else b[i+1]=b[i]+1;
}
for(int i=1;i<=n;i++)ha[i]=ha[i-1]*mod+a[i];
for(int i=1;i<=m;i++)hb[i]=hb[i-1]*mod+b[i];
int l=0,r=min(n,m)+1;
while(l+1!=r)
{
int mid=(l+r)>>1;
if(check(mid))l=mid;
else r=mid;
}
printf("%d",l);
return 0;
}