// KUSHAGRA WADHWA
#include <bits/stdc++.h>
#define int long long 
#define pb push_back
#define all(x) (x).begin(), (x).end()
#define fast ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define MOD 1000000007
using namespace std;

const int NAX = 2e6 + 5;

void PrintGoogle(int ans, int t){
	printf("Case #%lli: %lli\n", t, ans);
}

int min(int a, int b){
	return (a < b ? a : b);
}

int max(int a, int b){
	return (a > b ? a : b);
}

int inv[NAX], fact[NAX], invfact[NAX];

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

int sum(int a, int b){
	int s = a + b;
	if(s >= MOD){
		s -= MOD;
	}
	return s;
}

int cnk(int n, int k){
	if(n < k || k < 0){
		return 0;
	}
	return (mult(fact[n], mult(invfact[k], invfact[n - k])));
}

void test_case(int n){
	int ans = 0;
	for(int i = 0; i < n; ++i){
		int j = n - 1 - i;
		int c = cnk(i + 1, j);
		if(i % 2 == 0){
			continue;
		}
		//int fi = (i + 1) / 2;
		c = mult(c, fact[i]);
		ans = sum(ans, c);
	}
	ans = mult(ans, 2 * n);
	cout << ans << endl;
}

int32_t main(){
	inv[1] = 1;
	fact[0] = invfact[0] = fact[1] = invfact[1] = 1;
	for(int i = 2; i < NAX; ++i){
		inv[i] = mult(inv[MOD % i], MOD - MOD / i);
		fact[i] = mult(fact[i - 1], i);
		invfact[i] = mult(invfact[i - 1], inv[i]);
	}
	int n = 0;
	scanf("%lli", &n);
	//for(int tt = 1; tt <= test; ++tt){
		test_case(n);
	//}
	return 0;
}
