Pagini recente » Cod sursa (job #2478284) | Cod sursa (job #2184070) | Cod sursa (job #1051622) | Cod sursa (job #671209) | Cod sursa (job #2486895)
#include <fstream>
#include <cstring>
#define f in
#define g out
#define mod 3210121
using namespace std;
ifstream in ( "iv.in" );
ofstream out( "iv.out" );
char a[510], b[510];
int d[2][510][510];
int n, m, l, i, j, t, sol;
int main()
{
f>>(a+1)>>(b+1);
n = strlen(a+1); m = strlen(b+1);
if ( a[1] == a[n] ) d[1][1][1] = 1;
if ( a[1] == b[m] ) d[1][1][0] = 1;
if ( b[1] == a[n] ) d[1][0][1] = 1;
if ( b[1] == b[m] ) d[1][0][0] = 1;
for ( l=2; l <= (n+m)/2; l++){
for ( i=0; i <= n && i <= l; i++ )
for ( j=0; i+j <= n && j <= l; j++ ){
d[t][i][j] = 0;
if ( a[i] == a[n-j+1] && i && n-j+1 <= n )
d[t][i][j] += d[1-t][i-1][j-1], d[t][i][j] %= mod;
if ( a[i] == b[m-l+j+1] && i && m-l+j+1 <= m )
d[t][i][j] += d[1-t][i-1][j], d[t][i][j] %= mod;
if ( b[l-i] == a[n-j+1] && l-i && n-j+1 <= n )
d[t][i][j] += d[1-t][i][j-1], d[t][i][j] %= mod;
if ( b[l-i] == b[m-l+j+1] && l-i && m-l+j+1 <= m )
d[t][i][j] += d[1-t][i][j], d[t][i][j] %= mod;
}
t = 1-t;
}
t=1-t;
if ( (n+m) % 2 )
for ( i=0; i < n; i++ ){
sol += d[t][i][n-i];
sol%=mod;
sol += d[t][i][n-i-1];
sol %= mod;
}
else
for ( i=0; i <= n; i++ ){
sol += d[t][i][n-i];
sol %= mod;
}
g<<sol;
return 0;
}