#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(){
    vector<int> v;
    for(int i=0; i < 10; i++) v.push_back(i);

    int n, s;
    while(cin >> n >> s){
        int ret = 0;
        do{
            vector<int> vv;
            for(int i=0; i < n; i++) vv.push_back(v[i]);
            do{
                int sum = 0;
                for(int j=0; j < n; j++) sum += vv[j]*(j+1);
                if(sum == s) ret++;
            }while(next_permutation(vv.begin(), vv.end()));
        }while(next_combination(v.begin(), v.begin()+n, v.end()));
        cout << ret << endl;
    }
}