#include <bits/stdc++.h>
using namespace std;
const int Maxn = 55, p = 1e9 + 7;
int n, m;
long long inv[Maxn], f[Maxn][Maxn], g[Maxn][Maxn], sum[Maxn][Maxn];
long long get_inv(int x) {
  return x <= 1 ? 1 : (p - p / x) * get_inv(p % x) % p;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) inv[i] = get_inv(i);
  f[0][1] = sum[0][1] = 1;
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= i + 1; j++)
      for (int k = 1; k <= i; k++)
        (g[i][j] += sum[k - 1][j] * sum[i - k][j]) %= p;
    for (int j = 1; j <= i + 1; j++) {
      (g[i][j] += p - g[i][j + 1]) %= p;
      for (int a = n; a >= 0; a--)
        for (int b = n + 1; b >= 0; b--) {
          long long now = 1;
          for (int d = 1; i * d <= a && j * d <= b; d++) {
            (now *= inv[d] * (g[i][j] + d - 1 + p) % p) %= p;
            (f[a][b] += now * f[a - i * d][b - j * d]) %= p;
          }
        }
    }
    for (int j = i + 1; j >= 1; j--) sum[i][j] = (sum[i][j + 1] + f[i][j]) % p;
  }
  printf("%lld", f[n][m]);
  return 0;
}
