#include <bits/stdc++.h>
using namespace std;
void add(long long &x, long long y) {
  x += y;
  if (x >= 1000000007) x -= 1000000007;
}
long long C[1010][1010];
long long dp[1010][1010][4];
long long F[1010];
int main() {
  int N, K;
  scanf("%d%d", &N, &K);
  for (int i = 0; i <= N; i++)
    for (int j = 0; j <= i; j++)
      C[i][j] = j ? (C[i - 1][j] + C[i - 1][j - 1]) % 1000000007 : 1;
  dp[0][0][2] = 1;
  for (int i = 1; i <= N; i++) {
    for (int j = 0; j < i; j++) {
      for (int k = 0; k < 4; k++) {
        if (k & 1) add(dp[i][j + 1][k / 2 + 2], dp[i - 1][j][k]);
        if (i < N) add(dp[i][j + 1][k / 2], dp[i - 1][j][k]);
        add(dp[i][j][k / 2 + 2], dp[i - 1][j][k]);
      }
    }
  }
  for (int j = 0; j <= N; j++) {
    for (int k = 0; k < 4; k++) add(F[j], dp[N][j][k]);
    for (int k = 2; k <= N - j; k++) F[j] = (F[j] * k) % 1000000007;
  }
  for (int i = N - 1; i >= 0; i--)
    for (int j = i + 1; j <= N; j++)
      add(F[i], 1000000007 - F[j] * C[j][i] % 1000000007);
  printf("%I64d\n", F[K]);
  return 0;
}
