#include <bits/stdc++.h>
using namespace std;
int dp[420][420];
const int p = 1e9 + 7;
int DP(int n, int t) {
  if (t == 0) return 1;
  if (n == 1) return t == 1;
  if (dp[n][t] != -1) return dp[n][t];
  dp[n][t] = 0;
  for (int i = 0; i <= t; i++)
    dp[n][t] = (dp[n][t] + 1ll * DP(n - 1, i) * DP(n - 1, t - i)) % p;
  for (int i = 0; i < t; i++)
    dp[n][t] = (dp[n][t] + 1ll * DP(n - 1, i) * DP(n - 1, t - i - 1)) % p;
  for (int i = 0; i <= t; i++)
    dp[n][t] =
        (dp[n][t] + 1ll * DP(n - 1, i) * DP(n - 1, t - i) % p * t * 2) % p;
  for (int i = 0; i <= t + 1; i++)
    dp[n][t] = (dp[n][t] +
                1ll * DP(n - 1, i) * DP(n - 1, t + 1 - i) % p * (t + 1) * t) %
               p;
  return dp[n][t];
}
int main() {
  int n;
  scanf("%d", &n);
  memset(dp, 255, sizeof(dp));
  printf("%d\n", DP(n, 1));
  return 0;
}
