import java.util.Scanner; public class Main { static long mod = 1000000007; public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int n_3 = n / 3; int n_2 = n / 2; if (n < 4) { System.out.println(0); return; } // 预计算阶乘(用于 C(n,k)) long[] fact = new long[n + 1]; fact[0] = 1; for (int i = 1; i <= n; i++) { fact[i] = fact[i - 1] * i % mod; } int num_overlap = 2 * n_3 - n_2; long pc1 = C(n_3, num_overlap, fact); long pc2 = (C(n_3, num_overlap, fact) * fact[num_overlap]) % mod; long pc3 = P(n - n_3, n_3 - num_overlap); long pc4 = fact[n - n_3]; long res = ((((pc1 * pc2) % mod) * pc3) % mod) * pc4 % mod; System.out.println(res % mod); } // 排列数 P(n, k) = n! / (n-k)! public static long P(int n, int k) { if (k < 0 || k > n) return 0; if (k == 0) return 1; long res = 1; for (int i = n - k + 1; i <= n; i++) { res = res * i % mod; } return res; } // 快速幂 public static long pow(long a, long b) { long res = 1; while (b > 0) { if (b % 2 == 1) { res = res * a % mod; } a = a * a % mod; b >>= 1; } return res; } // 模逆元(费马小定理) public static long inv(long a) { return pow(a, mod - 2); } // 组合数 C(n, k) = n! / (k! * (n-k)!) public static long C(int n, int k, long[] fact) { if (k < 0 || k > n) return 0; if (k == 0 || k == n) return 1; long numerator = fact[n]; long denominator = fact[k] * fact[n - k] % mod; return numerator * inv(denominator) % mod; } }