Problem:
整数の和

0 から 9 の数字から異なる n 個の数を取り出して合計が s となる組み合わせの数を出力するプログラムを作成してください。n 個の数はおのおの 0 から 9 までとし、１つの組み合わせに同じ数字は使えません。たとえば、n が 3 で s が 6 のとき、3 個の数字の合計が 6 になる組み合わせは、

1 + 2 + 3 = 6

0 + 1 + 5 = 6

0 + 2 + 4 = 6

の 3 通りとなります。

Input

複数のデータセットが与えられます。各データセットに n (1 ≤ n ≤ 9) と s (0 ≤ s ≤ 100) が１つのスペースで区切られて１行に与えられます。n と s が共に 0 のとき入力の最後とします（この場合は処理せずにプログラムを終了する）。

データセットの数は 50 を超えません。

Output

各データセットに対して、n 個の整数の和が s になる組み合わせの数を１行に出力して下さい。

Sample Input

3 6
3 1
0 0

Output for the Sample Input

3
0

Solution in JAVA (judge verdict: Accepted)

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

public class Main{
	static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	static int n,s,ans;

	public static void main(String[] args) throws IOException {

		String str;

		while(!(str=br.readLine()).equals("0 0")){
			String strArray[] = str.split(" ");
			n = Integer.parseInt(strArray[0]);
			s = Integer.parseInt(strArray[1]);
			solve();
		}

	}

	static void solve(){
		ans=0;
		cal(0, n, 0);
		System.out.println(ans);
	}

	static void cal(int i, int n, int sum){
		if(n==0){
			if(sum==s){
				ans++;
				return;
			}
		}

		if(i>9)return;
		for(int k=i; k<=9; k++){
			cal(k+1, n-1, sum+k);
		}
	}
}