#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<set>
#include<unordered_map>
using namespace std;
typedef long long ll;
#define chmax(a,b) a=max(a,b)
#define chmin(a,b) a=min(a,b)
#define mod 1000000007
#define mad(a,b) a=(a+b)%mod
#define Nmax 55
ll dp[Nmax][Nmax][Nmax*Nmax];
int main(){
    cin.tie(0);
    ios::sync_with_stdio(0);
    ll N,K; cin>>N>>K;
    for(int i=0;i<Nmax;i++)for(int j=0;j<Nmax;j++)for(int k=0;k<Nmax*Nmax;k++){
	dp[i][j][k]=0;
    }
    dp[0][0][0]=1;
    for(ll n=0;n<N;n++)for(ll x=0;x<=N;x++)for(ll k=0;k<=K;k++){
	mad(dp[n+1][x+1][k+2*x],dp[n][x][k]);
	mad(dp[n+1][x+0][k+2*x],dp[n][x][k]*(2*x+1));
	if(x)mad(dp[n+1][x-1][k+2*x],dp[n][x][k]*x*x);
    }
    cout<<dp[N][0][K]<<endl;
}


