#include <iostream>
#include <fstream>
#include <sstream>
#include <iomanip>
#include <complex>
#include <string>
#include <vector>
#include <list>
#include <deque>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <bitset>
#include <functional>
#include <utility>
#include <algorithm>
#include <numeric>
#include <typeinfo>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <climits>
#include <ctime>

using namespace std;

#define dump(n) cout<<"# "<<#n<<"="<<(n)<<endl
#define debug(n) cout<<__FILE__<<","<<__LINE__<<": #"<<#n<<"="<<(n)<<endl
#define repi(i,a,b) for(int i=int(a);i<int(b);i++)
#define rep(i,n) repi(i,0,n)
#define iter(c) __typeof((c).begin())
#define foreach(i,c) for(iter(c) i=(c).begin();i!=(c).end();i++)
#define allof(c) (c).begin(),(c).end()
#define mp make_pair

typedef unsigned int uint;
typedef long long ll;
typedef unsigned long long ull;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<string> vs;
typedef pair<int,int> pii;

//ostream& operator<<(ostream& os,const vi& a)
//{
//	rep(i,a.size())
//		printf("%d%c",a[i],i==a.size()-1?'\n':' ');
//	return os;
//}
//
//int solve1(int n,int s)
//{
//	vi a(10),k(10);
//	rep(i,10){
//		a[i]=i+1;
//		k[i]=i;
//	}
//	int res=0;
//	do{
//		if(inner_product(a.begin(),a.begin()+n,k.begin(),0)==s)
//			res++;
//		reverse(n+allof(k));
//	}while(next_permutation(allof(k)));
//	return res;
//}

int solve2(int n,int s,int use)
{
	if(s<0)
		return 0;
	
	if(n==1){
		if(s>9)
			return 0;
		else
			return (1<<s&use)==0;
	}
	else{
		int res=0;
		rep(i,10){
			if((1<<i&use)==0)
				res+=solve2(n-1,s-n*i,use|1<<i);
		}
		return res;
	}
}

//int solve3(int n,int s,int use,vector<vvi>& memo)
//{
//	if(s<0)
//		return 0;
//	
//	//printf("%d %d %d\n",n,s,use);
//	if(memo[n][s][use]!=-1)
//		return memo[n][s][use];
//	
//	if(n==1){
//		if(s>9)
//			memo[n][s][use]=0;
//		else
//			memo[n][s][use]=((1<<s&use)==0);
//	}
//	else{
//		int res=0;
//		rep(i,10){
//			if((1<<i&use)==0)
//				res+=solve3(n-1,s-n*i,use|1<<i,memo);
//		}
//		memo[n][s][use]=res;
//	}
//	//printf("#%d %d %d: %d\n",n,s,use,res);
//	return memo[n][s][use];
//}

int main()
{
	//vector<vvi> memo(11,vvi(331,vi(1<<10,-1)));
	
	for(int n,s;cin>>n>>s;){
		//printf("#input: %d %d\n",n,s);
		//cout<<solve1(n,s)<<endl;
		cout<<solve2(n,s,0)<<endl;
		//cout<<solve3(n,s,0,memo)<<endl;
	}
	
	return 0;
}