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: Accepted)

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
	private static int S;
	private static int N;
	private static int cnt;

	public static void main(String args[]) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String line;
		String[] arrays;

		while ((line = br.readLine()) != null) {
			cnt = 0;
			arrays = line.split(" ");
			N = Integer.parseInt(arrays[0]);
			S = Integer.parseInt(arrays[1]);

			comb(0, 1, new boolean[10]);
			
			System.out.println(cnt);

		}
	}

	private static void comb(int sum, int n, boolean[] c) {
		
		// ｎ件目は残りをnで割り切れるかどうかのチェックをする
		if (n == N) {
			if ((S - sum) % n == 0) {
				int a = (S - sum) / n;
				if (a < 10
						&& !c[a]) {
					cnt++;
				}
			}
			return;
		}

		// 1〜n-1件目は全探索
		for (int i = 0; i <= 9; i++) {
			if (c[i]) {
				continue;
			} else if (sum + i * n <= S && n < N) {
				c[i] = true;
				comb(sum + i * n, n + 1, c);
				c[i] = false;
			} else if (sum + i * n > S) {
				break;
			}
		}
	}
}