#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
const int p=1e9+7;
int n,fac[N],inv[N];
inline int pw(int x,int y){
	int ans=1;
	while(y){
		if(y&1)ans=1ll*ans*x%p;
		x=1ll*x*x%p; y>>=1;
	}
	return ans;
}
inline int C(int n,int m){
	if(m<0||m>n)return 0;
	return 1ll*fac[n]*inv[m]%p*inv[n-m]%p;
}
int main(){
	fac[0]=inv[0]=1; for(int i=1; i<N; ++i)fac[i]=1ll*fac[i-1]*i%p,inv[i]=pw(fac[i],p-2);
	scanf("%d",&n);
	int ans=0;
	for(int i=n-2; i>=0; --i){
		int tmp=(C(n-2,i)+C(n-2,i-1)-C(i-1,2*i-n))%p;
		tmp=1ll*tmp*fac[i]%p*fac[n-i-1]%p;
		if(!i)tmp=fac[n-i-1];
		ans=(ans+tmp)%p;
	}
	printf("%d",(ans+p)%p);
	return 0;
}