Pagini recente » Cod sursa (job #568567) | Cod sursa (job #1933355) | Cod sursa (job #2868705) | Cod sursa (job #2260362) | Cod sursa (job #1998361)
#include<cstdio>
#include<cstring>
using namespace std;
const int nmax=505;
const int mod=3210121;
char a[nmax],b[nmax];
int d[2][nmax][nmax];
int main()
{
freopen("iv.in","r",stdin);
freopen("iv.out","w",stdout);
int i,j,k,l,m,n,rez=0,pre,cu;
gets(a+1);
gets(b+1);
n=strlen(a+1);
m=strlen(b+1);
d[0][0][n+1]=1;
for(i=0;i<=n;++i)
{
cu=i&1;
pre=(i&1)^1;
for(j=0;j<=m;++j)
for(k=n+1;k>=i;--k)
{
l=n+m+2-k-i-j;
if(l < 0 || l > m+1 || l < j)
continue;
d[cu][i][j] %= mod;
if(i+1 < k-1 && a[i+1] == a[k-1])
d[pre][j][k-1]+=d[cu][j][k];
if(k-1 > i && j+1 < l && a[k-1]==b[j+1])
d[cu][j+1][k-1]+=d[cu][j][k];
if(i+1 < k && l-1 > j && a[i+1]==b[l-1])
d[pre][j][k]+=d[cu][j][k];
if(j+1 < l-1 && b[j+1]==b[l-1])
d[cu][j+1][k]+=d[cu][j][k];
if((i+1 == k && j+1 == l) || (i+2 == k && j+1 ==l) || (i+1 == k && j+2 == l))
{
rez+=d[cu][j][k];
if(rez >= mod)
rez-=mod;
}
}
memset(d[cu] , 0 , sizeof(d[cu]));
}
rez %= mod;
printf("%d",rez);
}