题目传送门
/*
题意:求冒泡排序扫描k次能排好序的全排列个数
数学:这里有一个反序列表的概念,bj表示在j左边,但大于j的个数。不多说了,我也是看网上的解题报告。
详细解释:http://blog.csdn.net/cscj2010/article/details/7820906
*/
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
typedef long long ll;
const int MAXN = 1e6 + ;
const int INF = 0x3f3f3f3f;
const int MOD = ;
ll fact[MAXN];
void solve(void) {
fact[] = fact[] = ;
for (int i=; i<=; ++i) {
fact[i] = fact[i-] * i % MOD;
}
}
ll pow_mod(ll x, ll n) {
ll ret = ;
while (n) {
if (n & ) ret = ret * x % MOD;
x = x * x % MOD;
n >>= ;
}
return ret;
}
int main(void) { //POJ 3761 bubble sort
solve ();
int T; scanf ("%d", &T);
while (T--) {
ll n, k; scanf ("%I64d%I64d", &n, &k);
printf ("%I64d\n", (pow_mod (k + , n - k) - pow_mod (k, n - k) + MOD) % MOD * fact[k] % MOD);
}
return ;
}