Pagini recente » Cod sursa (job #30768) | Cod sursa (job #722680) | Cod sursa (job #2593370) | Cod sursa (job #3135783) | Cod sursa (job #726449)
Cod sursa(job #726449)
#include <cstdio>
#include <cstring>
#define maxn 510
#define mod 3210121
using namespace std;
int n, m, i, j, k, l, sol, st;
char s1[maxn], s2[maxn];
int d[2][maxn][maxn];
int main() {
freopen("iv.in", "r", stdin);
freopen("iv.out", "w", stdout);
scanf(" %s ", s1 + 1);
scanf(" %s ", s2 + 1);
for (n = 1; s1[n] != 0; n++); n--;
for (m = 1; s2[m] != 0; m++); m--;
d[0][0][0] = 1;
st = 0;
for (i = 0; i < (n + m) / 2; i++) {
for (j = 0; j <= i; j++) {
for (k = 0; k <= n - j; k++) {
if (s1[j + 1] == s1[n - k] && j + 1 < n - k)
d[1 - st][j + 1][k + 1] = (d[1 - st][j + 1][k + 1] + d[st][j][k]) % mod;
if (s1[j + 1] == s2[m - (i - k)] && j < n - k && i - j < m - (i - k))
d[1 - st][j + 1][k] = (d[1 - st][j + 1][k] + d[st][j][k]) % mod;
if (s2[i - j + 1] == s1[n - k] && j < n - k && i - j < m - (i - k))
d[1 - st][j][k + 1] = (d[1 - st][j][k + 1] + d[st][j][k]) % mod;
if (s2[i - j + 1] == s2[m - (i - k)] && i - j + 1< m - (i - k))
d[1 - st][j][k] = (d[1 - st][j][k] + d[st][j][k]) % mod;
}
}
if (i < (n + m / 2) - 1)
memset(d[st], 0, sizeof(d[st]));
st = 1 - st;
}
for (i = 0; i <= n; i++)
for (j = 0; j <= n; j++)
sol = (sol + d[st][i][j]) % mod;
printf("%d\n", sol);
}