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.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;


public class Main {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		while(true){
			String str = br.readLine();
			if(str == null){
				break;
			}
			String[] tmpArray = str.split(" ");
			int n = Integer.parseInt(tmpArray[0]);
			int ans = Integer.parseInt(tmpArray[1]);
			
			System.out.println(combinationOfSeq(n, ans, null));
		}
	}
	
	static int combinationOfSeq(int n , int ans, boolean[] used){
		
		if(used == null){
			used = new boolean[10];
			Arrays.fill(used, false);
		}
		
		//System.out.println("n = "+n+" ans = "+ans);
		if(ans < 0){
			return 0;
		}

		if(n == 0){
			if(ans == 0){
			//	System.out.println("OK");
				return 1;
			}
			else {
				return 0;
			}
		}
//		if(n == 1){
//			if(ans >= 0 && ans <= 9){
//				System.out.println("OK");
//				return 1;
//			}
//			else {
//				return 0;
//			}
//		}
		
		int result = 0;
		for(int i = 9; i >= 0 ; i--){
			if(used[i]){
				continue;
			}
			used[i] = true;
			result += combinationOfSeq(n - 1, ans - n*i, used);
			used[i] = false;
		}
		
		return result;
	}

}