#include<stdio.h>
#include<string.h>
#define mod 3210121
int n,m,d[2][505][505];
char s1[505],s2[505];
void adun(int i1, int j1, int k1, int i2, int j2, int k2)
{
d[i1][j1][k1]=(d[i1][j1][k1]+d[i2][j2][k2])%mod;
}
int main()
{
freopen("iv.in","r",stdin);
freopen("iv.out","w",stdout);
gets(s1+1);
gets(s2+1);
n=strlen(s1+1);
m=strlen(s2+1);
int i,j,k,lim=(n+m)/2;
d[0][0][0]=1;
for(i=0;i<lim;i++)
{
for(j=0;j<=n;j++)
for(k=0;k<=n;k++)
if(d[i&1][j][k])
{
if(j+1<n-k)
if(s1[j+1]==s1[n-k])
adun(i+1&1,j+1,k+1,i&1,j,k);
if(i-j+1<m-i+k)
if(s2[i-j+1]==s2[m-i+k])
adun(i+1&1,j,k,i&1,j,k);
if(j+1<n-k+1 && i-j+1<m-i+k+1)
{
if(s1[j+1]==s2[m-i+k])
adun(i+1&1,j+1,k,i&1,j,k);
if(s1[n-k]==s2[i-j+1])
adun(i+1&1,j,k+1,i&1,j,k);
}
printf("");
}
memset(d[i&1],0,sizeof(d[i&1]));
}
int sol=0;
for(i=0;i<2;i++)
for(j=0;j<=n;j++)
for(k=0;k<=n;k++)
sol=(sol+d[i][j][k])%mod;
printf("%d\n",sol);
return 0;
}