Pagini recente » Cod sursa (job #83230) | Cod sursa (job #268875) | Cod sursa (job #1201477) | Cod sursa (job #2377268) | Cod sursa (job #2485696)
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
ifstream fin("iv.in");
ofstream fout("iv.out");
int n,m,d[4][510][510],s,t,k;
char a[510],b[510];
int main()
{
int mod=3210121;
fin>>a+1>>b+1;
n=strlen(a+1);
m=strlen(b+1);
if(a[1]==a[n])
d[1][1][1]=1;
if(a[1]==b[m])
d[1][1][0]=1;
if(b[1]==a[n])
d[1][0][1]=1;
if(b[1]==b[m])
d[1][0][0]=1;
for(int k1=2;k1<=(n+m)/2;k1++)
{
for(int i=0;i<=n && i<=k1;i++)
{
for(int j=0; j<=m && j+i<=n;j++)
{
d[k][i][j]=0;
if(a[i]==a[n-j+1] && i>0 && n-j+1<=n)
{
d[k][i][j]+=d[1-k][i-1][j-1];
d[k][i][j]%=mod;
}
if(a[i]==b[m-j+1] && i>0 && m-k1+j+1<=m)
{
d[k][i][j]+=d[1-k][i-1][j];
d[k][i][j]%=mod;
}
if(b[k1-i]==a[n-j+1] && k1-i>0 && n-j+1<=n)
{
d[k][i][j]+=d[1-k][i][j-1];
d[k][i][j]%=mod;
}
if(a[i]==a[n-1] && k1-i>0 && m-k1+j+1<=m)
{
d[k][i][j]+=d[1-k][i][j];
d[k][i][j]%=mod;
}
}
}
k=1-k;
}
k=1-k;
if((n+m)%2)
for(int i=0;i<n;i++){
s+=d[k][i][n-i];
s%=mod;
s+=d[k][i][n-i-1];
s%=mod;
}
else
for(int i=0;i<=n;i++){
s+=d[k][i][n-i];
s%=mod;
}
fout<<s;
return 0;
}