#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ll long long
ll recurs(string s ,string t, vector<vector<ll>> &dp,ll idx1=0,ll idx2=0) {
if (idx1==s.size() || idx2==t.size()) {
return 0;
}
if (dp[idx1][idx2]!=-1) {
return dp[idx1][idx2];
}
if (s[idx1]==t[idx2]) {
return dp[idx1][idx2]=1+recurs(s, t, dp, idx1+1, idx2+1);
}
else
return dp[idx1][idx2]=max(recurs(s,t,dp,idx1+1,idx2),recurs(s,t,dp,idx1,idx2+1));
}
void solve() {
string s; string t;
cin >> s>>t;
ll n=s.length();
ll m =t.length();
vector<vector<ll>>dp(n+1,vector<ll>(m+1,-1));
cout<<recurs(s,t,dp);
}
signed main() {
ll t=1;
// cin>>t;
while(t--) {
solve();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgaW50IGxvbmcgbG9uZwojZGVmaW5lIGxsIGxvbmcgbG9uZwpsbCByZWN1cnMoc3RyaW5nIHMgLHN0cmluZyB0LCB2ZWN0b3I8dmVjdG9yPGxsPj4gJmRwLGxsIGlkeDE9MCxsbCBpZHgyPTApIHsKaWYgKGlkeDE9PXMuc2l6ZSgpIHx8IGlkeDI9PXQuc2l6ZSgpKSB7CiAgICByZXR1cm4gMDsKfQogICAgaWYgKGRwW2lkeDFdW2lkeDJdIT0tMSkgewogICAgICAgIHJldHVybiBkcFtpZHgxXVtpZHgyXTsKICAgIH0KICAgIGlmIChzW2lkeDFdPT10W2lkeDJdKSB7CiAgICAgICAgcmV0dXJuIGRwW2lkeDFdW2lkeDJdPTErcmVjdXJzKHMsIHQsIGRwLCBpZHgxKzEsIGlkeDIrMSk7CiAgICB9CiAgICBlbHNlCiAgICAgICAgcmV0dXJuIGRwW2lkeDFdW2lkeDJdPW1heChyZWN1cnMocyx0LGRwLGlkeDErMSxpZHgyKSxyZWN1cnMocyx0LGRwLGlkeDEsaWR4MisxKSk7Cn0Kdm9pZCBzb2x2ZSgpIHsKICAgIHN0cmluZyBzOyBzdHJpbmcgdDsKICAgIGNpbiA+PiBzPj50OwogICAgbGwgbj1zLmxlbmd0aCgpOwogICAgbGwgbSA9dC5sZW5ndGgoKTsKICAgIHZlY3Rvcjx2ZWN0b3I8bGw+PmRwKG4rMSx2ZWN0b3I8bGw+KG0rMSwtMSkpOwogICAgY291dDw8cmVjdXJzKHMsdCxkcCk7Cn0KCnNpZ25lZCBtYWluKCkgewogbGwgdD0xOwogICAgLy8gY2luPj50OwogICAgd2hpbGUodC0tKSB7CiAgICAgICAgc29sdmUoKTsKICAgIH0KICAgIHJldHVybiAwOwp9