#include <bits/stdc++.h>
using namespace std;
const long long mod = 1000000007;
long long powmod(long long a, long long b) {
  long long res = 1;
  a %= mod;
  assert(b >= 0);
  for (; b; b >>= 1) {
    if (b & 1) res = res * a % mod;
    a = a * a % mod;
  }
  return res;
}
int k;
long long dp[410][410];
void upd(long long &a, long long b) { a = a + b; }
int main() {
  scanf("%d", &k);
  dp[1][0] = 1;
  dp[1][1] = 1;
  for (int i = 2; i < k + 1; i++) {
    for (int l = 0; l < k + 1; l++)
      for (int r = 0; r < k + 1; r++) {
        long long c = dp[i - 1][l] * dp[i - 1][r] % mod;
        if (l + r <= k) upd(dp[i][l + r], c);
        if (l + r + 1 <= k) upd(dp[i][l + r + 1], c);
        if (l > 0 && l + r <= k) upd(dp[i][l + r], c * 2 * l);
        if (r > 0 && l + r <= k) upd(dp[i][l + r], c * 2 * r);
        if (l + r > 0 && l + r - 1 <= k)
          upd(dp[i][l + r - 1], c * (l + r) * (l + r - 1));
      }
    for (int l = 0; l < k + 1; l++) dp[i][l] %= mod;
  }
  printf("%lld\n", dp[k][1]);
}
