#include<bits/stdc++.h>
using namespace std;
string s,t;
int dp[101][101];
int main()
{
while(cin>>s)
{
memset(dp,0,sizeof(dp));
cin>>t;
for(int i=1;i<=s.size();++i)
{
for(int j=1;j<=t.size();++j)
{
if(s[i-1]==t[j-1])
{
dp[i][j]=dp[i-1][j-1]+1;
}
else
{
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
}
}
}
cout<<dp[s.size()][t.size()]<<endl;
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
string s,t;
int dp[105][105];
int flag[105];
int main()
{
while(cin>>s)
{
cin>>t;
memset(dp,0,sizeof(dp));
int maxx=0,begin;
for(int i=1;i<=s.size();++i)
{
for(int j=1;j<=t.size();++j)
{
if(s[i-1]==t[j-1])
{
dp[i][j]=dp[i-1][j-1]+1;
if(dp[i][j]>=maxx)
{
maxx=dp[i][j];
begin=i;
}
}
else
dp[i][j]=0;
}
}
cout<<maxx<<endl;
cout<<s.substr(begin-maxx,maxx)<<endl;
}
return 0;
}