#include<iostream>
#include<algorithm>
using namespace std;
const int maxn =1e3+5;
char x[maxn],y[maxn];
int c[maxn][maxn];
int ans[maxn][maxn];
int getMaxLen(int n1,int n2)
{
for(int i =1;i<=n1;++i) c[i][0]=0;
for(int i =1;i<=n2;++i) c[0][i]=0;
for(int i =1 ;i<=n1;++i)
{
for(int j=1;j<=n2;++j)
{
if(x[i]==y[j])
{
c[i][j]=c[i-1][j-1]+1;
ans[i][j]=1;
}
else
{
if(c[i-1][j]>=c[i][j-1])
{
c[i][j]=c[i-1][j];
ans[i][j]=2;
}
else
{
c[i][j]=c[i][j-1];
ans[i][j]=3;
}
}
}
}
return c[n1][n2];
}
void getAns(int i,int j)
{
if(i==0||j==0) return ;
if(ans[i][j]==1)
{
getAns(i-1,j-1);
cout<<x[i];
}
else if(ans[i][j]==2)
{
getAns(i-1,j);
}
else
{
getAns(i,j-1);
}
}
int main()
{
int n1,n2;
cin>>n1>>n2;
for(int i =1 ;i<=n1;++i) cin>>x[i];
for(int i =1 ;i<=n2;++i) cin>>y[i];
cout<<getMaxLen(n1,n2)<<endl;
getAns(n1,n2);
}