#include using namespace std; const int N=1e3+10,mod=1e9+7; int n,dp[N][N][2][2]; inline int add(int a,int b){ return ((a%mod)+(b%mod)+mod+mod)%mod; } inline int mul(int a,int b){ return ((a%mod)*(b%mod))%mod; } 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=3;i<=n;i++){ for(int j=0;j<=i-2;j++){ dp[i][j][0][0]=add(dp[i][j][0][0],mul(dp[i-1][j][0][0],i-j-2)); dp[i][j][0][0]=add(dp[i][j][0][0],mul(dp[i-1][j][1][0],i-j-1)); dp[i][j][0][0]=add(dp[i][j][0][0],add(mul(dp[i-1][j+1][1][0],j),mul(dp[i-1][j+1][0][0],j+1))); dp[i][j][0][0]=add(dp[i][j][0][0],add(dp[i-1][j+1][0][1],dp[i-1][j+1][1][1])); dp[i][j][1][0]=add(dp[i][j][1][0],add(mul(dp[i-1][j][0][1],i-j-2),mul(dp[i-1][j][1][1],i-j-1))); dp[i][j][1][0]=add(dp[i][j][1][0],add(mul(dp[i-1][j+1][1][1],max(j-1,0)),mul(dp[i-1][j+1][0][1],j))); dp[i][j][0][1]=(((j)?dp[i-1][j-1][0][0]*2+dp[i-1][j-1][1][0]:0)+dp[i-1][j][1][0])%mod; dp[i][j][1][1]=(((j)?dp[i-1][j-1][0][1]*2+dp[i-1][j-1][1][1]:0)+dp[i-1][j][1][1])%mod; } } cout<