#include <cmath>
#include <cstdio>
#include <algorithm>
#include <iostream>
#include <cstring>
using namespace std;
int res[105][105];
char X[105],Y[105];
int m,n;
void LCS() //填表,找出最优值
{
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
if(X[i]==Y[j])
{
res[i][j]=res[i-1][j-1]+1;
}
else
{
res[i][j]=max(res[i][j-1],res[i-1][j]);
}
}
}
}
void trace(int i,int j) //递归,找出最优解
{
if(i==0||j==0)
return ;
if(res[i][j]==res[i-1][j-1]+1)
{
trace(i-1,j-1);
cout<<X[i]<<" ";
}
else if(res[i][j]==res[i][j-1])
{
trace(i,j-1);
}
else
{
trace(i-1,j);
}
}
int main()
{
scanf("%s %s",X+1,Y+1);
m=strlen(X+1); //注意strlen()函数的写法
n=strlen(Y+1);
LCS();
cout<<res[m][n]<<endl;
cout<<"*****************"<<endl;
for(int i=0;i<=m;i++)
{
for(int j=0;j<=n;j++)
cout<<res[i][j]<<" ";
cout<<endl;
}
trace(m,n);
return 0;
}