#include <bits/stdc++.h>
using namespace std;
string s1, s2;
int dp[1000][1000];
int m, n;
int LCS(int i, int j)
{
if (i == m || j == n)
return 0;
if (dp[i][j] != -1)
return dp[i][j];
if (s1[i] == s2[j])
return dp[i][j] = 1 + LCS(i + 1, j + 1);
else
{
int res1=LCS(i+1,j);
int res2=LCS(i,j+1);
return dp[i][j]= max(res1,res2);
}
}
string buildLCS(int i, int j)
{
if (i == m || j == n)
return "";
if (s1[i] == s2[j])
{
return s1[i] +buildLCS(i + 1, j + 1);
}
else
{
if (dp[i + 1][j] > dp[i][j + 1])
return buildLCS(i + 1, j);
else
return buildLCS(i, j + 1);
}
}
int main()
{
cin >> s1 >> s2;
m = s1.size();
n = s2.size();
for (int i = 0; i <= m; i++)
{
for (int j = 0; j <= n; j++)
{
dp[i][j] = -1;
}
}
int length = LCS(0, 0);
string lcsString =buildLCS(0, 0);
cout<< length << endl;
cout <<lcsString << endl;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnN0cmluZyBzMSwgczI7CmludCBkcFsxMDAwXVsxMDAwXTsKaW50IG0sIG47CmludCBMQ1MoaW50IGksIGludCBqKQp7CmlmIChpID09IG0gfHwgaiA9PSBuKQogcmV0dXJuIDA7CiBpZiAoZHBbaV1bal0gIT0gLTEpIApyZXR1cm4gZHBbaV1bal07CiAgaWYgKHMxW2ldID09IHMyW2pdKQogcmV0dXJuIGRwW2ldW2pdID0gMSArIExDUyhpICsgMSwgaiArIDEpOwogICBlbHNlCnsKaW50IHJlczE9TENTKGkrMSxqKTsKaW50IHJlczI9TENTKGksaisxKTsKICByZXR1cm4gZHBbaV1bal09IG1heChyZXMxLHJlczIpOwp9Cn0KCgpzdHJpbmcgYnVpbGRMQ1MoaW50IGksIGludCBqKSAKewogICAgaWYgKGkgPT0gbSB8fCBqID09IG4pIApyZXR1cm4gIiI7CmlmIChzMVtpXSA9PSBzMltqXSkgCnsKcmV0dXJuIHMxW2ldICtidWlsZExDUyhpICsgMSwgaiArIDEpOwogICAgfSAKZWxzZSAKewogaWYgKGRwW2kgKyAxXVtqXSA+IGRwW2ldW2ogKyAxXSkKICAgcmV0dXJuIGJ1aWxkTENTKGkgKyAxLCBqKTsKIGVsc2UKcmV0dXJuIGJ1aWxkTENTKGksIGogKyAxKTsKICAgIH0KfQoKaW50IG1haW4oKQogewogIGNpbiA+PiBzMSA+PiBzMjsKICBtID0gczEuc2l6ZSgpOwogIG4gPSBzMi5zaXplKCk7CiAgZm9yIChpbnQgaSA9IDA7IGkgPD0gbTsgaSsrKSAKewogIGZvciAoaW50IGogPSAwOyBqIDw9IG47IGorKykgCnsKICAgZHBbaV1bal0gPSAtMTsKICAgICAgICB9CiAgICB9CgogICAgaW50IGxlbmd0aCA9IExDUygwLCAwKTsKICAgIHN0cmluZyBsY3NTdHJpbmcgPWJ1aWxkTENTKDAsIDApOwoKICAgIGNvdXQ8PCBsZW5ndGggPDwgZW5kbDsKICAgIGNvdXQgPDxsY3NTdHJpbmcgPDwgZW5kbDsKCiAgICByZXR1cm4gMDsKfQ==