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.Scanner;

public class Main {
	private Scanner sc;
	
	private int s;
	private boolean[] flag;
	public static void main(String[] args) {
		new Main();
	}
	
	public Main() {
		sc = new Scanner(System.in);
		
		while (sc.hasNextLine() == true) {
			String[] nico = sc.nextLine().split(" ");
			int n = Integer.parseInt(nico[0]);
			
			s = Integer.parseInt(nico[1]);
			if (s > 1000) {
				System.out.println(0);
				continue;
			}
			
			flag = new boolean[10];
			for (int i = 0; i < flag.length; i++) {
				flag[i] = false;
			}
			
			System.out.println(dfs(n, 0));
		}
	}
	
	private int dfs(int n, int sum) {
		if (n == 0) {
			if (sum == s) return 1;
			return 0;
		}
		
		int ans = 0;
		for (int i = 0; i < flag.length; i++) {
			if (flag[i] == false) {
				flag[i] = true;
				ans = ans + dfs((n - 1), sum + n * i);
				flag[i] = false;
			}
		}
		
		return ans;
	}
}