#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
const int MAXN = 120;
int dp_data[MAXN][MAXN];
string a_str, b_str;
void initConfig() {
for (int i = 0; i < MAXN; i++) {
for (int j = 0; j < MAXN; j++) {
dp_data[i][j] = 0;
}
}
}
int DP(int a_index, int b_index) {
if (a_index == -1 || b_index == -1) {
return 0;
} else if (dp_data[a_index][b_index] != 0) {
return dp_data[a_index][b_index];
} else {
int max_length = 0;
if (a_str[a_index] == b_str[b_index]) {
max_length = max(max_length, DP(a_index - 1, b_index - 1) + 1);
}
max_length = max(max_length, DP(a_index - 1, b_index));
max_length = max(max_length, DP(a_index, b_index - 1));
dp_data[a_index][b_index] = max_length;
return dp_data[a_index][b_index];
}
}
int main() {
cin >> a_str >> b_str;
initConfig();
cout << DP(a_str.size() - 1, b_str.size() - 1);
}