Pagini recente » Cod sursa (job #1577646) | Cod sursa (job #3280519) | Cod sursa (job #752447) | Cod sursa (job #1849115) | Cod sursa (job #66477)
Cod sursa(job #66477)
#include<stdio.h>
#include<string.h>
#define Nm 501
#define Mod 3210121
#define min(a,b) ((a)<(b)?(a):(b))
char A[Nm],B[Nm];
int Nr[2][Nm][Nm];
void read()
{
freopen("iv.in","r",stdin);
scanf("%s%s",A,B);
}
int pal(char A[], int l, int r)
{
while(l<r)
if(A[l++]!=A[r--])
return 0;
return 1;
}
int solve()
{
int n,m,i,j,k,l,c,p;
n=strlen(A);
m=strlen(B);
c=0; p=1; i=n+m>>1;
for(i=min(i,n);i>=0;--i)
{
j=(n+m>>1)-i;
for(j=min(j,m);j>=0;--j)
{
k=i+j;
for(k=min(k,n-i);k>=0;--k)
{
l=i+j-k;
if(l+j>m)
break;
if(i+k==n)
Nr[c][j][k]=pal(B,j,m-l-1);
else
if(j+l==m)
Nr[c][j][k]=pal(A,i,n-k-1);
else
{
Nr[c][j][k]=0;
if(i<n-k-1 && A[i]==A[n-k-1])
Nr[c][j][k]+=Nr[p][j][k+1];
if(A[i]==B[m-l-1])
{
Nr[c][j][k]+=Nr[p][j][k];
if(Nr[c][j][k]>=Mod)
Nr[c][j][k]-=Mod;
}
if(B[j]==A[n-k-1])
{
Nr[c][j][k]+=Nr[c][j+1][k+1];
if(Nr[c][j][k]>=Mod)
Nr[c][j][k]-=Mod;
}
if(j<m-l+1 && B[j]==B[m-l-1])
{
Nr[c][j][k]+=Nr[c][j+1][k];
if(Nr[c][j][k]>=Mod)
Nr[c][j][k]-=Mod;
}
}
}
}
c^=1; p^=1;
}
return Nr[p][0][0];
}
void write(int s)
{
freopen("iv.out","w",stdout);
printf("%d\n",s);
}
int main()
{
read();
write(solve());
return 0;
}