func_code_string: #include <bits/stdc++.h>   using namespace std;   long long dp[1005][1005], sum[1005][1005], c[2 * 1005][2 * 1005];   long long res[55][1005], p[55];   int main() {     dp[0][0] = 1;     for (int i = 0; i < 1005; i++) sum[0][i] = 1;     for (int i = 1; i <= 51; i++) {       for (int j = 1005 - 1; j >= 1; j--) {         for (int k = 1005 - 1; k >= 1; k--) {           if ((j >= k && i == 1) || j > k)             dp[j][k] = sum[j - k][k - 1];           else             dp[j][k] = 0;           sum[j][k] = dp[j][k];         }         for (int k = 1; k < 1005; k++)           sum[j][k] = (sum[j][k] + sum[j][k - 1]) % 1000000007;         res[i][j] = sum[j][1005 - 1];       }       sum[0][0] = dp[0][0] = 0;     }     c[0][0] = c[1][1] = 1;     for (int i = 2; i < 2 * 1005; i++)       for (int j = 1; j <= i; j++)         c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % 1000000007;     p[0] = 1;     for (int i = 1; i < 55; i++) p[i] = (p[i - 1] * i) % 1000000007;     for (int i = 0; i <= 51; i++)       for (int j = 1; j < 1005; j++)         res[i][j] =             (res[i][j - 1] + (res[i][j] * p[i]) % 1000000007) % 1000000007;     int t;     scanf( %d , &t);     while (t--) {       int n, k;       scanf( %d %d , &n, &k);       if (k > 51)         printf( 0 n );       else {         long long ans = 0;         for (int i = k; i <= n; i++)           ans = (ans + (res[k][i] * c[n - i + k][k]) % 1000000007) % 1000000007;         printf( %I64d n , ans);       }     }     return 0;   }   