Pagini recente » Cod sursa (job #226821) | Cod sursa (job #2190235) | Cod sursa (job #2709915) | Cod sursa (job #697431) | Cod sursa (job #2484261)
#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, t;
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[0][1][1] = 1;
}
if (b[1] == b[l2]){
d[0][0][0] = 1;
}
if (a[1] == b[l2]){
d[0][1][0] = 1;
}
if (b[1] == a[l1]){
d[0][0][1] = 1;
}
t = 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 && j > 0){
d[t][i][j] += d[1-t][i-1][j-1];
d[t][i][j] %= MOD;
}
if(b[L-i] == b[l2-L+j+1] && i < L && j < L){
d[t][i][j] += d[1-t][i][j];
d[t][i][j] %= MOD;
}
if(a[i] == b[l2-L+j+1] && i > 0 && j < L){
d[t][i][j] += d[1-t][i-1][j];
d[t][i][j] %= MOD;
}
if(b[L-i]==a[l1-j+1] && i < L && j > 0){
d[t][i][j] += d[1-t][i][j-1];
d[t][i][j] %= MOD;
}
}
}
t = 1 - t;
}
if (l%2){
for (i=0; i<l1; i++) {
sol += d[1-t][i][l1-i-1];
sol %= MOD;
sol += d[1-t][i][l1-i];
sol %= MOD;
}
fout << sol;
return 0;
}
for (i=0; i<=l1; i++){
sol += d[1-t][i][l1-i];
sol %= MOD;
}
fout << sol;
return 0;
}