#include using namespace std; int main(){ int N; cin >> N; atcoder::modint1000000007 dp[N][N+1][4]; dp[0][0][0] = 1; for(int i = 0; i + 1 < N; i++){ for(int j = 0; j <= i; j++){ for(int k = 0; k < 4; k++){ if(!dp[i][j][k].val())continue; int aj = i ? 2 : 0, other = i + 2 - j - aj, cur = j; if(k & 2){ cur--; dp[i+1][j-1][0] += dp[i][j][k]; } if(k & 1){ cur--,aj--,other++; dp[i+1][j][2+(k>>1)] += dp[i][j][k]; } dp[i+1][j+1][2+(k>>1)] += aj * dp[i][j][k]; dp[i+1][j][k>>1] += other * dp[i][j][k]; if(j)dp[i+1][j-1][k>>1] += cur * dp[i][j][k]; } } } cout << dp[N - 1][0][0].val() << '\n'; }