Pagini recente » Cod sursa (job #918103) | Cod sursa (job #689107) | Cod sursa (job #576383) | Cod sursa (job #484301) | Cod sursa (job #1739194)
#include <iostream>
#include<fstream>
using namespace std;
int i,j,l,k,p,pu[20];
int modes[(1<<18)][25],cat[(1<<18)][25],v[19],i1,j1;
long long n;
const int mod=1000000007;
long long rasp;
int main()
{
ifstream f("ratphu.in");
ofstream g("ratphu.out");
f>>n;
f>>p;
while(n!=0)
{
v[k]=n%10;
k++;
n/=10;
}
modes[0][0]=1;
pu[0]=1;
for(i=1;i<=18;i++) pu[i]=2*pu[i-1];
for(i=0;i<pu[k];i++)
{
for(j=0;j<p;j++)
{
if(modes[i][j]!=0||cat[i][j]!=0)
for(l=0;l<k;l++)
if((i&pu[l])==0)
{
i1=i+pu[l],j1=(j*10+v[l])%p;
modes[i1][j1]+=modes[i][j];
if(modes[i1][j1]>=mod)
{
modes[i1][j1]-=mod;
cat[i1][j1]++;
}
}
}
}
rasp=(1LL)*cat[pu[k]-1][0]*mod+modes[pu[k]-1][0];
g<<rasp;
return 0;
}