func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, k;   long long mul[1005], c[1005][1005], f[1005][1005][2][3], chose[1005];   long long ans;   int main() {     scanf( %d%d , &n, &k);     mul[0] = 1;     for (int i = 1; i <= n; ++i) mul[i] = mul[i - 1] * (long long)i % 1000000007;     for (int i = 0; i <= 1000; ++i) c[i][0] = 1;     for (int i = 1; i <= 1000; ++i)       for (int j = 1; j <= 1000; ++j)         c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % 1000000007;     for (int i = 0; i <= n; ++i) f[i][0][1][0] = 1;     for (int i = 1; i <= n; ++i)       for (int j = 0; j <= i; ++j) {         f[i][j][0][0] = f[i - 1][j][0][0] + f[i - 1][j][0][1] +                         f[i - 1][j][1][0] + f[i - 1][j][1][1];         f[i][j][0][0] %= 1000000007;         if (j) f[i][j][0][1] = f[i - 1][j - 1][0][0] + f[i - 1][j - 1][0][1];         f[i][j][0][1] %= 1000000007;         if (j)           f[i][j][0][2] = f[i - 1][j - 1][0][0] + f[i - 1][j - 1][0][1] +                           f[i - 1][j - 1][1][0] + f[i - 1][j - 1][1][1];         f[i][j][0][2] %= 1000000007;         f[i][j][1][0] = f[i - 1][j][0][2] + f[i - 1][j][1][2];         f[i][j][1][0] %= 1000000007;         if (j) f[i][j][1][1] = f[i - 1][j - 1][0][2];         f[i][j][1][1] %= 1000000007;         if (j) f[i][j][1][2] = f[i - 1][j - 1][0][2] + f[i - 1][j - 1][1][2];         f[i][j][1][2] %= 1000000007;       }     for (int i = 0; i <= n; ++i) {       chose[i] = f[n][i][0][0] + f[n][i][0][1] + f[n][i][1][0] + f[n][i][1][1];       chose[i] %= 1000000007;     }     for (int i = k, opt = 1; i <= n; ++i, opt = -opt) {       ans += chose[i] * mul[n - i] % 1000000007 * c[i][k] % 1000000007 * opt;       ans = (ans % 1000000007 + 1000000007) % 1000000007;     }     printf( %I64d n , ans);   }   