#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
#define reg register
#define rep(i,a,b) for(reg int i=a,i##end=b;i<=i##end;++i)
#define drep(i,a,b) for(reg int i=a,i##end=b;i>=i##end;--i)

char IO;
int rd(){
	int s=0,f=0;
	while(!isdigit(IO=getchar())) if(IO=='-') f=1;
	do s=(s<<1)+(s<<3)+(IO^'0');
	while(isdigit(IO=getchar()));
	return f?-s:s;
}

const int N=52,P=1e9+7;

int n,k;
ll dp[N][N][N*N+100];

int main(){
	n=rd(),k=rd();
	if((k&1)||(k>n*n/2)) return puts("0"),0;
	dp[0][0][1250]=1;
	rep(i,0,n-1) rep(j,0,i) rep(s,1250-n*n/2,1250+n*n/2) {
		(dp[i+1][j][s]+=(2*j+1)*dp[i][j][s])%=P;
		if(s>=2*i+2) (dp[i+1][j+1][s-2*i-2]+=dp[i][j][s])%=P;
		if(j&&s+2*i+2<=2500) (dp[i+1][j-1][s+2*i+2]+=dp[i][j][s]*j*j%P)%=P;
		//cout<<i<<' '<<j<<' '<<s<<' '<<dp[i][j][s]<<endl;
	}
	//rep(i,0,8) cout<<dp[4][0][i+1250]<<endl;
	printf("%lld\n",dp[n][0][k+1250]);
}

















