#include<iostream>
#include<string>
using namespace std;
template<typename T>
int max(int k1, int k2)
{
if(k1 > k2)
return k1;
else
return k2;
}
int maxlen(string s1, string s2)
{
int length1 = s1.size();
int length2 = s2.size();
int ** Maxlen = new int *[length1];
for(int i = 0;i < length1; i++)
{Maxlen[i] = new int[length2];}
for(int i = 0; i <length1; ++i)
Maxlen[i][0] = 0;
for(int i = 0;i < length2; ++i)
Maxlen[0][i] = 0;
for(int i = 1; i <= length1; ++i)
for(int j = 1; j <= length2; ++j)
{
if(s1[i - 1] == s2[j - 1])
{
Maxlen[i][j] = Maxlen[i - 1][j - 1] + 1;
}
else
{Maxlen[i][j] = max(Maxlen[i - 1][j], Maxlen[i][j- 1]);}
}
cout<<Maxlen[length1][length2];
for(int i = 0;i < length2;i++)
delete []Maxlen[i];
return 0;
}
int main()
{
string s1,s2;
cin>>s1>>s2;
maxlen(s1, s2);
}
#include<string>
using namespace std;
template<typename T>
int max(int k1, int k2)
{
if(k1 > k2)
return k1;
else
return k2;
}
int maxlen(string s1, string s2)
{
int length1 = s1.size();
int length2 = s2.size();
int ** Maxlen = new int *[length1];
for(int i = 0;i < length1; i++)
{Maxlen[i] = new int[length2];}
for(int i = 0; i <length1; ++i)
Maxlen[i][0] = 0;
for(int i = 0;i < length2; ++i)
Maxlen[0][i] = 0;
for(int i = 1; i <= length1; ++i)
for(int j = 1; j <= length2; ++j)
{
if(s1[i - 1] == s2[j - 1])
{
Maxlen[i][j] = Maxlen[i - 1][j - 1] + 1;
}
else
{Maxlen[i][j] = max(Maxlen[i - 1][j], Maxlen[i][j- 1]);}
}
cout<<Maxlen[length1][length2];
for(int i = 0;i < length2;i++)
delete []Maxlen[i];
return 0;
}
int main()
{
string s1,s2;
cin>>s1>>s2;
maxlen(s1, s2);
}