#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
const int maxn = 400 + 10;
int k;
int f[maxn][maxn];
inline void add(int &a, int b) { a = (a + b) % mod; }
inline int C(int x) { return 1LL * x * (x - 1) % mod; }
int main(int argc, char **argv) {
  scanf("%d", &k);
  f[1][1] = 1;
  f[1][0] = 1;
  for (int i = 2; i <= k; i++)
    for (int x = 0; x <= k; x++)
      for (int y = 0; y <= k; y++) {
        if (x + y > k || x + y - (k - i + 1) > 1) break;
        int X = 1LL * f[i - 1][x] * f[i - 1][y] % mod;
        if (x + y + 1 <= k) add(f[i][x + y + 1], X);
        if (x + y <= k) add(f[i][x + y], X);
        if (x + y <= k) add(f[i][x + y], 2LL * (x + y) * X % mod);
        if (x + y >= 2) add(f[i][x + y - 1], 1LL * X * C(x + y) % mod);
      }
  cout << f[k][1] << endl;
  return 0;
}
