#include<iostream>
#define MAX 10

using namespace std;

int gflag[MAX];
int gp[MAX];
int gnums[MAX];

void permit(int rest, int n, int s, int *ans){
	int t = 0;
	for(int i = 0; i < n; i++ ) if( gflag[i] ) t++;

	if( t == n ){
		// TODO
		int tmp = 0;
		for(int i = 1; i <= n; i++){
			tmp += i * gnums[gp[i - 1]];
			if( tmp > s ) return ;
		}
		if( tmp == s ) (*ans)++;
		return ;
	}

	for(int i = 0; i < n; i++ ){
		if( gflag[i] ){
			continue;
		}else{
			gp[n - rest] = i;
			gflag[i] = 1;
			permit(rest - 1, n, s, ans);
			gflag[i] = 0;
		}
	}
}

void comb(int n, int k, int nnum, int s, int *ans){
	bool loop = false;

	for(int i = 0; i < k; i++){
		gnums[i] = i;
	}

	do{
		//int flag[MAX] = {0,}, pp[MAX] = {0,};
		for(int i = 0; i < MAX; i++){
			gflag[i] = 0; gp[i] = 0;
		}
		loop = false;

		// TODO
		permit(nnum, nnum, s, ans);

		for(int pk = k - 1; pk >= 0; pk--){
			gnums[pk]++;
			if( gnums[pk] <= n - (k - pk) ){
				for(int j = pk + 1; j < k; j++){
					gnums[j] = gnums[j - 1] + 1;
				}
				pk++;
				loop = true;
				break;
			}
		}
	}while(loop);
}


int main(void){
	while( 1 ){
		int ans = 0;
		int n, s;

		cin >> n >> s;
		if( cin.eof() ) break;

		comb(10, n, n, s, &ans);

		cout << ans << endl;
	}
	return 0;
}