#include <iostream>
#include <vector>
#include <algorithm>
#include <map>

using namespace std;

int n,s;
int cnt=0;

map<int,int> dp[1<<10];

map<int,int> dfs(int d,int si){
	int sz=0;
	for(int i = 0; i < n; i++){
		if((si>>i)&1){
			sz++;
		}
	}

	if(dp[si].size()!=0){
		return dp[si];
	}
	map<int,int> ret;
	if(d==n){
		return ret;
	}
	for(int i = 0; i < 10; i++){
		if((si>>i)&1==1){
			map<int,int> ss = dfs(d+1,(si&~(1<<i)));
			if(ss.size()==0){
				ret[((d+1)*i)]++;
			}
			else{
				if(d==0){
					//cout<<endl;
				}
				for(map<int,int>::iterator it = ss.begin(); it!=ss.end(); it++){
					if((it->first)+(d+1)*i<=s)
						ret[(it->first)+(d+1)*i]+=it->second;
				}
			}
		}
	}
	dp[si]=ret;
	return dp[si];
}


//bool used[10];
//void dfs2(int d,int sum){
//	if(d==n){
//		if(sum==s)
//			cnt++;
//		return;
//	}
//	for(int i = 0; i < 10; i++){
//		if(!used[i]){
//			used[i]=true;
//			dfs2(d+1,sum+(d+1)*i);
//			used[i]=false;
//		}
//	}
//}

int main(){

	while(cin>>n>>s){
	//	fill(used,used+10,false);
		cnt=0;
		map<int,int> m = dfs(0,(1<<10)-1);
		int minNum=0;
		for(int i = n-1; i >= 0; i--){
			minNum+=(n-1-i)*(n-(n-1-i));
		}
		if(minNum>s)
			cout<<0<<endl;
		else
			cout<<m[s]<<endl;
		for(int j = 0; j < (1<<10); j++){
			dp[j].clear();
		}
	}

	return 0;
}