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