#include #define int long long using namespace std; const int mod=1e9+7; const int N=1010; int n,dp[N][N][2][2]; signed main(){ ios::sync_with_stdio(false);cin.tie(0),cout.tie(0); cin>>n; dp[1][0][0][0]=1;dp[2][0][0][0]=2; for(int i=2;i0){ dp[i+1][j-1][0][0]=(dp[i+1][j-1][0][0]+dp[i][j][0][0]*j%mod)%mod; dp[i+1][j-1][0][1]=(dp[i+1][j-1][0][1]+dp[i][j][1][0]*max(0ll,j-1)%mod)%mod; dp[i+1][j-1][0][0]=(dp[i+1][j-1][0][0]+dp[i][j][1][0])%mod; dp[i+1][j-1][0][0]=(dp[i+1][j-1][0][0]+dp[i][j][0][1]*max(0ll,j-1)%mod)%mod; dp[i+1][j-1][0][1]=(dp[i+1][j-1][0][1]+dp[i][j][1][1]*max(0ll,j-2)%mod)%mod; dp[i+1][j-1][0][0]=(dp[i+1][j-1][0][0]+dp[i][j][1][1])%mod; } dp[i+1][j][1][0]=(dp[i+1][j][1][0]+dp[i][j][0][1])%mod; dp[i+1][j][1][1]=(dp[i+1][j][1][1]+dp[i][j][1][1])%mod; dp[i+1][j][0][0]=(dp[i+1][j][0][0]+max(i-j-1,0ll)*dp[i][j][0][0]%mod)%mod; dp[i+1][j][0][1]=(dp[i+1][j][0][1]+max(i-j-1,0ll)*dp[i][j][1][0]%mod)%mod; dp[i+1][j][0][0]=(dp[i+1][j][0][0]+max(i-j,0ll)*dp[i][j][0][1]%mod)%mod; dp[i+1][j][0][1]=(dp[i+1][j][0][1]+max(i-j,0ll)*dp[i][j][1][1]%mod)%mod; } } cout<