Pagini recente » Cod sursa (job #5956) | Cod sursa (job #201015) | Cod sursa (job #615743) | Statistici Andrei Maroiu (Andrei_Maroiu) | Cod sursa (job #1811998)
#include <bits/stdc++.h>
#define maxN 505
#define MOD 666013
using namespace std;
int n,m,i,j,k,dr,sol;
char a[maxN],b[maxN];
int dp[2][maxN][maxN];
int main()
{
freopen("iv.in","r",stdin);
freopen("iv.out","w",stdout);
scanf("%s\n",a+1);n=strlen(a+1);
scanf("%s",b+1);m=strlen(b+1);
dp[0][0][0]=1;
for(i=0;i<=n;i++)
for(j=0;i+j<=n;j++)
for(k=0;k<=m;k++)
{
dr=i+k-j;
if(dr<0 || dr+k>m)
continue;
if(a[i+1]==a[n-j])
dp[(i+1)%2][j+1][k]=(dp[(i+1)%2][j+1][k]+dp[i%2][j][k])%MOD;
if(a[i+1]==b[m-dr])
dp[(i+1)%2][j][k]=(dp[(i+1)%2][j][k]+dp[i%2][j][k])%MOD;
if(b[k+1]==a[n-j])
dp[i%2][j+1][k+1]=(dp[i%2][j+1][k+1]+dp[i%2][j][k])%MOD;
if(b[k+1]==b[m-dr])
dp[i%2][j][k+1]=(dp[i%2][j][k+1]+dp[i%2][j][k])%MOD;
dp[i%2][j][k]=0;
}
for(i=0;i<=n;i++)
for(j=0;i+j<=n;j++)
sol=(sol+dp[n%2][i][j])%MOD;
printf("%d",sol);
return 0;
}