排列组合 容斥原理
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
typedef long long ll;
ll A(int n){
ll r = 1;
for(int i = 1;i <= n;i++){
r *= i;
}
return r;
}
ll C(int n,int k){
return A(n)/(A(n - k) * A(k));
}
int main(){
int t;
while(~scanf("%d",&t)){
while(t--){
int p,n,k;
scanf("%d%d%d",&p,&n,&k);
printf("%d ",p);
ll sum = 0;
for(int i = 1;i <= k;i++){
if(i&1)sum += C(k,i) * A(n - i);
else sum -= C(k,i) * A(n - i);
}
//cout<<sum<<endl;
printf("%lld\n",A(n) - sum);
}
}
return 0;
}