#include <bits/stdc++.h>
using namespace std;
#define Fast \
{ \
ios_base::sync_with_stdio(0); \
cin.tie(0); \
cout.tie(0); \
}
#define int long long
const int N = 3e3 + 5;
int dp[N][N];
void sol()
{
memset(dp, -1, sizeof dp);
string s, t;
cin >> s >> t;
function<int(int, int)> recur = [&](int i, int j) -> int
{
if (i == s.size() || j == t.size())
return 0;
int &ret = dp[i][j];
if (~ret)
return ret;
ret = 0;
if (s[i] == s[j])
ret = recur(i + 1, j + 1) + 1;
else
{
ret = max(ret, recur(i + 1, j));
ret = max(ret, recur(i, j + 1));
}
};
cout << recur(0, 0);
}
int32_t main()
{
Fast;
int t = 1;
// cin >> t;
while (t--)
{
sol();
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgRmFzdCAgICAgICAgICAgICAgICAgICAgICBcCiAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBcCiAgICBjaW4udGllKDApOyAgICAgICAgICAgICAgICAgICBcCiAgICBjb3V0LnRpZSgwKTsgICAgICAgICAgICAgICAgICBcCiAgfQojZGVmaW5lIGludCBsb25nIGxvbmcKY29uc3QgaW50IE4gPSAzZTMgKyA1OwppbnQgZHBbTl1bTl07CnZvaWQgc29sKCkKewogIG1lbXNldChkcCwgLTEsIHNpemVvZiBkcCk7CiAgc3RyaW5nIHMsIHQ7CiAgY2luID4+IHMgPj4gdDsKICBmdW5jdGlvbjxpbnQoaW50LCBpbnQpPiByZWN1ciA9IFsmXShpbnQgaSwgaW50IGopIC0+IGludAogIHsKICAgIGlmIChpID09IHMuc2l6ZSgpIHx8IGogPT0gdC5zaXplKCkpCiAgICAgIHJldHVybiAwOwogICAgaW50ICZyZXQgPSBkcFtpXVtqXTsKICAgIGlmICh+cmV0KQogICAgICByZXR1cm4gcmV0OwogICAgcmV0ID0gMDsKICAgIGlmIChzW2ldID09IHNbal0pCiAgICAgIHJldCA9IHJlY3VyKGkgKyAxLCBqICsgMSkgKyAxOwogICAgZWxzZQogICAgewogICAgICByZXQgPSBtYXgocmV0LCByZWN1cihpICsgMSwgaikpOwogICAgICByZXQgPSBtYXgocmV0LCByZWN1cihpLCBqICsgMSkpOwogICAgfQogIH07CiAgY291dCA8PCByZWN1cigwLCAwKTsKfQppbnQzMl90IG1haW4oKQp7CiAgRmFzdDsKICBpbnQgdCA9IDE7CiAgLy8gY2luID4+IHQ7CiAgd2hpbGUgKHQtLSkKICB7CiAgICBzb2woKTsKICB9Cn0=