Pagini recente » Cod sursa (job #2115317) | Cod sursa (job #2202467) | Cod sursa (job #2461655) | Cod sursa (job #2757653) | Cod sursa (job #2252650)
#include<bits/stdc++.h>
using namespace std;
const int maxN=1e3;
const int mod=3210121;
char s1[maxN],s2[maxN];
int dp[2][maxN][maxN];
inline void add(int &x,int y)
{
x+=y;
x%=mod;
}
int main()
{
freopen("iv.in","r",stdin);
freopen("iv.out","w",stdout);
scanf("%s",s1+1);
scanf("\n");
scanf("%s",s2+1);
int n=strlen(s1+1);
int m=strlen(s2+1);
int len=(n+m)>>1;
dp[0][0][0]=1;
for(int l=1;l<=len;l++)
{
int line=(l&1);
for(int i=0;i<=l;i++)
for(int k=0;k<=l;k++)
dp[line][i][k]=0;
for(int i=0;i<=min(l,n);i++)
{
int j=l-i;
if(j>m) continue;
for(int k=0;k<=l && (i+k)<=n;k++)
{
int t=l-k;
if((j+t)>m) continue;
if(i && k && s1[i]==s1[n-k+1]) add(dp[line][i][k],dp[!line][i-1][k-1]);
if(i && t && s1[i]==s2[m-t+1]) add(dp[line][i][k],dp[!line][i-1][k]);
if(j && k && s2[j]==s1[n-k+1]) add(dp[line][i][k],dp[!line][i][k-1]);
if(j && t && s2[j]==s2[m-t+1]) add(dp[line][i][k],dp[!line][i][k]);
}
}
}
int sol=0;
for(int i=0;i<=len;i++)
for(int k=0;k<=len;k++)
if((i+k)<=n) add(sol,dp[len&1][i][k]);
printf("%d\n",sol);
return 0;
}