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

using namespace std;

int n,s;
int cnt=0;

int vvv[10];
int size;


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

map<int,int> dfs(int d,int si){
	if(dp[d][si].size()!=0){
		return dp[d][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{
				for(map<int,int>::iterator it = ss.begin(); it!=ss.end(); it++){
					ret[(it->first)+(d+1)*i]+=it->second;
				}
			}
		}
	}
	dp[d][si]=ret;
	return dp[d][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);
		size=0;
		cnt=0;
		dfs2(0,0);
		cout<<cnt<<endl;
		//map<int,int> m = dfs(0,(1<<10)-1);
		//cout<<m[s]<<endl;
		//for(int i = 0; i < 11; i++){
		//	for(int j = 0; j < (1<<10); j++){
		//		dp[i][j].clear();
		//	}
		//}
	}

	return 0;
}