Problem:
Combination of Number Sequences

0 から 9 までの整数を使った n 個の数の並び k1, k2, ..., kn を考えます。正の整数 n と s を読み込んで、

k1 + 2 × k2 + 3 × k3 + ... + n × kn = s

となっているような n 個の数の並びが何通りあるかを出力するプログラムを作成してください。ただし、1 つの「n 個の数の並び」には同じ数が 2 回以上現われないものとします。

Input

入力は複数のデータセットからなります。各データセットとして、n (1 ≤ n ≤ 10) と s (0 ≤ s ≤ 10,000)が空白区切りで１行に与えられます。

データセットの数は 100 を超えません。

Output

データセットごとに、n 個の整数の和が s になる組み合わせの個数を１行に出力します。

Sample Input

3 10
3 1

Output for the Sample Input

8
0

Solution in C (judge verdict: Memory Limit Exceeded)

//AOJ 0070 Combination of Number Sequences
//ツ甘ョツ本ツ全ツ探ツ催オツ　ツδδつ可サツ催帰ツ　ツビツッツトツ使ツづづづゥ
#include<stdio.h>
#include<string.h>
int dp[11][1<<10+1][400];
int perm(int b,int c,int u,int e,int f){
	int i,j,ans=0;
	if(dp[c][u][e]>=0)return dp[c][u][e];
	if(b==c){
		if(e==f)return 1;
		else return 0;
		//return 0;
	}else{
		for(i=0;i<10;i++){
			if(!(u&(1<<i))){
				if(e+i*(c+1)<=f)ans+=perm(b,c+1,u+(1<<i),e+i*(c+1),f);
			}
		}
	}
	dp[b][u][e]=ans;
	return ans;
}
int main(){
	int n,s;
	int i,j,k;
	memset(dp,-1,sizeof(dp));
	while(scanf("%d%d",&n,&s)!=EOF){
		//perm(n,0,0,0,s);
		printf("%d\n",perm(n,0,0,0,s));
		/*for(i=0;i<10;i++){
			for(j=0;j<1<<5;j++){
				for(k=0;k<200;k++){
					if(dp[i][j][k]>=0)printf("(%d %d %d) ",i,k,dp[i][j][k]);
				}
			}
		}*/
	}
}