#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
vector<vector<int> > dp(1000,vector<int>(1000,0)),mark(1000,vector<int>(1000,0));
string a,b,ans;
void dfs(int i,int j){
if(i == 0 || j == 0) return;
if(mark[i][j] == 1){
dfs(i-1,j-1);
ans += a[i-1];
}
else if(mark[i][j] == 2){
dfs(i-1,j);
}
else{
dfs(i,j-1);
}
}
int main()
{
cin>>a>>b;
int n = a.length();
int m = b.length();
for(int i = 1;i <= n;i ++){
for(int j = 1;j <= m;j ++){
if(a[i-1] == b[j - 1]){
dp[i][j] = dp[i-1][j-1] + 1;
mark[i][j] = 1; //来自左上
}
else if(dp[i-1][j] > dp[i][j-1]){
dp[i][j] = dp[i-1][j];
mark[i][j] = 2; //来自上方
}
else{
dp[i][j] = dp[i][j-1];
mark[i][j] = 3; //来自左方
}
}
}
dfs(n,m);
cout<<dp[n][m]<<endl<<ans<<endl;
return 0;
}