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;
    }
}