#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <string>
using namespace std;

int dp[102][102];
//dp[i][j] s1前i个元素 s2的前j个元素的最大公共长度
//长度可为0到N,n+1个数,故dp数组长度应比字符长度大1

int main() {
	string str1, str2;
	cin >> str1 ;
	cin >> str2;
	//printf("%s\n", str1.c_str());
	//printf("%s\n", str2.c_str());
	// str1 = str1.c_str();
	// str2 = str2.c_str();
	int n = str1.length();
	int m = str2.length();
	for (int i = 0; i <= n; i++) {
		dp[i][0] = 0;
	}
	for (int j = 0; j <= m; j++) {
		dp[0][j] = 0;
	}
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			//前i个 s[0]-s[i-1]
			if (str1[i - 1] == str2[j-1]) {
				dp[i][j] = dp[i - 1][j - 1] + 1;
			}
			else {
				dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
			}
		}
	}
	printf("%d\n", dp[n][m]);
	return 0;

}