@dp = Array.new(11).map{|e| e = Hash.new}

@dp[1] = {0 => [1], 1 => [2], 2 => [4], 3 => [8], 4 => [16], 5 => [32], 6 => [64], 7 => [128], 8 => [256], 9 => [512]}

def checkUnique(p, target)
  return false  if p & target == target
  return true
end

def solve(n)
  (0..9).each{|i|
    #1つ少ない個数で求まる和の並び取得
    #それぞれの和の並びをもとに値を１つ追加してテーブルを更新
    @dp[n - 1].each{|k, v|
      v.each{|p|
        next if !checkUnique(p, 2 ** i)
        sum = k + n * i
        perm = p | 2 ** i
        h = @dp[n]
        #すでに同じ和のハッシュが存在する
        if h.key?(sum) then
          # bottle neck
          h[sum] << perm
          #同じ和のハッシュが存在しない
        else
          h.store(sum, [perm])
        end
      }
    }
  }
end

(2..10).each{|i| solve(i) }

loop do
  v = $stdin.gets.split(" ").map{|n| n.to_i}
  break if v[0] == 0
  p @dp[v[0]][v[1]].size
end