#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
#include <map>
#include <string>
#include <cstring>
#include <queue>
#include <deque>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <random>
#include <unordered_map>
#include <functional>
#include <cassert>
#include <unordered_set>



using namespace std;

typedef long long ll;

mt19937 gen(1237);

const int Mod = 1000 * 1000 * 1000 + 7;
const int MaxN = 1000 * 1000;

int S[2][2][MaxN + 1];

int getS(int l, int r, int n) {
	if (n == 0)
		return 0;

	if (n == 1 && l != r)
		return 0;

	if (n == 1 && l == r)
		return 1;

	if (S[l][r][n] != -1)
		return S[l][r][n];

	set<int> sBot;
	sBot.insert(getS(1 - l, r, n - 1));
	sBot.insert(getS(l, 1 - r, n - 1));
	for (int i = 1; i < n - 1; ++i) {
		int sA = getS(l, 0, i) ^ getS(0, r, n - i - 1);
		int sB = getS(l, 1, i) ^ getS(1, r, n - i - 1);

		sBot.insert(sA);
		sBot.insert(sB);
	}

	for (int i = 0; ; ++i)
		if (sBot.count(i) == 0)
			return S[l][r][n] = i;
}

int powFast(int a, int n) {
	if (n == 0)
		return 1;
	if (n % 2 == 0) {
		int tmp = powFast(a, n / 2);
		return (tmp * 1ll * tmp) % Mod;
	}
	else {
		return (a * 1ll * powFast(a, n - 1)) % Mod;
	}
}

ll fact[MaxN + 1];
ll invFact[MaxN + 1];


ll cnk(ll n, ll k) {
	ll res = (fact[n] * invFact[k]) % Mod;
	res = (res * invFact[n - k]) % Mod;
	return res;
}

int main() {
	int n;
	cin >> n;

	fact[0] = 1;
	invFact[0] = 1;

	for (int i = 1; i <= n; ++i) {
		fact[i] = (fact[i - 1] * 1ll * i) % Mod;
		invFact[i] = (invFact[i - 1] * 1ll * powFast(i, Mod - 2)) % Mod;
	}

	ll res = 0;
	for (ll x = 1; x <= n / 2; ++x) {
		if (4*x < n)
			continue;

		ll empty = n - 2*x;
		
		ll cur = (cnk(2*x, empty)) % Mod;
		if (empty > 0)
			cur = (cur + cnk(2 * x - 1, empty - 1)) % Mod;
		cur = (cur * fact[2 * x]) % Mod;

		res = (res + cur) % Mod;
	}

	cout << (2 * res) % Mod << endl;

	/*for (int i = 0; i < 2; ++i)
		for (int j = 0; j < 2; ++j)
			for (int k = 0; k <= n; ++k)
				S[i][j][k] = -1;

	for (int len = 2; len <= n; ++len) {
		cout << "LEN = " << len << " : ";
		cout << getS(0, 0, len) << " " << getS(0, 1, len) << " " << getS(1, 0, len) << " " << getS(1, 1, len) << endl;
	} */


}