#define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair i_i; typedef pair ll_i; typedef pair d_i; typedef pair ll_ll; typedef pair d_d; struct edge { ll B, T, F, P; }; ll MOD = 1000000007; ll _MOD = 1000000009; double EPS = 1e-10; int INF = INT_MAX / 10; int main() { int N; cin >> N; vector< vector > dp(1200, vector(1200)); dp[0][0] = 1; for (int i = 0; i < N; i++) { vector< vector > _dp(1200, vector(1200)); for (int i = 0; i < 1200; i++) for (int j = 0; j < 1200; j++) { ll& x = dp[i][j]; if (x == 0) continue; _dp[i][j] = (_dp[i][j] + x * i + x * (i + j) * (i + j - 1)) % MOD; if (j) _dp[i + 1][j - 1] = (_dp[i + 1][j - 1] + x * j) % MOD; _dp[i + 1][j] = (_dp[i + 1][j] + x) % MOD; _dp[i][j + 1] = (_dp[i][j + 1] + x * i * 2 + x * j * 2) % MOD; _dp[i][j + 2] = (_dp[i][j + 2] + x) % MOD; } dp = _dp; } ll ans = 0; for (int i = 1; i < 1200; i++) ans = (ans + dp[i][0]) % MOD; cout << ans << endl; }