Pagini recente » Cod sursa (job #2095193) | Cod sursa (job #2653664) | Cod sursa (job #2828712) | Cod sursa (job #1504484) | Cod sursa (job #1723911)
#include<cstdio>
#include<cstring>
#define MAXN 510
#define MOD 3210121
using namespace std;
char a[MAXN],b[MAXN];
int dp[2][MAXN][MAXN];
int main(){
freopen("iv.in","r",stdin);
freopen("iv.out","w",stdout);
int n,m,i,j,k,l,p=0,q=1,answer=0;
scanf("%s%s",a+1,b+1);
n=strlen(a+1);
m=strlen(b+1);
dp[0][0][n+1]=1;
for(i=0;i<=n;i++){
for(j=0;j<=m;j++)
for(k=n+1;k>=i;k--){
l=n-k+1+m+1-i-j;
if(l<0||l>m+1||l<j)
continue;
dp[p][j][k]%=MOD;
if(i+2<k&&a[i+1]==a[k-1])
dp[q][j][k-1]+=dp[p][j][k];
if(i+1<k&&j+1<l&&a[i+1]==b[l-1])
dp[q][j][k]+=dp[p][j][k];
if(i+1<k&&j+1<l&&a[k-1]==b[j+1])
dp[p][j+1][k-1]+=dp[p][j][k];
if(j+2<l&&b[j+1]==b[l-1])
dp[p][j+1][k]+=dp[p][j][k];
if((i+1==k&&j+1==l)||(i+2==k&&j+1==l)||(i+1==k&&j+2==l)){
answer+=dp[p][j][k];
if(answer>=MOD)
answer-=MOD;
}
}
memset(dp[p],0,sizeof(dp[p]));
p^=1;
q^=1;
}
printf("%d",answer);
return 0;
}