Pagini recente » Cod sursa (job #348708) | Cod sursa (job #1662838) | Cod sursa (job #2805802) | Cod sursa (job #1195950) | Cod sursa (job #3170604)
#include <fstream>
#define mod 3210121
using namespace std;
ifstream fin("iv.in");
ofstream fout("iv.out");
char x[501],y[501];
int nr[27],d[501][501][3],nr1[501][27],nr2[501][27],sol,n;
int main()
{
fin>>x>>y;
for(int i=0;x[i]!=0;i++)
{
for(int j=i;x[j]!=0;j++)
nr1[j][x[i]-'a'+1]++;
nr[x[i]-'a'+1]++;
n++;
}
for(int i=0;y[i]!=0;i++)
{
for(int j=i;y[j]!=0;j++)
nr2[j][y[i]-'a'+1]++;
nr[y[i]-'a'+1]++;
n++;
}
int nri=0;
for(int p=1;p<=26;p++)
{
if(nr[p]%2==1)
nri++;
}
if(nri>1)
{
fout<<0;
return 0;
}
d[0][1][2]=1;
d[1][0][1]=1;
for(int i=0;i==0 || x[i-1]!=0;i++)
{
for(int j=0;j==0 || y[j-1]!=0 ;j++)
{
if(i+j==n/2)
{
sol=(sol+d[i][j][1]+d[i][j][2])%mod;
}
if(i+j>=n/2)
break;
int cu1=x[i];
int ok=1;
for(int p=1;p<=26;p++)
{
if((nr[p]-nr1[i][p]-nr2[j-1][p])*2>nr[p] && nr[p]-nr1[i][p]-nr2[j-1][p]!=nr[p])
{
ok=0;
break;
}
}
if(ok==1)
d[i+1][j][1]=(d[i+1][j][1]+d[i][j][1]+d[i][j][2])%mod;
int cu2=y[j];
ok=1;
for(int p=1;p<=26;p++)
{
if((nr[p]-nr1[i-1][p]-nr2[j][p])*2>nr[p] && nr[p]-nr1[i][p]-nr2[j-1][p]!=nr[p])
{
ok=0;
break;
}
}
if(ok==1)
d[i][j+1][2]=(d[i][j+1][2]+d[i][j][1]+d[i][j][2])%mod;
}
}
fout<<sol;
return 0;
}