Pagini recente » Cod sursa (job #2807050) | Cod sursa (job #282569) | Cod sursa (job #2673053) | Cod sursa (job #128430) | Cod sursa (job #3257600)
#include <iostream>
#include <fstream>
#include <vector>
//#include <bits/stdc++.h>
#define in fin
#define out fout
#define mod 3210121
#define ll long long
using namespace std;
ifstream fin("iv.in");
ofstream fout("iv.out");
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
string a, b; in >> a >> b;
a = "#" + a + "#";
b = "#" + b + "#";
int n = a.size();
int m = b.size();
int nr_op = (n - 2 + m - 2) / 2;
ll dp[nr_op + 1][n][n];
for(int p = 0; p <= nr_op; p++){
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++) dp[p][i][j] = 0;
}
}
dp[0][0][n - 1] = 1;
for(int p = 0; p < nr_op; p++){
for(int i = 0; i <= n - 1; i++){
for(int j = n - 1; j >= i; j--){
// cout << "i = " << i << " j = " << j << " dp = " << dp[p][i][j] << '\n';
int i2 = p - i;
int j2 = m - (p - (n - j - 1)) - 1;
// cout << "i2 = " << i2 << " j2 = " << j2 << '\n';
// cout << " -- > a = (i) " << a[i] << " (j) = " << a[j] << '\n';
// cout << " -- > a = (i2) " << b[i2] << " (j2) = " << b[j2] << '\n';
if(a[i] == a[j]) dp[p + 1][i + 1][j - 1] = (dp[p + 1][i + 1][j - 1] + dp[p][i][j]) % mod;
if(a[i] == b[j2]) dp[p + 1][i + 1][j] = (dp[p + 1][i + 1][j] + dp[p][i][j]) % mod;
if(b[i2] == a[j]) dp[p + 1][i][j - 1] = (dp[p + 1][i][j - 1] + dp[p][i][j]) % mod;
if(b[i2] == b[j2]) dp[p + 1][i][j] = (dp[p + 1][i][j] + dp[p][i][j]) % mod;
// cout << "dp[1][1][2] = " << dp[1][1][2] << '\n';
}
}
}
// for(int i = 0; i < n; i++){
// for(int j = 0; j < n; j++) cout << dp[2][i][j] << " ";
// cout << '\n';
// }
ll s = 0;
for(int i = 0; i < n; i++) s += dp[nr_op][i][n - i - 1];
out << s << '\n';
return 0;
}