Pagini recente » Cod sursa (job #933450) | Cod sursa (job #2265767) | Cod sursa (job #652602) | Cod sursa (job #44471) | Cod sursa (job #3185142)
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
ifstream fin ( "iv.in" );
ofstream fout ( "iv.out" );
const int N = 600, MOD = 3210121;
long long dp[2][N][N];
int main () {
int n, m;
string s1, s2;
fin >> s1 >> s2;
s1 = ' ' + s1;
s2 = ' ' + s2;
n = (int)s1.size() - 1;
m = (int)s2.size() - 1;
if ( s1[1] == s1[n] )
dp[1][1][1] = 1;
if ( s1[1] == s2[m] )
dp[1][1][0] = 1;
if ( s2[1] == s2[m] )
dp[1][0][0] = 1;
if( s2[1] == s1[n] )
dp[1][0][1] = 1;
for ( int k = 2; k <= (n + m) / 2; k++ ) {
for( int i = 0; i <= n && i <= k; i++ ) {
for ( int j = 0; i + j <= n && j <= k; j++ ) {
if( s1[i] == s1[n - j + 1] && i >= 1 && n - j + 1 <= n )
dp[k % 2][i][j] += dp[(k - 1) % 2][i - 1][j - 1];
if( s1[i]==s2[m - k + j + 1] && i >= 1 && m - k + j + 1 <= m )
dp[k % 2][i][j] += dp[(k - 1) % 2][i - 1][j];
if( s2[k - i] == s1[n - j + 1] && k - i >= 1 && n - j + 1 <= n )
dp[k % 2][i][j] += dp[(k - 1) % 2][i][j - 1];
if( s2[k - i] == s2[m - k + j + 1] && k - i >= 1 && m - k + j + 1 <= m )
dp[k % 2][i][j] += dp[(k - 1) % 2][i][j];
dp[k % 2][i][j] %= MOD;
}
}
}
long long ans = 0;
if ( ( n + m ) % 2 == 0 ) {
for ( int i = 0; i <= n; i++ )
ans = (ans + dp[((n + m) / 2) % 2][i][n - i]) % MOD;
}
else {
for ( int i = 0; i <= n; i++ )
ans = ( ans + dp[((n + m) / 2) % 2][i][n - i] + dp[((n + m) / 2) % 2][i][n - i - 1] ) % MOD;
}
fout << ans;
return 0;
}