#include <iostream>
#include <cstring>

using namespace std;

const int Z = 1e9+7;

int main() {
    int n, k;
    cin >> n >> k;

    int dp[n+1][n+1][n*n+1];
    memset(dp, 0, sizeof(dp));
    dp[0][0][0] = 1;
    for (int i = 1; i <= n; i++) {
        for (int j = 0; j <= i; j++) {
            for (int k = 2 * j - 2; k <= n * n; k++) {
                if (k >= 2 * j) {
                    dp[i][j][k] = 1ll * (2 * j + 1) * dp[i-1][j][k-2*j] % Z;
                }
                if (j <= i - 1 && k >= 2 * j + 2) {
                    dp[i][j][k] = (dp[i][j][k] + 1ll * (j + 1) * (j + 1) * dp[i-1][j+1][k-2*j-2]) % Z;
                }
                if (j >= 1 && k >= 2 * j - 2) {
                    dp[i][j][k] = (dp[i][j][k] + dp[i-1][j-1][k-2*j+2]) % Z;
                }
            }
        }
    }

    cout << dp[n][0][k] << endl;

    return 0;
}
