Pagini recente » Cod sursa (job #2204137) | Cod sursa (job #2215565) | Cod sursa (job #2430857) | Cod sursa (job #2472970) | Cod sursa (job #2484295)
#include <fstream>
#include <cstring>
#define mod 3210121
using namespace std;
ifstream fin("iv.in");
ofstream fout("iv.out");
int n,N,m,i,j,l,d[510][510][510],sol;
char a[510],b[510];
int main(){
fin>>a+1;
n=strlen(a+1);
fin>>b+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;j+i<=n && j<=l;j++){
if(a[i]==a[n-j+1] && i>0 && n-j+1<=n){
d[l][i][j]+=d[l-1][i-1][j-1];
d[l][i][j]%=mod;
}
if(a[i]==b[m-l+j+1] && i>0 && m-l+j+1<=m){
d[l][i][j]+=d[l-1][i-1][j];
d[l][i][j]%mod;
}
if(b[l-i]==a[n-j+1] && l-i>0 && n-j+1<=n){
d[l][i][j]+=d[l-1][i][j-1];
d[l][i][j]%=mod;
}
if(b[l-i]==b[m-l+j+1] && l-i>0 && m-l+j+1<=m){
d[l][i][j]+=d[l-1][i][j];
d[l][i][j]%=mod;
}
}
}
}
if(sol%2)
for(i=0;i<n;i++){
sol+=d[(n+m)/2][i][n-i];
sol%=mod;
sol+=d[(n+m)/2][i][n-i-1];
sol%=mod;
}
else
for(i=0;i<=n;i++){
sol+=d[(n+m)/2][i][n-i];
sol%=mod;
}
fout<<sol;
return 0;
}