#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const int MAXN = 805;
long long dp[MAXN][MAXN];
int n;
const int MOD = 1e9 + 7;
void inline add(long long &a, long long x) { a += x; }
int main() {
  scanf("%d", &n);
  dp[1][0] = dp[1][1] = 1;
  for (int i = (1); i < (n); i++) {
    for (int l = (0); l < (n + 1); l++) {
      for (int r = (0); r < (n + 1); r++) {
        long long x = 1ll * dp[i][l] * dp[i][r] % MOD;
        add(dp[i + 1][l + r], x);
        add(dp[i + 1][l + r + 1], x);
        add(dp[i + 1][l + r], 2ll * (l + r) * x);
        add(dp[i + 1][l + r - 1], 1ll * (l + r) * (l + r - 1) * x);
      }
    }
    for (int j = (1); j < (n + 1); j++) dp[i + 1][j] %= MOD;
  }
  cout << dp[n][1] << endl;
}
