Pagini recente » Cod sursa (job #141656) | Cod sursa (job #17749) | Cod sursa (job #238087) | Monitorul de evaluare | Cod sursa (job #1804787)
#include<bits/stdc++.h>
#define Xp 3210121
using namespace std;
ifstream f("iv.in");
ofstream g("iv.out");
int l,n,dr,m,p,i,j,k,rez,D[2][1<<9][1<<9];
char s[1<<9],S[1<<9];
void ad(int &a,int b)
{
a+=b;
if(a>=Xp) a-=Xp;
}
int main ()
{
f>>(s+1)>>(S+1);
n=strlen(s+1);
m=strlen(S+1);
l=n+m;
D[0][0][0]=1;
for(i=0;i<=n;++i,p^=1)
for(j=0;i+j<=n;++j)
for(k=0;k<=m;++k)
{
dr=i+k-j;
if(dr<0||dr+k>m) continue;
int x=D[p][j][k];
if(i+j+k+dr==l||i+j+k+dr==l-1)
{
ad(rez,x);
continue;
}
if(s[i+1]==s[n-j]) ad(D[p^1][j+1][k],x);
if(m-dr>=1&&s[i+1]==S[m-dr]) ad(D[p^1][j][k],x);
if(S[k+1]==s[n-j]) ad(D[p][j+1][k+1],x);
if(m-dr>=1&&S[k+1]==S[m-dr]) ad(D[p][j][k+1],x);
D[p][j][k]=0;
}
g<<rez;
return 0;
}