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.io.*;
import java.util.StringTokenizer;
import java.util.ArrayList;

class Main {
	public static void main(String args[]) {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String buf;

		try {
			while ((buf = br.readLine())!=null) {
				StringTokenizer st = new StringTokenizer(buf);
				int n = Integer.parseInt(st.nextToken());
				int s = Integer.parseInt(st.nextToken());
				System.out.println(solve(n,s,new ArrayList<Integer>(),-1));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static int solve(int n,int s,ArrayList<Integer> a,int add) {
		if (n==0) {
			if (s==0) {
				//for (int i=0;i<a.size();i++) {
				//	if (i==0) System.out.print(a.get(i));
				//	else System.out.print("+"+(i+1)+"*"+a.get(i));
				//}
				//System.out.println("+"+(a.size()+1)+"*"+add);
				return 1;
			}
			else {
				return 0;
			}
		} else if (s<0) return 0;

		ArrayList<Integer> b = new ArrayList<Integer>(a);
		if (add>=0) b.add(add);

		int count = 0;
		for (int i=0;i<=9;i++) {
			if (b.indexOf(i)<0) count += solve(n-1,s-i*(b.size()+1),b,i);
		}
		return count;
	}
}