Pagini recente » Cod sursa (job #192744) | Cod sursa (job #320067) | Cod sursa (job #2085329) | Cod sursa (job #817932) | Cod sursa (job #2281512)
#define DM 505
#define MD 3210121
#include <fstream>
using namespace std;
ifstream fi ("iv.in");
ofstream fo ("iv.out");
int n, m, sol, dp[DM][DM][DM];
string a, b;
int main() {
fi >> a >> b;
n = a.size();
m = b.size();
dp[1][1][0] += (a[0] == a[n-1]);
dp[0][1][1] += (b[0] == a[n-1]);
dp[1][0][0] += (a[0] == b[m-1]);
dp[0][0][1] += (b[0] == b[m-1]);
if ((n + m)/2 == 1) {
sol += (a[0] == b[0]);
}
for (int lg = 1; lg <= (m + n)/2; ++lg)
for (int i = 0; i <= lg; ++i)
if (i <= n && lg - i <= m)
for (int j = 0; j <= lg; ++j)
if (j <= n - i && lg - j <= m - lg + i) {
if (a[i] == a[n-1-j]) {
dp[i+1][j+1][lg-i] += dp[i][j][lg-i];
dp[i+1][j+1][lg-i] %= MD;
}
if (a[i] == b[m-1-lg+j]) {
dp[i+1][j][lg-i] += dp[i][j][lg-i];
dp[i+1][j][lg-i] %= MD;
}
if (b[lg-i] == a[n-1-j]) {
dp[i][j+1][lg-i+1] += dp[i][j][lg-i];
dp[i][j+1][lg-i+1] %= MD;
}
if (b[lg-i] == b[m-1-lg+j]) {
dp[i][j][lg-i+1] += dp[i][j][lg-i];
dp[i][j][lg-i+1] %= MD;
}
}
for (int i = 0; i <= n; ++i) {
sol += dp[i][n-i][(n+m)/2-i];
sol %= MD;
}
fo << sol;
return 0;
}