Pagini recente » Cod sursa (job #153173) | Cod sursa (job #229581) | Cod sursa (job #1781616) | Cod sursa (job #658164) | Cod sursa (job #255114)
Cod sursa(job #255114)
#include <stdio.h>
#define maxn 202
using namespace std;
long d[maxn][maxn][maxn];
long n, i, j, k, l1, l2, sol, l;
char a[maxn], b[maxn];
const long co=3210121;
int main()
{
freopen("iv.in", "r", stdin);
freopen("iv.out", "w", stdout);
scanf("%c", &a[1]);
l1=1;
while(a[l1]>='A')
{
l1++;
scanf("%c", &a[l1]);
}
l1--;
scanf("%c", &b[1]);
l2=1;
while(b[l2]>='A')
{
l2++;
scanf("%c", &b[l2]);
}
l2--;
d[0][0][l1+1]=1;
for(i=0; i<=l1; i++)
{
for(j=0; j<=l2; j++)
{
for(k=i+1; k<=l1+1; k++)
{
l=l1+l2-k+2-i-j;
if(a[i+1]==a[k-1] && i+1<=k-1)
{
d[i+1][j][k-1]+=d[i][j][k];
if(d[i+1][j][k-1]>=co) d[i+1][j][k-1]-=co;
}
if(a[i+1]==b[l-1] && i+1<=l-1)
{
d[i+1][j][k]+=d[i][j][k];
if(d[i+1][j][k]>=co) d[i+1][j][k]-=co;
}
if(b[j+1]==a[k-1] && j+1<=k-1)
{
d[i][j+1][k-1]+=d[i][j][k];
if(d[i][j+1][k-1]>=co) d[i][j+1][k-1]-=co;
}
if(b[j+1]==b[l-1] && j+1<=l-1)
{
d[i][j+1][k]+=d[i][j][k];
if(d[i][j+1][k]>=co) d[i][j+1][k]-=co;
}
}
for(k=i; k<=i+1; k++)
{
l=l1+l2-k+2-i-j;
if(l-j<=1 && k-i<=1)
{
sol+=d[i][j][k];
sol%=co;
}
}
}
}
printf("%d\n", sol);
return 0;
}