#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=1010;
int f[N][N];
string a,b;
int main()
{
cin>>a>>b;
//开始需要进行初始化
for(int i=1;i<=a.size();i++)
{
f[i][0]=0;
}
for(int j=1;j<=b.size();j++)
{
f[0][j]=0;
}
int maxc=0;
int maxv=0;
for(int i=1;i<=a.size();i++)
{
for(int j=1;j<=b.size();j++)
{
if(a[i-1]==b[j-1])
{
f[i][j]=f[i-1][j-1]+1;
}
else
{
f[i][j]=0;
}
if(f[i][j]>maxc)
{
maxc=f[i][j];
maxv=j;//将这个点的莫结点记录下来
}
}
}
cout << "最长公共子串的长度为: "<<maxc<<endl;
cout << "这个公共子串为: ";
maxv-=1;
for(int i=maxv-maxc+1;i<=maxv;i++)
{
cout << b[i];
}
cout<<endl;
return 0;
}