#include <bits/stdc++.h>
using namespace std;
const long long p = 1e9 + 7;
long long f[405][405], n;
long long dp(int n, int k) {
  if (!k) return 1;
  if (n == 1) return (k == 1);
  if (f[n][k] != -1) return f[n][k];
  f[n][k] = 0;
  for (int i = 0; i <= k + 1; i++) {
    if (i <= k - 1) f[n][k] += dp(n - 1, i) * dp(n - 1, k - i - 1) % p;
    if (i <= k)
      f[n][k] += dp(n - 1, i) * dp(n - 1, k - i) % p +
                 dp(n - 1, i) * dp(n - 1, k - i) % p * k * 2 % p;
    f[n][k] += dp(n - 1, i) * dp(n - 1, k + 1 - i) % p * (k + 1) * k % p;
    f[n][k] %= p;
  }
  return f[n][k];
}
int main() {
  memset(f, -1, sizeof f);
  cin >> n;
  cout << dp(n, 1);
}
