// // 活动地址: 牛客春招刷题训练营 - 编程打卡活动
#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")

// // 活动地址: 牛客春招刷题训练营 - 编程打卡活动