/* * src.cpp * * Created on: 2016/08/21 * Author: joi */ #include using namespace std; #define FOR(i,a,b) for(int i=(a);i<(b);i++) #define REP(i,a) FOR(i,0,a) const int MAX_N=1e5,MOD=1e9+7; typedef long long ll; int N; ll a[MAX_N+1]; ll esum,osum; int main(){ scanf("%d",&N); esum=0; //偶数番目の項の和 osum=1; //奇数番目の項の和 a[1]=1; FOR(i,2,N+1){ //第i項を決定する if (i%2==0){ //偶数なら a[i]=i*osum%MOD; esum+=a[i]; esum%=MOD; }else{ //奇数なら a[i]=i*esum%MOD; osum+=a[i]; osum%=MOD; } } printf("%lld\n",a[N]); return 0; }