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 {

	/**
	 * @param args
	 */
	public static int n;
	public static int s;
	public static int[] k;
	public static boolean[] used = new boolean[10];
	public static int sum;
	public static int res = 0;
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		doIt();
		//System.out.println(getNth(543, 1));
	}
	
	public static void doIt(){
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()){
			n = sc.nextInt();
			s = sc.nextInt();
			k = new int[n];
			sum = 0;
			res = 0;
			Arrays.fill(used, false);
			setNth(0);
			System.out.println(sum);
		}
	}
	
	public static void setNth(int num){
		//全部セットし終えていたら
		if(num == n){
			if(res == s){
				//print(k);
				sum++;
			}
		}
		else{
			for(int i = 0; i < 10; i++){
				if(used[i] == false){
					k[num] = i;
					int t = (num + 1) * i;
					if(res + t > s){
						break;
					}
					else{
						res += t;
						used[i] = true;
						setNth(num + 1);
						res -= t;
						used[i] = false;
					}
				}
			}
		}
	}
	
	public static void print(int[] array){
		for(int i : array){
			System.out.print(i + " ");
		}
		System.out.println();
	}
//	
//	//nのk桁目の数字を返す関数
//	public static int getNth(long n, int k){
//		long tmp = n % (long)Math.pow(10, k);
//		tmp /= (long)Math.pow(10, k - 1);
//		return (int)tmp;
//	}

}