#include <bits/stdc++.h>

using namespace std;

template < class BidirectionalIterator >
bool next_combination( BidirectionalIterator first1,
	BidirectionalIterator last1,
	BidirectionalIterator first2,
	BidirectionalIterator last2 ) {
	if( (first1 == last1) || (first2 == last2) ) {
		return false;
	}
	BidirectionalIterator m1 = last1;
	BidirectionalIterator m2 = last2; --m2;
	while( --m1 != first1 && !(*m1 < *m2) ) {
	}
	bool result = (m1 == first1) && !(*first1 < *m2);
	if( !result ) {
		// ???
		while( first2 != m2 && !(*m1 < *first2) ) {
			++first2;
		}
		first1 = m1;
		std::iter_swap( first1, first2 );
		++first1;
		++first2;
	}
	if( (first1 != last1) && (first2 != last2) ) {
		// ???
		m1 = last1; m2 = first2;
		while( (m1 != first1) && (m2 != last2) ) {
			std::iter_swap( --m1, m2 );
			++m2;
		}
		// ??¢
		std::reverse( first1, m1 );
		std::reverse( first1, last1 );
		std::reverse( m2, last2 );
		std::reverse( first2, last2 );
	}
	return !result;
}

template < class BidirectionalIterator >
bool next_combination( BidirectionalIterator first,
	BidirectionalIterator middle,
	BidirectionalIterator last ) {
	return next_combination( first, middle, middle, last );
}

int main() {
	long long int N, S;
	while( cin >> N >> S) {
		vector<long long int>D{ 0,1,2,3,4,5,6,7,8,9 };

		long long int ans = 0;
		do {
			vector<long long int>D2;
			copy( D.begin(), D.begin() + N, back_inserter( D2 ) );
			do {
				long long int sum = 0;
				for( size_t i = 0; i < N; i++ ) {
					sum += (i + 1)*D2[i];
				}
				if( sum == S ) {
					ans++;
				}
			} while( next_permutation( D2.begin(), D2.end() ) );
		} while( next_combination( D.begin(), D.begin() + N, D.end() ) );
		cout << ans << endl;
	}
}