// Problem: F. Omkar and Akmar
// Contest: Codeforces - Codeforces Round #724 (Div. 2)
// URL: https://codeforces.com/contest/1536/problem/F
// Memory Limit: 256 MB
// Time Limit: 3000 ms
//
// Powered by CP Editor (https://cpeditor.org)

#include <bits/stdc++.h>

using namespace std;

#define dbg(x...) \
    do { \
        cout << #x << " -> "; \
        err(x); \
    } while (0)

void err() {
    cout << endl;
}

template<class T, class... Ts>
void err(T arg, Ts &... args) {
    cout << arg << ' ';
    err(args...);
}

typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef __int128 i128;
const int N = 1e6 + 10;
const ll mod = 1e9 + 7;
ll fac[N];
ll inv[N];

ll qpow(ll a, ll b) {
    a %= mod;
    ll ret = 1;
    while (b) {
        if (b & 1) ret = ret * a % mod;
        a = a * a % mod;
        b >>= 1;
    }
    return ret;
}

mt19937 mt(chrono::steady_clock::now().time_since_epoch().count());

ll rng(ll l, ll r) {
    uniform_int_distribution<ll> uni(l, r);
    return uni(mt);
}

ll C(ll n, ll m) {
    if (n < m) return 0;
    return fac[n] * inv[n - m] % mod * inv[m] % mod;
}

void solve(int tCase) {
    ll n;
    cin >> n;
    ll ans = 0;
    for (int i = 0; i <= n / 2; ++i) {
        if ((n - i) % 2) continue;
        ans = (ans + C(n - i, i) * fac[n - i - 1] % mod) % mod;
    }
    ans = ans * 2 % mod;
    ans = ans * n % mod;
    cout << ans << '\n';
}

void init() {
    fac[0] = 1;
    for (int i = 1; i < N; ++i) {
        fac[i] = fac[i - 1] * i % mod;
    }
    inv[N - 1] = qpow(fac[N - 1], mod - 2);
    for (int i = N - 1; i >= 1; --i) {
        inv[i - 1] = inv[i] * i % mod;
    }
}

int main() {
    init();
    ios_base::sync_with_stdio(false);
    int T = 1;
//    cin >> T;
    for (int t = 1; t <= T; ++t) {
        solve(t);
    }
    return 0;
}