#include<cstdio>
#include<algorithm>

using namespace std;

static const int A = 1e+9 + 7;
static const int MAX_N = 50;
static const int MAX_K = 1250;
unsigned int dp[MAX_N + 1][MAX_N + 1][MAX_K + 1];
int n, k;

void solve();

int main() {
    scanf("%d %d", &n, &k);
    if (k > n * n / 2) printf("0\n");
    else {
        solve();
        printf("%u\n", dp[n][0][k]);
    }
    return 0;
}

void solve() {
    dp[1][0][0] = 1;
    dp[1][1][2] = 1;
    for (int i = 2; i <= n; i++) {
        for (int l = 0; l <= min(i * (i + 1), k) ; l++) {
            for (int j = 0; j <= n && l >= 2 * j; j++) {
                dp[i][j][l] = (2L*j+1)*dp[i-1][j][l-2*j] % A;
                if (j <= n) dp[i][j][l] += ((j+1L)*(j+1)*dp[i-1][j+1][l-2*j]) % A;
                if (j > 0) dp[i][j][l] += (dp[i-1][j-1][l-2*j]) % A;
                dp[i][j][l] %= A;
//                printf("%d %d %d: %u\n", i, j, l, dp[i][j][l]);
            }
        }
    }
}
