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

using namespace std;


int n,s;
int cnt=0;

int vvv[10];
int size;

int ss;
int usedNum;

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];
}

//void dfs(int idx){
//	if(size+10-idx<n-1)
//		return;
//	else if(size==n-1){
//		// ツ計ツ算ツつキツづゥ
//		do{
//			int sum=0;
//			for(int i = 0; i < n-1; i++)
//				sum+=(i+2)*vvv[i];
//			if(ss==sum)
//				cnt++;
//		}while(next_permutation(vvv,vvv+n-1));
//		return;
//	}
//
//	for(int i = idx; i < 10; i++){
//		if(i==usedNum)
//			continue;
//		vvv[size]=i;
//		size++;
//		if(size+9-i<n-1){
//			size--;
//			return;
//		}
//		dfs(i+1);
//		size--;
//	}
//}

int main(){

	while(cin>>n>>s){
		size=0;
		cnt=0;
		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;
}