#include <iostream>
using namespace std;
typedef long long LL;
const LL MOD = 1e9 + 7;  // 模数
const int N = 1000010;  // n的最大值加一些余量

LL fact[N], invfact[N];

// 快速幂计算a^b % p
LL powmod(LL a, LL b, LL p) {
    LL res = 1;
    while (b) {
        if (b & 1) {
            res = res * a % p;
        }
        a = a * a % p;
        b >>= 1;
    }
    return res;
}

// 初始化阶乘和逆元
void init(int n) {
    fact[0] = 1;
    for (int i = 1; i <= n; i++) {
        fact[i] = fact[i - 1] * i % MOD;
    }
    invfact[n] = powmod(fact[n], MOD - 2, MOD);
    for (int i = n - 1; i >= 0; i--) {
        invfact[i] = invfact[i + 1] * (i + 1) % MOD;
    }
}

int main() {
    int n;
    cin >> n;   // 输入n
    init(n);    // 预计算阶乘和逆元

    int c0 = n / 3; // |S_0| = n / 3
    int k = n / 2 - c0; // 需要在T中分配k个V_0的值
    int m = n - c0; // |T| = n - c0

    // 边界检查,若k不合法,则无解
    if (k < 0 || k > m || k > c0) {
        cout << 0 << endl;
        return 0;
    }

    // 计算结果:(m!)^2 * (c0!)^2 / (k!)^2 / (m-k)! / (c0-k)!
    LL res = fact[m] * fact[m] % MOD;   // ((n - c0)!)^2
    res = res * fact[c0] % MOD * fact[c0] % MOD;    // * (c0!)^2
    res = res * invfact[k] % MOD * invfact[k] % MOD;  // / (k!)^2
    res = res * invfact[m - k] % MOD;         // / ((n-c0)-k)!
    res = res * invfact[c0 - k] % MOD;        // / (c0-k)!

    cout << res << endl;  // 输出结果
    return 0;
}
// 64 位输出请用 printf("%lld")