#include<bits/stdc++.h>
using namespace std;
const int maxn=1001000;
const long long md=1e9+7;
long long fac[maxn],inv[maxn];
long long powd(long long x,long long y){
	long long res=1;
	while(y){
		if(y&1) res=res*x%md;
		x=x*x%md;
		y>>=1;
	}
	return res;
}
long long f[maxn];
long long C(int x,int y){
	return fac[x]*inv[y]%md*inv[x-y]%md;
}
long long multiC(int x,int y){
	return C(x+y-1,y);
}
int main(){
	int n;
	scanf("%d",&n);
	n--;
	fac[0]=1;
	for(int i=1;i<=n;i++)
		fac[i]=fac[i-1]*i%md;
	inv[n]=powd(fac[n],md-2);
	for(int i=n;i>=1;i--)
		inv[i-1]=inv[i]*i%md;
	for(int i=1;i<=n;i++){
		if(n-i+1>i) continue;
		f[i]=multiC(n-i+1,i-(n-i+1));
	}
	long long ans=0;
	for(int i=0;i<=n;i++)
		ans=(ans+(C(n,i)-f[i]+md)*fac[i]%md*fac[n-i])%md;
	printf("%lld\n",ans);
	return 0;
}
