显示原始代码
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#include <map>
#include <vector>
#include <set>
#include <bitset>
#include <cmath>
#include <queue>
using namespace std;
#define x first
#define y second
typedef long long LL;
typedef unsigned long long ULL;
typedef long double LD;
typedef pair<int, int> PII;
typedef pair<LL, LL> PLL;
typedef pair<double, double> PDD;
typedef pair<LD, int> PLDI;
typedef pair<LD, LD> PLDLD;
typedef pair<PII, int> PIII;
const int N = 300010, M = 2 * N, U = 200000, P = 13331, INF = 1e9 + 10, mod = 1e9 + 9;
const double PI = acos(-1);
const int mod0 = 402653189, mod1 = 805306457, BASE0 = 13331, BASE1 = 23333;
int T;
int n, m;
LL f[3010][3010];
int main() {
for (int i = 0; i <= 3000; i += 2) f[1][i] = 1;
for (int i = 2; i <= 3000; i++)
for (int j = 0; j <= 3000; j++) {
f[i][j] = f[i - 1][j];
if (j)
f[i][j] = (f[i][j] + (i - 1) * f[i - 1][j - 1] % mod) % mod;
}
scanf("%d", &T);
while (T--) {
scanf("%d%d", &n, &m);
if (n == 1) {
if (m == 0)
puts("1");
else
puts("0");
return 0;
}
m = min(m, n);
printf("%lld\n", f[n][m]);
}
return 0;
}