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 Ruby (judge verdict: WA: Presentation Error)

# AOJ 0030 Sum of Integers

$n_combinations = Array.new(11) {Array.new(46, 0)}

def count(n = 1, s = 0, used = 0)
  (0..9).each do |i|
    used_i = 1 << i
    next if used & used_i > 0
    # 順序違いを数えない
    used |= used_i

    new_s = s + i
    $n_combinations[n][new_s] += 1

    count(n + 1, new_s, used) if n < 10
  end
end

count

while line = gets
  n, s = line.split.map {|v| v.to_i}
  break if n.zero? && s.zero?

  puts 0 unless 1 <= n && n <= 10 && 0 <= s && s <= 45

  puts $n_combinations[n][s]
end