Problem:
整数の和 II

0 から 100 の数字から異なる n 個の数を取り出して合計が s となる組み合わせの数を出力するプログラムを作成してください。n 個の数はおのおの 0 から 100 までとし、１つの組み合わせに同じ数字は使えません。たとえば、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 ≤ 1000 ) が１つのスペースで区切られて１行に与えられます。n と s が共に 0 のとき入力の最後とします。

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

Output

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

組み合わせの数が 1010を超える入力は与えられません。

Sample Input

3 6
3 1
0 0

Output for the Sample Input

3
0

Solution in Haskell (judge verdict: Time Limit Exceeded)

double :: Int -> Int -> Int
double u s
  |(u - 1) + u < s = 0
  |u > s = (div (s - 1) 2) + 1
  |otherwise = (div (s - 1) 2) - (s - u) + 1

solve :: Int -> Int -> Int -> Int
solve u 2 s = double u s
solve _ 0 _ = 0
solve u n s
  |s < u = sum [solve (x - 1) (n - 1) (s - x) | x <- [(div s n)..s]]
  |otherwise = sum [solve (x - 1) (n - 1) (s - x) | x <- [(div s n)..u]]

split :: Char -> [Char] -> [[Char]]
split _ [] = [[]]
split w (h:t)
  |w == h = [] : (split w t)
  |otherwise = (h : (head (split w t))) : (tail (split w t))

chomp :: [a] -> [a]
chomp [] = []
chomp ([_]) = []
chomp (a:ar) = a : chomp ar

main = do
  input <- getContents
  mapM print $ chomp (map ((\[n, s] -> solve 100 n s).(map (\n -> (read n)::Int)).(split ' ')) $ lines input)