{
TASK:balls
LANG:PASCAL
}
type
newa = record
b,k:char;
f,l,p:integer;
end;

var
a:array[0..999]of newa;
i,j1,j2:integer;

procedure getdata;
var
i:char;
begin
j1:=0;
while not eoln do begin
read(i);
if (ord(i)<=122)and(ord(i)>=97)
then begin
     inc(j1);
     a[j1].b:=i;
     end;
end;
j2:=0;
readln;
while not eoln do begin
read(i);
if (ord(i)<=122)and(ord(i)>=97)
then begin
     inc(j2);
     a[j2].k:=i;
     end;
end;

end;

function find(z:char;x,y:integer):integer;
var i:integer;
begin
find:=0;
for i:=x to y do if a[i].k=z then begin find:=i;break;end;
end;

procedure calculate;
var
bestl,bestp,temp,q,i:integer;
begin
a[1].f:=0;
a[1].p:=find(a[1].b,1,j2);
if a[1].p>0
then a[1].l:=1 else a[1].l:=0;
bestl:=a[1].l;
bestp:=a[1].l;
for i:=2 to j1 do
    begin
    temp:=find(a[i].b,a[bestp].p+1,j2);
    q:=bestp;
    while (temp=0)and(q>0) do
          begin
          q:=a[q].f;
          temp:=find(a[i].b,a[q].p+1,j2);
          end;
    if temp=0
    then begin a[i].l:=0;a[i].p:=0;a[i].f:=0;end
    else begin a[i].l:=a[q].l+1;a[i].p:=temp;a[i].f:=q; if (a[i].l>bestl)or((a[i].l=bestl)and(a[i].p<a[bestp].p)) then
                                                        begin bestl:=a[i].l;
                                                              bestp:=i;
                                                        end;
         end;
    end;
writeln(bestl);
end;

begin
for i:=0 to 999 do with a[i] do begin p:=0;l:=0;f:=0;end;
getdata;
calculate;
end.