#include <bits/stdc++.h>
using namespace std;
const int mod = 1000000007;
inline int add(int a, int b) {
  if ((a += b) >= mod) a -= mod;
  return a;
}
inline int dec(int a, int b) {
  if ((a -= b) < 0) a += mod;
  return a;
}
inline int mult(int a, int b) {
  long long t = 1ll * a * b;
  if (t >= mod) t %= mod;
  return t;
}
inline int power(int a, int b) {
  int out = 1;
  while (b) {
    if (b & 1) out = mult(out, a);
    a = mult(a, a);
    b >>= 1;
  }
  return out;
}
int n, m, fac[105], ifac[105], f[55][55], g[55];
int main() {
  fac[0] = 1;
  for (int i = 1; i <= 100; i++) fac[i] = mult(fac[i - 1], i);
  ifac[100] = power(fac[100], mod - 2);
  for (int i = 99; i >= 0; i--) ifac[i] = mult(ifac[i + 1], i + 1);
  for (int i = 100; i >= 1; i--) ifac[i] = mult(ifac[i], fac[i - 1]);
  scanf("%d%d", &n, &m);
  f[0][1] = 1;
  for (int i = 1; i <= n; i++) {
    memset(g, 0, sizeof(g));
    for (int a = 0; a + 1 <= i; a++) {
      int c = i - a - 1;
      for (int j = 1; j <= n + 1; j++) {
        for (int k = 1; k <= n + 1; k++) {
          g[min(j, k)] = add(g[min(j, k)], mult(f[a][j], f[c][k]));
        }
      }
    }
    for (int l = 1; l <= n + 1; l++) {
      for (int j = n; j >= 0; j--) {
        for (int k = n + 1; k >= 1; k--) {
          int cc = g[l], v = g[l];
          for (int t = 1; j + t * i <= n && k + t * l <= n + 1; t++)
            f[j + t * i][k + t * l] =
                add(f[j + t * i][k + t * l], mult(f[j][k], cc)),
                                 cc = mult(cc, mult(add(v, t), ifac[t + 1]));
        }
      }
    }
  }
  printf("%d\n", f[n][m]);
  return 0;
}
