#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