// // 活动地址: 牛客春招刷题训练营 - 编程打卡活动
#include <iostream>
#include<algorithm>
using namespace std;
#define MOD 1000000007;
int main() {
int n;
cin >> n;
//当且仅当任意相邻两项之和均为奇数
//奇数 + 偶数 为奇数 ----》奇 偶 数相间排列
//n为偶数时 奇数偶数 偶数奇数都行
//n为奇数时 只能奇数偶数 因为奇数多一个 且每个整数恰好出现一次
long long ans = 1;
int odds = (n + 1) / 2; // 奇数个数
int evens = n / 2; // 偶数个数
// 计算奇数排列数
for (int i = 1; i <= odds; ++i)
ans = ans * i % MOD;
// 计算偶数排列数
for (int i = 1; i <= evens; ++i)
ans = ans * i % MOD;
// 当n为偶数时两种模式都有效,需要乘2
if (n % 2 == 0)
ans = ans * 2 % MOD;
cout << ans;
}
// 64 位输出请用 printf("%lld")
// // 活动地址: 牛客春招刷题训练营 - 编程打卡活动