#include <bits/stdc++.h>
using namespace std;
template <class T>
inline bool read(T &n) {
  T x = 0, tmp = 1;
  char c = getchar();
  while ((c < '0' || c > '9') && c != '-' && c != EOF) c = getchar();
  if (c == EOF) return false;
  if (c == '-') c = getchar(), tmp = -1;
  while (c >= '0' && c <= '9') x *= 10, x += (c - '0'), c = getchar();
  n = x * tmp;
  return true;
}
template <class T>
inline void write(T n) {
  if (n < 0) {
    putchar('-');
    n = -n;
  }
  int len = 0, data[20];
  while (n) {
    data[len++] = n % 10;
    n /= 10;
  }
  if (!len) data[len++] = 0;
  while (len--) putchar(data[len] + 48);
}
const int MOD = 1000000007;
const int MAXN = 60;
long long dp[MAXN][MAXN][2], C[105][105];
;
int n, k;
int main() {
  while (read(n) && read(k)) {
    memset(dp, 0, sizeof(dp));
    dp[1][0][0] = 1;
    dp[1][0][1] = 0;
    dp[0][0][0] = 0;
    dp[0][0][1] = 1;
    C[0][0] = 1;
    for (int i = 1; i <= n; i++) {
      for (int j = 0; j <= i; j++) {
        if (!j || j == i)
          C[i][j] = 1LL;
        else
          C[i][j] = (C[i - 1][j] + C[i - 1][j - 1]) % MOD;
      }
    }
    for (int i = 2; i <= n; i++) {
      for (int j = 0; j <= k; j++) {
        dp[i][j][0] = (dp[i][j][0] + ((i - 1) * dp[i - 1][j][1]) % MOD) % MOD;
        if (j)
          dp[i][j][1] =
              (dp[i][j][1] + ((i - 1) * dp[i - 1][j - 1][0]) % MOD) % MOD;
        for (int q = 0; q < i - 2; q++) {
          long long rela = (C[i - 1][2] * C[i - 3][q]) % MOD;
          for (int k1 = 0; k1 <= j; k1++) {
            int k2 = j - k1;
            dp[i][j][0] =
                (dp[i][j][0] +
                 rela * ((dp[q + 1][k1][1] * dp[i - 2 - q][k2][1]) % MOD) %
                     MOD) %
                MOD;
            if (--k2 < 0) continue;
            dp[i][j][1] =
                (dp[i][j][1] + (dp[q + 1][k1][0] * dp[i - 2 - q][k2][1] % MOD +
                                dp[q + 1][k1][1] * dp[i - 2 - q][k2][0] % MOD +
                                dp[q + 1][k1][0] * dp[i - 2 - q][k2][0]) %
                                   MOD * rela % MOD) %
                MOD;
          }
        }
      }
    }
    long long ans = (dp[n][k][0] + dp[n][k][1]) % MOD;
    printf("%I64d\n", ans);
  }
  return 0;
}
