Pagini recente » Cod sursa (job #3198502) | Cod sursa (job #1480381) | Cod sursa (job #628446) | Cod sursa (job #1667216) | Cod sursa (job #3257767)
#pragma GCC optimize("Ofast")
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
#ifdef LOCAL
ifstream fin("input.txt");
#define fout cout
#else
ifstream fin("iv.in");
ofstream fout("iv.out");
#define endl '\n'
#endif
constexpr int NMAX = 205;
constexpr int MOD = 3210121;
int n, m;
string a, b;
int dp[NMAX][NMAX][NMAX];
void read() {
fin >> a >> b;
n = a.size();
m = b.size();
a = "$" + a + "$";
b = "$" + b + "$";
}
int solve() {
int ans = 0;
dp[0][0][0] = 1;
for (int l1 = 0; l1 <= n; l1++) {
for (int r1 = 0; l1 + r1 <= n; r1++) {
for (int l2 = 0; l2 <= m && l1 + l2 <= (n + m) / 2; l2++) {
const int r2 = l1 + l2 - r1;
if (r2 < 0 || (l2 + r2) > m) continue;
if (l1 && r1 && a[l1] == a[n - r1 + 1]) {
dp[l1][r1][l2] += dp[l1 - 1][r1 - 1][l2];
}
if (l1 && r2 && a[l1] == b[m - r2 + 1]) {
dp[l1][r1][l2] += dp[l1 - 1][r1][l2];
}
if (l2 && r1 && b[l2] == a[n - r1 + 1]) {
dp[l1][r1][l2] += dp[l1][r1 - 1][l2 - 1];
}
if (l2 && r2 && b[l2] == b[m - r2 + 1]) {
dp[l1][r1][l2] += dp[l1][r1][l2 - 1];
}
dp[l1][r1][l2] %= MOD;
if (l1 + l2 == (n + m) / 2) {
(ans += dp[l1][r1][l2]) %= MOD;
}
}
}
}
return ans;
}
signed main() {
read();
fout << solve() << endl;
return 0;
}