#include <bits/stdc++.h>
using namespace std;

void dbg_out() { cerr << endl; }
template<typename Head, typename... Tail> void dbg_out(Head H, Tail... T) { cerr << ' ' << H; dbg_out(T...); }
#ifdef TUAN_DEBUG
#define dbg(...) cerr << "(" << #__VA_ARGS__ << "):", dbg_out(__VA_ARGS__)
#else
#define dbg(...)
#endif

const int MOD = int(1e9) + 7;

int add(int a, int b) {
    return a + b >= MOD ? a + b - MOD : a + b;
}

int mul(int a, int b) {
    return int64_t(a) * b % MOD;
}

int binpow(int b, int e) {
    int res = 1;
    while (e > 0) {
        if (e & 1) res = mul(res, b);
        b = mul(b, b);
        e >>= 1;
    }
    return res;
}

void run_case() {
    // valid if:
    //  there aren't any two adjacent cells with the same letter
    //  there is 1 free cell between 2 cells if their letters are different
    //  all other cells must be filled
    //  n % 2 == 0 possible free cells: 0, 2, 4, ... N / 2
    //  n % 2 == 1 possible free cells: 1, 3, 5, ... N / 2
    //
    //  if n % 2 == 0 then there has to be an even number of segments in both odd and even segments
    //  otherwise there has to be an even number of odd segments and an odd number of even segments
    //  the total number of moves has to be even (because the second guy always wins)
    //  need to divide moves into segments A|BAB|ABA|B

    int N;
    cin >> N;
    int answer = 0;
    vector<int> fac(N + 1);
    vector<int> fac_inv(N + 1);
    fac[0] = fac_inv[0] = 1;

    for (int i = 1; i <= N; i++) {
        fac[i] = mul(fac[i - 1], i);
        fac_inv[i] = binpow(fac[i], MOD - 2);
    }

    auto V = [&](int n, int k) -> int {
        if (k <= 0) return 1;
        return mul(fac[n], fac_inv[k]);
    };

    auto C = [&](int n, int k) -> int {
        if (k < 0) return 0;
        if (k == 0) return 1;
        if (k == 1) return n;
        return mul(fac[n], mul(fac_inv[n - k], fac_inv[k]));
    };

    for (int f = N % 2; 2 * f <= N; f += 2) {
        int occ = N - f;
        answer = add(answer, mul(2, mul(fac[occ], add(C(occ - 1, f - 1), C(occ, f)))));
    }
    
    cout << answer << '\n';
}



int main() {
    ios::sync_with_stdio(false);
#ifndef TUAN_DEBUG
    cin.tie(nullptr);
#endif
	
	int T = 1;

    for (int test = 1; test <= T; test++) {
        run_case();
    }

    return 0;
} 
