#include <bits/stdc++.h>
int n, m, h, lim;
short hash[1 << 16];
long long res, fact[20];
unsigned char dp[6437][6437];
void backtrack(int i, int l, int mask, int lol, int flag) {
  if (i == l) {
    if (!flag)
      dp[hash[mask]][hash[lol]]++;
    else
      res += dp[hash[mask ^ lim]][hash[lol ^ lim]];
    return;
  }
  int j, k;
  for (j = 0; j < n; j++) {
    if (!(mask & (1 << j))) {
      k = i + j;
      if (k >= n) k -= n;
      if (!(lol & (1 << k)))
        backtrack(i + 1, l, mask ^ (1 << j), lol ^ (1 << k), flag);
    }
  }
}
int main() {
  int i, j, k;
  for (fact[0] = 1, i = 1; i < 20; i++)
    fact[i] = (fact[i - 1] * i) % 1000000007;
  while (scanf("%d", &n) != EOF) {
    memset(dp, 0, sizeof(dp));
    h = 0, m = n >> 1, lim = (1 << n) - 1;
    for (i = 0; i <= lim; i++) {
      if (__builtin_popcount(i) == m) hash[i] = ++h;
    }
    if (n & 1) {
      res = 0;
      backtrack(0, m, 0, 0, 0);
      backtrack(m, n, 0, 0, 1);
      printf("%lld\n", (res % 1000000007) * fact[n] % 1000000007);
    } else
      puts("0");
  }
  return 0;
}
