//Ilie Dumitru
#include<cstdio>
#include<cstring>
const int NMAX=512;
struct trie
{
trie* sons[26];
trie()
{
int i;
for(i=0;i<26;++i)
this->sons[i]=0;
}
~trie()
{
int i;
for(i=0;i<26;++i)
if(this->sons[i])
delete this->sons[i];
}
};
int N, M;
int max[NMAX][NMAX];
char s[2][NMAX];
trie* t=0;
void dp()
{
int i, j;
N=strlen(s[0]+1);
if(s[0][N]=='\n')
s[0][N--]=0;
M=strlen(s[1]+1);
if(s[1][M]=='\n')
s[1][M--]=0;
for(i=1;i<=N;++i)
for(j=1;j<=M;++j)
{
if(s[0][i]==s[1][j])
max[i][j]=max[i-1][j-1]+1;
else if(max[i-1][j]>max[i][j-1])
max[i][j]=max[i-1][j];
else
max[i][j]=max[i][j-1];
}
}
void add(trie*& t, int i, int j, int up=0)
{
if(!t)
t=new trie();
if(max[i][j])
{
if(max[i][j]==max[i-1][j] && up!=1)
add(t, i-1, j, 0);
if(max[i][j]==max[i][j-1])
add(t, i, j-1, 1);
if(s[0][i]==s[1][j])
add(t->sons[s[0][i]-'a'], i-1, j-1);
}
}
int cnt(trie* t)
{
if(!t)
return 0;
int i, ans=0;
for(i=0;i<26;++i)
ans+=cnt(t->sons[i]);
return ans+!ans;
}
int main()
{
FILE* f=fopen("subsir.in", "r"), *g=fopen("subsir.out", "w");
//FILE* f=stdin, *g=stdout;
fgets(s[0]+1, NMAX, f);
fgets(s[1]+1, NMAX, f);
dp();
add(t, N, M);
fprintf(g, "%d\n", cnt(t));
fclose(f);
fclose(g);
return 0;
}