// GeniePuzzle.java import java.io.*; import java.util.StringTokenizer; // Recurrence relations are used to characterize the number of partitions whose // groups have size between k and kmax inclusive. For an account of these relations, // see Laszlo & Mukherjee, "Minimum Spanning Tree Partitioning Algorithm // for Microaggregation", IEEE Transactions on Knowledge and Data Engineering, // to appear. public class GeniePuzzle { public static void main(String[] args) throws IOException { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); int numCases = Integer.parseInt(in.readLine()); for (int i = 0; i < numCases; i++){ int[] input = getTestCase( in ); GeniePuzzle genie = new GeniePuzzle(); System.out.println( genie.value(input[2], input[1], input[0]) ); } } public long value(int k, int kmax, int n) { if ((k <= n) && (k <= kmax)) return P(k, kmax, n, 0); else return 0; } public long P(int k, int kmax, int n, int m) { if (n < m * k) return 0; else if (n == m * k) return G(k, n, m); else { long a = value(k+1, kmax, n-m*k) * G(k, n, m); long b = P(k, kmax, n, m+1); return a + b; } } public long G(int k, int n, int m) { long num = factDownTo(n, m); long denom = power(fact(k), m) * fact(n-m*k); return num / denom; } long fact(int n) { long res = 1; for (long i = 2; i <= n; i++) res *= i; return res; } long factDownTo(int n, int m) { long res = 1; for (long i = m+1; i <= n; i++) res *= i; return res; } long power(long a, long b) { if (b == 0) return 1; else { long c = power(a, (long)(b/2)); if ((b%2) == 0) return c * c; else return c * c * a; } } static int[] getTestCase(BufferedReader in) throws IOException { int[] res = new int[3]; StringTokenizer toks = new StringTokenizer(in.readLine()); for (int i = 0; i < 3; i++){ res[i] = Integer.parseInt(toks.nextToken()); } return res; } }