#include <bits/stdc++.h>
using namespace std;
const int iinf = 0x3f3f3f3f;
const long long linf = 0x3f3f3f3f3f3f3f3f;
const int N = 400;
int f[N + 1][N + 1];
const int mod = 1e9 + 7;
void fmod(int& first) { first += first >> 31 & mod; }
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0), cout.tie(0);
  int n;
  cin >> n;
  f[0][0] = f[0][1] = 1;
  for (int i = (1), iE = (n); i < iE; i++) {
    for (int l = (0), lE = (n + 1); l < lE; l++)
      if (f[i - 1][l])
        for (int r = (0), rE = (n + 1 - l); r < rE; r++)
          if (f[i - 1][r]) {
            int t = 1ll * f[i - 1][l] * f[i - 1][r] % mod;
            fmod(f[i][l + r] += t - mod);
            (l + r + 1 <= n) && (fmod(f[i][l + r + 1] += t - mod), true);
            (l > 0) && (fmod(f[i][l + r] += 2ll * l * t % mod - mod), true);
            (r > 0) && (fmod(f[i][l + r] += 2ll * r * t % mod - mod), true);
            (l > 1) && (fmod(f[i][l + r - 1] +=
                             1ll * l * (l - 1) % mod * t % mod - mod),
                        true);
            (r > 1) && (fmod(f[i][l + r - 1] +=
                             1ll * r * (r - 1) % mod * t % mod - mod),
                        true);
            (l > 0 && r > 0) &&
                (fmod(f[i][l + r - 1] += 2ll * l * r % mod * t % mod - mod),
                 true);
          }
  }
  cout << f[n - 1][1] << '\n';
  return 0;
}
