func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 1005;   const int mod = 1e9 + 7;   int n, m;   int c[N][N], fac[N], f[N][N][2][2], dp[N], g[N];   void Init() {     scanf( %d%d , &n, &m);     c[0][0] = 1;     for (int i = 1; i <= n; i++) {       c[i][0] = 1;       for (int j = 1; j <= i; j++) {         c[i][j] = c[i - 1][j] + c[i - 1][j - 1];         if (c[i][j] >= mod) c[i][j] -= mod;       }     }     fac[0] = 1;     for (int i = 1; i <= n; i++) fac[i] = 1LL * fac[i - 1] * i % mod;   }   inline void Add(int &x, int y) {     x += y;     if (x >= mod) x -= mod;   }   int main() {     Init();     f[1][0][1][0] = 1;     for (int i = 1; i <= n; i++) {       for (int j = 0; j <= i; j++) {         for (int a = 0; a < 2; a++) {           for (int b = 0; b < 2; b++) {             int t = f[i][j][a][b];             Add(f[i + 1][j][b][0], t);             Add(f[i + 1][j + 1][b][1], t);             if (a == 0) Add(f[i + 1][j + 1][b][0], t);           }         }       }     }     for (int i = 0; i <= n; i++) {       for (int j = 0; j < 2; j++) {         Add(dp[i], f[n + 1][i][j][0]);       }     }     for (int i = n; i >= 0; i--) {       g[i] = 1LL * dp[i] * fac[n - i] % mod;       for (int j = i + 1; j <= n; j++) {         g[i] -= 1LL * c[j][i] * g[j] % mod;         if (g[i] < 0) g[i] += mod;       }     }     printf( %d n , g[m]);     return 0;   }   