#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define endl '\n'
#define all(x) (x).begin(),(x).end()
#define trace(...) debug(#__VA_ARGS__, __VA_ARGS__)
template <typename Arg1>
void debug(const char* name, Arg1&& arg1){
  cerr << name << ": " << arg1 << endl;
}
template <typename Arg1, typename... Args>
void debug(const char* names, Arg1&& arg1, Args&&... args){
  const char* comma = strchr(names + 1, ',');
  cerr.write(names, comma - names) << ": " << arg1 << " | ";
  debug(comma + 1, args...);
}

const int INF=1e9+5;
const int N=1e6+5;
const int M=1e6;
const ll oo=LLONG_MAX;
const int mod=1e9+7;

void add_self(int& a,int b){
	a+=b;
	if(a>=mod) a-=mod;
}

int mul(int a,int b){
	return 1ll*a*b%mod;
}

int poww(int a,int b){
	int r=1;
	while(b){
		if(b&1) r=mul(r,a);
		a=mul(a,a);
		b>>=1;
	}
	return r;
}

int inv(int x){
	return poww(x,mod-2);
}

int fac[N],ifac[N];

void init(){
	fac[0]=fac[1]=1;
	ifac[0]=ifac[1]=inv(1);
	for(int i=2;i<N;++i){
		fac[i]=mul(fac[i-1],i);
		ifac[i]=inv(fac[i]);
	}
}

int bino(int n,int k){
	if(k>n||k<0) return 0;
	return mul(fac[n],mul(ifac[n-k],ifac[k]));
}

int main(){
	ios::sync_with_stdio(0); cin.tie(0);
	init();
	int n;
	cin>>n;
	int st=(n+1)/2;
	if(st%2) ++st;
	int ans=0;
	//~ ab?a?b?ababa?ba?bab?
	for(int ques=n%2;ques<=n/2;ques+=2){
		int remCh=n-ques;
		int cur=1;
		if(ques>0){
			cur=bino(remCh,ques);
			//~ a?b?a?b?a?b?
			add_self(cur,bino(remCh-1,ques-1));
			//~ _a?b?a?b?a?b
		}
		cur=mul(cur,fac[remCh]);
		cur=mul(cur,2);
		add_self(ans,cur);
	}
	cout<<ans;
	return 0;
}
