Cod sursa(job #748128)
#include<iostream>
#include<fstream>
using namespace std;
long long d[1 << 20][20];
int cifre[22];
ifstream in("ratphu.in");
ofstream out("ratphu.out");
int main()
{
long long n;
int i, j, k, p, nr = 0;
in >> n >> p;
do{
cifre[ nr++ ] = n % 10;
n /= 10;
}while(n);
for(i = 0; i < nr; ++i)
++d[1 << i][cifre[i] % p];
for(i = 1; i <= (1 << nr); ++i)
for(j = 0; j < p; ++j)
if(d[i][j])
for(k = 0; k < nr; ++k)
if(!(i & (1 << k)))
d[i | (1 << k)][(j * 10 + cifre[k]) % p] += d[i][j];
out << d[(1 << nr) - 1][0];
return 0;
}