Pagini recente » Cod sursa (job #3198462) | Cod sursa (job #2846493) | Cod sursa (job #1698180) | Cod sursa (job #366647) | Cod sursa (job #2484258)
#include <bits/stdc++.h>
#define MOD 3210121
using namespace std;
ifstream fin ("iv.in");
ofstream fout ("iv.out");
int l1, l2, l, i, j, L, sol;
int d[505][505][505];
char a[505], b[505];
int main(){
fin >> a + 1 >> b + 1;
l1 = strlen (a + 1), l2 = strlen (b + 1), l = l1 + l2;
if (a[1] == a[l1]){
d[1][1][1] = 1;
}
if (b[1] == b[l2]){
d[1][0][0] = 1;
}
if (a[1] == b[l2]){
d[1][1][0] = 1;
}
if (b[1] == a[l1]){
d[1][0][1] = 1;
}
for (L=2; L<=l/2; L++){
for (i=0; i<=l1 && i<=L; i++){
for (j=0; j+i<=l1 && j<=L; j++){
if(a[i] == a[l1-j+1] && i > 0 && l1 - j + 1 <= l1){
d[L][i][j] += d[L-1][i-1][j-1];
d[L][i][j] %= MOD;
}
if(b[L-i] == b[l2-L+j+1] && L - i > 0 && l2 - L + j + 1 <= l2){
d[L][i][j] += d[L-1][i][j];
d[L][i][j] %= MOD;
}
if(a[i] == b[l2-L+j+1] && i > 0 && l2 - L + j + 1 <= l2){
d[L][i][j] += d[L-1][i-1][j];
d[L][i][j] %= MOD;
}
if(b[L-i]==a[l1-j+1] && L - i > 0 && l1 - j + 1 <= l1){
d[L][i][j] += d[L-1][i][j-1];
d[L][i][j] %= MOD;
}
}
}
}
for(i=0; i<=l1; i++){
sol+=d[l/2][i][l1-i];
sol %= MOD;
}
fout << sol;
return 0;
}