// 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)1e5;
char s[N + 1], t[N + 1];
int sn, tn;
int f[2][N + 2];
inline void relax( int i, int j, int b )
{
if (f[i & 1][j] < b)
f[i & 1][j] = b;
}
void solve()
{
memset(f, 0, sizeof(f));
forn(i, sn + 1) // i = 0..sn
{
// (i & 1) --> 1 - (i & 1)
forn(j, tn + 1) // j = 0..tn
{
int F = f[i & 1][j];
if (s[i] == t[j])
relax(i + 1, j + 1, F + 1);
relax(i + 1, j, F);
relax(i, j + 1, F);
}
memset(f[i & 1], 0, sizeof(f[0]));
}
printf("%d\n", f[(sn + 1) & 1][tn]);
}
int main()
{
gets(s);
gets(t);
sn = strlen(s);
tn = strlen(t);
solve();
return 0;
}