#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
// 计算 3 的倍数的个数
int num_triples = n / 3; // 1 到 n 中 3 的倍数的个数
int num_half = n / 2; // n 的一半,即需要满足条件的 i 的数量
// 计算重叠部分的数量
// 重叠部分是指同时满足 i 是 3 的倍数且 a_i 是 3 的倍数的情况
int num_overlap = 2 * num_triples - num_half;
// 初始化答案和模数
long long ans = 1;
long long mod = 1e9 + 7;
// 计算组合数和排列数
// 第一部分:从 num_triples 个 3 的倍数中选择 num_overlap 个
for (int i = num_overlap + 1; i <= num_triples; i++) {
ans = (ans * i) % mod; // 计算 C(num_triples, num_overlap)
}
// 第二部分:从 num_triples 个 3 的倍数中选择 num_triples - num_overlap 个
for (int i = num_triples - num_overlap + 1; i <= num_triples; i++) {
ans = (ans * i) % mod; // 计算 C(num_triples, num_triples - num_overlap)
}
// 第三部分:从 n - num_triples 个非 3 的倍数中选择 num_triples - num_overlap 个
for (int i = num_triples - num_overlap + 1; i <= n - num_triples; i++) {
ans = (ans * i) % mod; // 计算 C(n - num_triples, num_triples - num_overlap)
}
// 第四部分:剩余的 n - 2 * num_triples + num_overlap 个位置可以任意排列
for (int i = n - 2 * num_triples + num_overlap + 1; i <= n - num_triples; i++) {
ans = (ans * i) % mod; // 计算 (n - 2 * num_triples + num_overlap)! 的部分
}
// 输出最终结果
cout << ans << endl;
return 0;
}