#include <iostream>
#include <vector>
using namespace std;
void createTable(vector<vector<int>> &table, string a, string b){
int sA = a.size();
int sB = b.size();
for(int i = 0; i <= sA; i++){
vector<int> vB;
for(int j = 0; j <= sB; j++){
vB.push_back(0);
}
table.push_back(vB);
}
}
int maks(vector<vector<int>> &table, string a, string b){
for(int i = 1; i <= a.size(); i++){
for(int j = 0; j <= b.size(); j++){
if(a[i] == b[j]){
table[i][j] = table[i-1][j-1] + 1;
} else {
int a = table[i-1][j];
int b = table[i][j-1];
table[i][j] = ((a > b) ? a : b);
}
}
}
return table[a.size()][b.size()];
}
int main()
{
vector<vector<int>> tab;
string a, b;
cin >> a >> b;
createTable(tab,a,b);
for(int i = 0; i < tab.size(); i++){
vector<int> b = tab[i];
for(int j = 0; j < b.size(); j++){
cout<<b[j]<<" ";
}
cout << endl;
}
cout<<maks(tab, a, b);
return 0;
}