Cod sursa(job #466350)
#include<stdio.h>
#include<string.h>
long s[10];
long viz[10];
long f[10];
long n,numt=0,k;
void af ()
{
long i,j,num=0,ok=1;
for (i=1;i<=n;i++)
{
memset(f,0,sizeof(f));
for (j=1;j<=i;j++)
f[s[j]]++;
ok=1;
for (j=1;j<=i && ok;j++)
if (f[j]==0)
ok=0;
if (ok)
{num++;
}
}
if (num==k)
numt++;
numt=numt%10007;
}
int main ()
{
long i,gata,st,dr,aux,min,j,poz;
freopen("permutari2.in","r",stdin);
freopen("permutari2.out","w",stdout);
scanf("%ld%ld",&n,&k);
gata=0;
for (i=1;i<=n;i++)
s[i]=i;
af();
while (!gata)
{
for (i=n-1;i>=1;i--)
if (s[i]<s[i+1])
{
break;
}
if (i<1)
gata=1;
else
{
min=2000000000;
for (j=i+1;j<=n;j++)
{
if (s[j]<min && s[j]>s[i])
{
min=s[j];
poz=j;
}
}
aux=s[i];
s[i]=s[poz];
s[poz]=aux;
st=i+1;
dr=n;
while (st<dr)
{
aux=s[st];
s[st]=s[dr];
s[dr]=aux;
st++;
dr--;
}
af();
}
}
printf("%ld\n",numt%10007);
return 0;
}