Pagini recente » Cod sursa (job #1963138) | Cod sursa (job #1231395) | Cod sursa (job #2220975) | Cod sursa (job #1303572) | Cod sursa (job #563300)
Cod sursa(job #563300)
#include <stdio.h>
#include <string.h>
#define MOD 3210121
#define NMAX 505
char A[NMAX],B[NMAX];
int n,m,C[2][NMAX][NMAX],rez;
inline int lit(char x)
{
return x>='a' && x<='z';
}
void read()
{
fgets(A+1,NMAX,stdin);
fgets(B+1,NMAX,stdin);
while (lit(A[n+1])) n++;
while (lit(B[m+1])) m++;
}
void solve()
{
C[0][0][0]=1;
int i,j,k,poz,val=(n+m)/2+(n+m)%2,act,act2;
for (i=0; i<=n && i<=val; i++)
{
act=i & 1; act2=(i+1) & 1;
memset(C[act2],0,sizeof(C[act]));
for (j=0; j<=m && j<=val-i; j++)
for (k=0; k<=n && k<=val; k++)
if (i+j<=m+k && i+j<val)
{
poz=i+j-k;
if (A[i+1]==A[n-k-1])
{
C[act2][j][k+1]+=C[act][j][k];
if (C[act2][j][k+1]>=MOD)
C[act2][j][k+1]-=MOD;
}
if (A[i+1]==B[m-poz-1])
{
C[act2][j][k]+=C[act][j][k];
if (C[act2][j][k]>=MOD)
C[act2][j][k]-=MOD;
}
if (B[j+1]==A[n-k-1])
{
C[act][j+1][k+1]+=C[act][j][k];
if (C[act][j+1][k+1]>=MOD)
C[act][j+1][k+1]-=MOD;
}
if (B[j+1]==B[m-poz-1])
{
C[act][j+1][k]+=C[act][j][k];
if (C[act][j+1][k]>=MOD)
C[act][j+1][k]-=MOD;
}
}
for (j=0; j<=n && j<=val; j++)
{
rez+=C[act][val-i][j];
if (rez>=MOD)
rez-=MOD;
}
}
}
int main()
{
freopen("iv.in","r",stdin);
freopen("iv.out","w",stdout);
read();
solve();
printf("%d\n",rez);
return 0;
}