#include <iostream>
using namespace std;

const int MOD = 1e9 + 7;
const int MAX = 1e6 + 5;

long long fact[MAX], inv_fact[MAX];

// 快速幂取模
long long pow_mod(long long x, int n) {
    long long res = 1;
    while (n) {
        if (n & 1) res = res * x % MOD;
        x = x * x % MOD;
        n >>= 1;
    }
    return res;
}

// 预处理阶乘和逆元
void precompute() {
    fact[0] = 1;
    for (int i = 1; i < MAX; i++) {
        fact[i] = fact[i-1] * i % MOD;
    }
    inv_fact[MAX-1] = pow_mod(fact[MAX-1], MOD-2);
    for (int i = MAX-2; i >= 0; i--) {
        inv_fact[i] = inv_fact[i+1] * (i+1) % MOD;
    }
}

// 组合数计算
long long comb(int n, int k) {
    if (k < 0 || k > n) return 0;
    return fact[n] * inv_fact[k] % MOD * inv_fact[n - k] % MOD;
}

int main() {
    precompute();
    int n;
    cin >> n;
    int k = n / 3;
    int s = n / 2 - k;
    int m = n - k;
    
    if (s < 0 || s > k || s > m) {
        cout << 0 << endl;
        return 0;
    }
    
    //从 m 个位置中选择 s 个位置,再从K个3的公倍数中选出S个,对K个数和n-k个数全排列
    long long c = comb(m, s);  
    long long perm1 = fact[k] * inv_fact[k - s] % MOD;  
    long long perm2 = fact[k] * inv_fact[s] % MOD;  
    long long ans = c * perm1 % MOD;
    ans = ans * perm2 % MOD;
    ans = ans * fact[n - k] % MOD;
    
    cout << ans << endl;
    return 0;
}