Pagini recente » Cod sursa (job #166242) | Cod sursa (job #2732024) | Cod sursa (job #900563) | Cod sursa (job #257447) | Cod sursa (job #2486782)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("iv.in");
ofstream fout("iv.out");
char a[505],b[505];
int n,m,t,k,i,j,af,d[3][510][510];
int main()
{
fin >> a+1;
fin >> 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]==b[m]) d[1][0][0]=1;
if (b[1]==a[n]) d[1][0][1]=1;
t=0;
for (k=2;k<=(n+m)/2;k++)
{
for (i=0;i<=n && i<=k;i++)
{
for (j=0;j+i<=n && j<=k;j++)
{
if (a[i]==a[n-j+1] && i>0 && n-j+1<=n) d[t][i][j]+=d[1-t][i-1][j-1];
if (a[i]==b[m-k+j+1] && i>0 && m-k+j+1<=m) d[t][i][j]+=d[1-t][i-1][j];
if (b[k-i]==a[n-j+1] && k-i>0 && n-j+1<=n) d[t][i][j]+=d[1-t][i][j-1];
if (b[k-i]==b[m-k+j+1] && k-i>0 && m-k+j+1<=m) d[t][i][j]+=d[1-t][i][j];
d[t][i][j]%=3210121;
}
}
if (t==0) t=1;
else t=0;
}
if (t==0) t=1;
else t=0;
if ((n+m)%2!=0) for (i=0;i<n;i++)
{
af+=d[t][i][n-i];
af%=3210121;
af+=d[t][i][n-i-1];
af%=3210121;
}
else for (i=0;i<=n;i++)
{
af+=d[t][i][n-i];
af%=3210121;
}
fout << af;
return 0;
}