Pagini recente » Cod sursa (job #3243874) | Cod sursa (job #3125593) | Cod sursa (job #639495) | Cod sursa (job #2515216) | Cod sursa (job #3250502)
#include <bits/stdc++.h>
using namespace std;
#define int long long
ifstream fin("iv.in");
ofstream fout("iv.out");
const int Nmax=505,mod=3210121;
int dp[Nmax][Nmax],newdp[Nmax][Nmax];
signed main()
{
string a,b;
fin>>a>>b;
int A=signed(a.size());
int B=signed(b.size());
int n=A+B;
dp[0][0]=1;
int sol=0;
for(int i=1; i<=n/2; i++)
{
for(int x=0; x<=i && x<=A; x++)
{
if(i-x>B) continue;
for(int y=0; x+y<=A && y<=i; y++)
{
if(i-y>B || 2*i-x-y>B) continue;
int x2=i-x;
int y2=i-y;
int pozx=x-1,pozy=A-y,pozx2=x2-1,pozy2=B-y2;
newdp[x][y]=0;
if(pozx>=0 && pozy<A && a[pozx]==a[pozy]) newdp[x][y]=(newdp[x][y]+dp[x-1][y-1])%mod;
if(pozx>=0 && pozy2<B && a[pozx]==b[pozy2]) newdp[x][y]=(newdp[x][y]+dp[x-1][y])%mod;
if(pozx2>=0 && pozy<A && b[pozx2]==a[pozy]) newdp[x][y]=(newdp[x][y]+dp[x][y-1])%mod;
if(pozx2>=0 && pozy2<B && b[pozx2]==b[pozy2]) newdp[x][y]=(newdp[x][y]+dp[x][y])%mod;
}
}
for(int x=0; x<=i && x<=A; x++)
{
if(i-x>B) continue;
for(int y=0; x+y<=A && y<=i; y++)
{
if(i-y>B || 2*i-x-y>B) continue;
dp[x][y]=newdp[x][y];
if(i==n/2) sol=(sol+dp[x][y])%mod;
}
}
}
fout<<sol<<'\n';
return 0;
}