/*
TASK:balls
LANG:C++
*/

#include<iostream>
#include<fstream>
#include<string.h>
#define maxn 1005
#define fi cin
#define max(q,w)(q>w)?q:w
using namespace std;
struct asd{int a,last;}f[maxn];
int i,j,k,n,m,savebin,ans;
char a[maxn],b[maxn],t[maxn];
bool check(int p){
	if(p==0){
   	for(k=1;k<=m;k++)
      	if(a[i]==b[k]){savebin=k;return 1;}
   	return 0;
   }
	for(p++;p<=m;p++)
   	if(a[i]==b[p]){savebin=p;return 1;}
   return 0;
}
void solve(){
	for(i=1;i<=n;i++){
   	for(j=0;j<=i-1;j++)
      	if(check(f[j].last)){
         	if(f[i].a<f[j].a+1){
            	f[i].a=f[j].a+1;
               f[i].last=savebin;
            }
         	else if(f[i].a==f[j].a+1 && savebin<f[i].last)f[i].last=savebin;
         }
   }
   for(i=1;i<=n;i++)ans=max(ans,f[i].a);//cout<<f[i].a<<" ";
   cout<<ans<<"\n";
}
int main(){
  //ifstream fi("inp.txt");
  fi>>t;
  a[0]='*';a[1]='\0';
  strcat(a,t);
  fi>>t;
  b[0]='*';b[1]='\0';
  strcat(b,t);
  n=strlen(a)-1;
  m=strlen(b)-1;
//  cout<<a<<"\n"<<b<<"\n";
  solve();
  return 0;
}

