Pagini recente » Cod sursa (job #1881979) | Cod sursa (job #2985071) | Cod sursa (job #2272523) | Cod sursa (job #1109500) | Cod sursa (job #1812002)
#include <bits/stdc++.h>
#define maxN 505
#define MOD 3210121
using namespace std;
int n,m,i,j,k,dr,sol;
char a[maxN],b[maxN];
int dp[2][maxN][maxN];
int main()
{
freopen("iv.in","r",stdin);
freopen("iv.out","w",stdout);
scanf("%s\n",a+1);n=strlen(a+1);
scanf("%s",b+1);m=strlen(b+1);
dp[0][0][0]=1;
for(i=0;i<=n;i++)
for(j=0;i+j<=n;j++)
for(k=0;k<=m;k++)
{
dr=i+k-j;
if(dr<0 || dr+k>m)
continue;
if(i+j+k+dr==n+m || i+j+k+dr==n+m-1)
{
sol=(sol+dp[i%2][j][k])%MOD;
continue;
}
if(a[i+1]==a[n-j])
dp[(i+1)%2][j+1][k]=(dp[(i+1)%2][j+1][k]+dp[i%2][j][k])%MOD;
if(a[i+1]==b[m-dr])
dp[(i+1)%2][j][k]=(dp[(i+1)%2][j][k]+dp[i%2][j][k])%MOD;
if(b[k+1]==a[n-j])
dp[i%2][j+1][k+1]=(dp[i%2][j+1][k+1]+dp[i%2][j][k])%MOD;
if(b[k+1]==b[m-dr])
dp[i%2][j][k+1]=(dp[i%2][j][k+1]+dp[i%2][j][k])%MOD;
dp[i%2][j][k]=0;
}
printf("%d",sol);
return 0;
}