#include <bits/stdc++.h>
using namespace std;
const int mo = 1e9 + 7;
int n, m;
long long f[105][105], g[105][105], xf[105];
long long fpm(long long x, long long y) {
  long long s = 1;
  while (y) {
    if (y & 1) s = (s * x) % mo;
    y >>= 1, x = (x * x) % mo;
  }
  return s;
}
long long S(int n, int m) {
  int i;
  long long s = xf[m];
  for (i = 0; i < m; i++) (s *= (n + i)) %= mo;
  return s;
}
int main() {
  int i, j, k, l, p;
  cin >> n >> m;
  xf[0] = 1;
  for (i = 1; i < 105; i++) xf[i] = xf[i - 1] * fpm(i, mo - 2) % mo;
  f[0][1] = 1;
  for (i = 1; i <= 50; i++) {
    for (j = 0; j < i; j++)
      for (k = 1; k <= j + 1; k++)
        for (l = 1; l <= i - j; l++)
          (g[i][min(k, l)] += f[j][k] * f[i - 1 - j][l]) %= mo;
    for (j = 1; j <= i + 1; j++)
      for (k = 50; k >= 1; k--)
        for (p = 1; i * p <= k; p++)
          for (l = j * p + 1; l <= k + 1; l++)
            (f[k][l] += f[k - p * i][l - p * j] * S(g[i][j], p)) %= mo;
  }
  cout << f[n][m];
  return 0;
}
