Pagini recente » Cod sursa (job #2066751) | Cod sursa (job #2400738) | Cod sursa (job #1421090) | Cod sursa (job #1286581) | Cod sursa (job #2485147)
#include <bits/stdc++.h>
using namespace std;
#define dim 505
#define mod 3210121
ifstream fin("iv.in");
ofstream fout("iv.out");
int d[dim][dim][dim],sts,stj,drs,drj,l,i,j,n,m,sol;
char s1[dim],s2[dim];
int main()
{
fin>>(s1+1)>>(s2+1);
n=strlen(s1+1);
m=strlen(s2+1);
if(s1[1]==s1[n])
d[1][1][1]=1;
if(s2[1]==s2[m])
d[1][0][0]=1;
if(s1[1]==s2[m])
d[1][1][0]=1;
if(s2[1]==s1[n])
d[1][0][1]=1;
for(l=2;l<=(n+m)/2;l++){
for(i=0;i<=n && i<=l;i++)
for(j=0;i+j<=n && j<=l;j++){
if(s1[i]==s1[n-j+1] && i>0 && n-j+1<=n){
d[l][i][j]+=d[l-1][i-1][j-1];
d[l][i][j]%=mod;
}
if(s1[i]==s2[m-l+j+1] && i>0 && m-l+j+1<=m){
d[l][i][j]+=d[l-1][i-1][j];
d[l][i][j]%=mod;
}
if(s2[l-i]==s1[n-j+1] && l-i>0 && n-j+1<=n){
d[l][i][j]+=d[l-1][i][j-1];
d[l][i][j]%=mod;
}
if(s2[l-i]==s2[m-l+j+1] && l-i>0 && m-l+j+1<=m){
d[l][i][j]+=d[l-1][i][j];
d[l][i][j]%=mod;
}
}
}
if ((n+m)%2==0)
for (i=0;i<=n;i++){
sol+=d[l-1][i][n-i];
sol%=mod;
}
else
for (i=0;i<n;i++){
sol+=d[l-1][i][n-i-1];
sol%=mod;
sol+=d[l-1][i][n-1];
sol%=mod;
}
fout<<sol;
}