Pagini recente » Cod sursa (job #1439855) | Cod sursa (job #1152663) | Cod sursa (job #800714) | Cod sursa (job #1357658) | Cod sursa (job #2483001)
#include <iostream>
#include <fstream>
#include <cstring>
#include <set>
using namespace std;
ifstream fin("iv.in");
ofstream fout("iv.out");
char a[510],b[510];
set<int> litere;
int n, sol[1000], fr[122], total;
bool palindrom(int v[], int l) {
for(int i=1;i<=l/2;++i)
if(v[i]!=v[l-i+1]) return false;
return true;
}
bool verificare(int pas, int litera) {
int c=0;
for(int i=1;i<pas;++i)
if(sol[i]==litera)
c++;
if(c<fr[litera])
return true;
return false;
}
void backtrack(int pas) {
if(pas == n+1 && palindrom(sol, n))
total++;
else {
for(set<int>::iterator i=litere.begin();i!=litere.end();++i) {
sol[pas] = *i;
if(verificare(pas, *i)) backtrack(pas+1);
}
}
}
int main()
{
fin.getline(a,510);
fin.getline(b,510);
n = strlen(a)+strlen(b);
for(int i=0;a[i];++i) {
litere.insert(a[i]);
fr[a[i]]++;
}
for(int i=0;b[i];++i) {
litere.insert(b[i]);
fr[b[i]]++;
}
backtrack(1);
fout<<total%3210121*2;
}