#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main(){
string l1;
string l2;
cin >> l1;
cin >> l2;
int n = l1.size();
int m = l2.size();
int ** dp = new int *[n+1];
for (int i=0; i<n+1; i++){
dp[i] = new int[m+1];
memset(dp[i], 0, sizeof(int)*(m+1));
}
for(int i=1; i<n+1; i++){
for(int j=1; j<m+1; j++){
if(l1[i-1] == l2[j-1]){
dp[i][j] = max({dp[i-1][j], dp[i][j-1], dp[i-1][j-1]+1});
}
else{
dp[i][j] = max({dp[i-1][j-1], dp[i][j-1], dp[i-1][j]});
}
}
}
cout << dp[n][m];
}