转自:http://blog.youkuaiyun.com/zu_xu/article/details/8759943 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define mp make_pair #define X first #define Y second #define MEMSET(a, b) memset(a, b, sizeof(a)) using namespace std; typedef unsigned int ui; typedef long long ll; typedef unsigned long long ull; typedef pair pii; typedef vector vi; typedef vi::iterator vi_it; typedef map mii; typedef priority_queue pqi; typedef priority_queue , greater > rpqi; typedef priority_queue pqp; typedef priority_queue , greater > rpqp; const int MOD = 1000000007; //return a^n % MOD ll pow_mod(int a, int n) { ll ret = 1, aa = a; while (n) { if (n & 1) ret = ret * aa % MOD; n >>= 1; aa = aa * aa % MOD; } return ret; } int main(int argc, char *argv[]) { // freopen("D:\\in.txt", "r", stdin); int n, s, T; cin >> T; while (T--) { scanf("%d%d", &n, &s); //the answer is n^(n - s - 1) * s if (n == s) puts("1"); else printf("%I64d\n", pow_mod(n, n - s - 1) * s % MOD); } return 0; }