# def dp(x,y):
# global n,k,a,m
# if x==0 or y==-1:
# return 0
# elif m[x][y]==0:
# if a[y][0]>x:
# m[x][y]=dp(x,y-1)
# else:
# m[x][y]=max(dp(x,y-1),a[y][1]+dp(x-a[y][0],y-1))
# return m[x][y]
# n,k=map(int,input().split())
# a=[]
# m=[[0 for i in range(n+1)]for j in range(k+1)]
# for i in range(n):
# w,v=map(int,input().split())
# a.append([w,v])
# print(dp(k,n-1))
n=input()
k=input()
n=list(n)
k=list(k)
n.insert(0,0)
k.insert(0,0)
a=[[0 for i in range(len(k)+1)]for j in range(len(n)+1)]
x=0
y=0
m=0
# print(n,k)
for i in range(1,len(n)):
for j in range(1,len(k)):
if n[i]==k[j]:
a[i][j]=a[i-1][j-1]+1
if a[i][j]>m:
x=i
y=j
m=a[i][j]
else:
a[i][j]=max(a[i][j-1],a[i-1][j])
# for x in a:
# print(x)
# print()
print(m)



