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 JAVA (judge verdict: Time Limit Exceeded)

import java.util.Arrays;
import java.util.Scanner;

public class Main {

	static int n, s, count;
	static boolean[] already;
	public static void main(String[] args) {
		Scanner cin = new Scanner(System.in);
		while(cin.hasNext()){
			n = cin.nextInt();
			s = cin.nextInt();
			if(n>10){
				System.out.println(0);
				continue;
			}
			count=0;
			already = new boolean[10];
			int[] a  =new int[n];
			Arrays.fill(a, -1);
			dfs(0, a);
			System.out.println(count);
		}
	}
	static void dfs(int depth, int[] a){
		if(depth == n){
			if(is(a)){
				count++;
			}
			return;
		}
		for(int i = 0; i < 10;i++){
			if(already[i]){
				continue;
			}
			already[i]=true;
			int tmp = a[depth];
			a[depth] = i;

			dfs(depth+1, a);
			a[depth] = tmp;
			already[i]=false;
		}
	}
	static boolean is(int[] a){
		int sum=0;
		for(int i = 0; i < a.length;i++){
			if(a[i]>=0){
			sum += a[i]*(i+1);
			}
		}
		return sum==s;
	}
}