#include <bits/stdc++.h> using namespace std; #define ll long long #define MOD 1000000007 int n; ll dfs(ll x)//计算阶乘的 DFS 函数 { ll res = 1; for(ll i=2; i<=x; i++) res = (res * i) % MOD; return res; } int main() { cin >> n; if(n == 1) { cout << 1 << endl; return 0; } ll odd = (n+1)/2,even = n/2;//分别表示奇数部分和偶数部分的数量 ll ans = 0; if(n%2 == 0)//当n为偶数时,排列模式有2种(奇偶交替或偶奇交替) { ans = 2 * dfs(odd) % MOD; //这个公式用于计算当 n 为偶数时,排列模式的数量。因为当 n 为偶数时,排列模式有两种:奇数在前偶数在后,或者偶数在前奇数在后。所以需要将奇数排列的数量乘以 2。 ans = ans * dfs(even) % MOD; //这个公式用于计算当 n 为偶数时,最终的排列数量。在前面已经计算出奇数排列的数量并乘以 2 之后,这里再与偶数排列的数量相乘,得到总的排列模式数量。 }else {//当n为奇数时,只能以奇数开头(因为奇数比偶数多1个) ans = dfs(odd) * dfs(even) % MOD; // 这个公式用于计算当 n 为奇数时,排列模式的数量。因为当 n 为奇数时,排列模式只能是奇数在前偶数在后,所以只需将奇数排列的数量与偶数排列的数量相乘即可。 } cout << ans << endl; //dfs(1); return 0; } //1 2 2 8 12 72 144 1152 2304 //1 2 3 4 5 6 7 8 9