Permutation p is an ordered set of integers p1, p2, ..., pn, consisting of n distinct positive integers, each of them doesn't exceed n. We'll denote the i-th element of permutation p as pi. We'll call number n the size or the length of permutation p1, p2, ..., pn.

Petya decided to introduce the sum operation on the set of permutations of length n. Let's assume that we are given two permutations of length n: a1, a2, ..., an and b1, b2, ..., bn. Petya calls the sum of permutations a and b such permutation c of length n, where ci = ((ai - 1 + bi - 1) mod n) + 1 (1 ≤ i ≤ n).

Operation <image> means taking the remainder after dividing number x by number y.

Obviously, not for all permutations a and b exists permutation c that is sum of a and b. That's why Petya got sad and asked you to do the following: given n, count the number of such pairs of permutations a and b of length n, that exists permutation c that is sum of a and b. The pair of permutations x, y (x ≠ y) and the pair of permutations y, x are considered distinct pairs.

As the answer can be rather large, print the remainder after dividing it by 1000000007 (109 + 7).

Input

The single line contains integer n (1 ≤ n ≤ 16).

Output

In the single line print a single non-negative integer — the number of such pairs of permutations a and b, that exists permutation c that is sum of a and b, modulo 1000000007 (109 + 7).

Examples

Input

3


Output

18


Input

5


Output

1800
#include <bits/stdc++.h>
using namespace std;
void display(vector<long long int> v1) {
  for (long long int i = 0; i < v1.size(); i++) {
    cout << v1[i] << " ";
  }
  cout << endl;
}
long long int dx[4] = {0, 1, 0, -1};
long long int dy[4] = {1, 0, -1, 0};
using namespace std;
long long int gcd(long long int a, long long int b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
long long int lcm(long long int a, long long int b) {
  return (a * b) / gcd(a, b);
}
long long int exgcd(long long int a, long long int b, long long int &x,
                    long long int &y) {
  if (a == 0) {
    x = 0;
    y = 1;
    return b;
  }
  long long int xx, yy, g = exgcd(b % a, a, xx, yy);
  x = yy - (b / a) * xx;
  y = xx;
  return g;
}
long long int bin1(long long int x) {
  int r = 0;
  while (x) {
    r++;
    x &= x - 1;
  }
  return r;
}
long long int power(long long int b, long long int e) {
  if (e == 0) return 1;
  if (e % 2 == 0) return power(b * b, e / 2);
  return b * power(b * b, e / 2);
}
long long int modpow(long long int b, long long int e, long long int m) {
  long long int r = 1;
  b = b % m;
  while (e > 0) {
    if (e % 2 == 1) r = (r * b) % m;
    e /= 2;
    b = (b * b) % m;
  }
  return r;
}
long long int modinverse(long long int a, long long int mod) {
  return modpow(a, mod - 2, mod);
}
long long int modinverse2(long long int a, long long int m) {
  long long int x, y;
  exgcd(a, m, x, y);
  while (x < 0) x += m;
  return x;
}
long long int nCrmod(long long int n, long long int r, long long int m) {
  if (r > n) r = n - r;
  long long int res = 1;
  for (long long int i = r; i >= 1; i--) {
    res = (res * (n - i + 1)) % m;
    res = (res * modinverse(i, m));
  }
  return res;
}
long long int nCr(long long int n, long long int r) {
  if (r > n) r = n - r;
  long long int res = 1;
  for (long long int i = r; i >= 1; i--) {
    res *= (n - i + 1);
    res /= i;
  }
  return res;
}
long long int totient(long long int n) {
  long long int res = n, p;
  for (p = 2; p * p <= n; p++) {
    if (n % p == 0) {
      while (n % p == 0) n /= p;
      res -= res / p;
    }
  }
  if (n > 1) res -= res / n;
  return res;
}
bool isprime(long long int x) {
  if (x == 1) return false;
  for (long long int i = 2; i * i <= x; i++)
    if (x % i == 0) return false;
  return true;
}
bool isvowel(char c) {
  if (isupper(c)) c = tolower(c);
  return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u';
}
bool istriangle(long long int a, long long int b, long long int c) {
  return (a + b > c) && (a + c > b) && (b + c > a);
}
long long int powinfact(long long int n, long long int p) {
  long long int res = 0, pw = p;
  while (n >= pw) {
    res += (n / pw);
    pw *= p;
  }
  return res;
}
double dist(long long int x1, long long int y1, long long int x2,
            long long int y2) {
  return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  long long int arr[] = {0,         1,         1,         19,        19,
                         1819,      1819,      672139,    672139,    735504139,
                         735504139, 626290362, 626290362, 322011143, 322011143,
                         472358698, 472358698};
  long long int n;
  cin >> n;
  cout << ((long long int)1000000007 + arr[n] - arr[n - 1]) %
              (long long int)1000000007;
  return 0;
}
