#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back               
#define mp make_pair         
#define nline "\n"
const ll M1=1e9+7;                                               
const ll M2=998244353;                         
const ll N=1000005;     
const ll INF_ADD=1e18;
const ll INF_MUL=1e13;                                          
#define f first                          
#define s second                                
#define pll pair<ll,ll>   
#ifndef ONLINE_JUDGE 
#define debug(x) cerr<<#x<<" "; _print(x); cerr<<nline;
#else
#define debug(x);
#endif  
void _print(ll x){cerr<<x;}    
template<class T,class V> void _print(pair<T,V> p) {cerr<<"{"; _print(p.first);cerr<<","; _print(p.second);cerr<<"}";}
template<class T>void _print(vector<T> v) {cerr<<" [ "; for (T i:v){_print(i);cerr<<" ";}cerr<<"]";}
template<class T>void _print(set<T> v) {cerr<<" [ "; for (T i:v){_print(i); cerr<<" ";}cerr<<"]";}
template<class T>void _print(multiset<T> v) {cerr<< " [ "; for (T i:v){_print(i);cerr<<" ";}cerr<<"]";}
template<class T,class V>void _print(map<T, V> v) {cerr<<" [ "; for(auto i:v) {_print(i);cerr<<" ";} cerr<<"]";} 
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
vector<ll> fact(N,1);
ll binpow(ll a,ll b){
    if(b==0)
        return 1;   
    ll x=binpow(a,b/2);
    x=(x*x)%M1;
    if(b&1)
        return (x*a)%M1;     
    return x;      
} 
ll inverse(ll a){   
    return binpow(a,M1-2);       
}     
ll nCr(ll a,ll b){   
    if((a<b)||(a<=0))   
        return 0;   
    ll denom=inverse((fact[b]*fact[a-b])%M1);
    return ((fact[a]*denom)%M1);   
}
void solve(){  
    ll n; cin>>n;    
    ll ans=0;
    for(ll i=1;i<=n;i++){   
        fact[i]=(fact[i-1]*i)%M1;         
    }
    if((n%2)==0){   
        ans=fact[n] ;
    } 
    for(ll i=1;i<=n;i++){   
        if((n-i)%2)   
            continue;
        ll taken=nCr(n-i,i);
        ll left=nCr(n-i-1,i-1);
        ans=(ans+((taken+left)*fact[n-i])%M1)%M1;
    }
    ans=(ans*2)%M1;
    cout<<ans;
    return;
}             
int main()                                             
{         
    ios_base::sync_with_stdio(false);                        
    cin.tie(NULL);                     
    #ifndef ONLINE_JUDGE          
    freopen("input.txt", "r", stdin);                                         
    freopen("output.txt", "w", stdout);  
    freopen("error.txt", "w", stderr);                        
    #endif    
    ll t=1;           
    //cin>>t;
    while(t--){
        solve();
    }
    /*
    Correct data type?
    Infinity?
    Base case?
    */
    cerr<<"Time:"<<1000*((double)clock())/(double)CLOCKS_PER_SEC<<"ms\n"; 
} 