Pagini recente » Cod sursa (job #318002) | Cod sursa (job #926068) | Cod sursa (job #2589335) | Cod sursa (job #555163) | Cod sursa (job #3250500)
#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][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][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;
dp[i][x][y]=0;
if(pozx>=0 && pozy<A && a[pozx]==a[pozy]) dp[i][x][y]=(dp[i][x][y]+dp[i-1][x-1][y-1])%mod;
if(pozx>=0 && pozy2<B && a[pozx]==b[pozy2]) dp[i][x][y]=(dp[i][x][y]+dp[i-1][x-1][y])%mod;
if(pozx2>=0 && pozy<A && b[pozx2]==a[pozy]) dp[i][x][y]=(dp[i][x][y]+dp[i-1][x][y-1])%mod;
if(pozx2>=0 && pozy2<B && b[pozx2]==b[pozy2]) dp[i][x][y]=(dp[i][x][y]+dp[i-1][x][y])%mod;
if(i==n/2) sol=(sol+dp[i][x][y])%mod;
}
}
}
fout<<sol<<'\n';
return 0;
}