#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
char str1[1050], str2[1050];
int f[1050][1050];
struct poj1458 {
/*[问题描述]:求连个序列的最长公共子序列的长度*/
/*[解题思路]:f[i][j]表示序列str1[1,...i]与序列str2[1,...j]的最长公共子序列的长度,
* 则f[i][j]的值可以通过比较两个序列的最后一个元素得到
*/
void work() {
while (cin >> str1 + 1 >> str2 + 1) {
int l1 = strlen(str1 + 1);
int l2 = strlen(str2 + 1);
for (int i = 0; i <= l1; i++) {
for (int j = 0; j <= l2; j++) {
if (i != 0 && j != 0) {
if (str1[i] == str2[j])
f[i][j] = f[i - 1][j - 1] + 1;
else
f[i][j] = max(f[i - 1][j], f[i][j - 1]);
}
else
f[i][j] = 0;
}
}
cout << f[l1][l2] << endl;
}
}
};
int main()
{
poj1458 solution;
solution.work();
return 0;
}