Pagini recente » Cod sursa (job #1406496) | Cod sursa (job #3242993) | Cod sursa (job #3274555) | Cod sursa (job #2971661) | Cod sursa (job #3170336)
#include <fstream>
#include <cstring>
#define MOD 3210121
#define DIM 505
using namespace std;
ifstream fin("iv.in");
ofstream fout("iv.out");
int n,m,sol,d[2][DIM][DIM];
char s[DIM],t[DIM];
bool ok;
int main() {
fin.getline(s+1,DIM);
fin.getline(t+1,DIM);
n=strlen(s+1);
m=strlen(t+1);
if (s[1]==s[n])
d[1][1][1]=1;
if (s[1]==t[m])
d[1][1][0]=1;
if (t[1]==t[m])
d[1][0][0]=1;
if (t[1]==s[n])
d[1][0][1]=1;
ok=1;
for (int k=2;k<=(n+m)/2;k++) {
ok=1-ok;
for (int i=0;i<=n && i<=k;i++)
for (int j=0;i+j<=n && j<=k;j++) {
d[ok][i][j]=0;
if (s[i]==s[n-j+1] && i>=1 && n-j+1<=n)
d[ok][i][j]+=d[1-ok][i-1][j-1];
if (s[i]==t[m-k+j+1] && i>=1 && m-k+j+1<=m)
d[ok][i][j]+=d[1-ok][i-1][j];
if (t[k-i]==s[n-j+1] && k-i>=1 && n-j+1<=n)
d[ok][i][j]+=d[1-ok][i][j-1];
if (t[k-i]==t[m-k+j+1] && k-i>=1 && m-k+j+1<=m)
d[ok][i][j]+=d[1-ok][i][j];
d[ok][i][j]%=MOD;
}
}
if ((n+m)%2==0)
for (int i=0;i<=n;i++) {
sol+=d[ok][i][n-i];
sol%=MOD;
}
else
for (int i=0;i<=n;i++) {
sol+=d[ok][i][n-i]+d[ok][i][n-i-1];
sol%=MOD;
}
fout<<sol;
return 0;
}