// 1
// 2
// 3
// 4
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <string>
using namespace std;
// Í.Î.Ï.
#define forn(i, n) for (int i = 0; i < (int)(n); i++)
const int N = (int)1e3;
char s[N + 1], t[N + 1];
int sn, tn;
unsigned short f[N + 2][N + 2];
void solve()
{
memset(f, -1, sizeof(f));
forn(i, sn + 1) // i = 0..sn
forn(j, tn + 1) // j = 0..tn
{
// f[i, j]
if (i > 0 && j > 0 && s[i - 1] == t[j - 1])
f[i][j] = f[i - 1][j - 1] + 1;
else
f[i][j] = max(i ? f[i - 1][j] : 0, j ? f[i][j - 1] : 0);
}
printf("%d\n", f[sn][tn]);
}
int main()
{
gets(s);
gets(t);
sn = strlen(s);
tn = strlen(t);
solve();
return 0;
}