m2a = ->m {
c = [[[0]]]
(1..m).each_with_object([]) {|s, a|
(1..s).each {|w|
(1..[s, 5].min).each {|hd|
c[s - hd][w - 1]&.each {|tl|
b = 10 ** (w - 1) * hd + tl
(a[s] ||= [nil]) << b
((c[s] ||= [])[w] ||= []) << b
}
}
}
}
}
a = m2a.(20)
g = ->m, n {puts "(#{m},#{n}) → #{a[m][n] || 0}"}
g.(2,1)
g.(2,2)
g.(2,3)
g.(20,1)
g.(20,2)
g.(20,3)
g.(20,400096)
g.(20,400097)
#g.(32,1)
#g.(32,2)
#g.(32,3)
#g.(32,1000)
#g.(32,1000000)
#g.(32,1000000000)
#g.(32,1333610936)
#g.(32,1333610937)
bTJhID0gLT5tIHsKICBjID0gW1tbMF1dXQogICgxLi5tKS5lYWNoX3dpdGhfb2JqZWN0KFtdKSB7fHMsIGF8CiAgICAoMS4ucykuZWFjaCB7fHd8CiAgICAgICgxLi5bcywgNV0ubWluKS5lYWNoIHt8aGR8CiAgICAgICAgY1tzIC0gaGRdW3cgLSAxXSYuZWFjaCB7fHRsfAogICAgICAgICAgYiA9IDEwICoqICh3IC0gMSkgKiBoZCArIHRsCiAgICAgICAgICAoYVtzXSB8fD0gW25pbF0pIDw8IGIKICAgICAgICAgICgoY1tzXSB8fD0gW10pW3ddIHx8PSBbXSkgPDwgYgogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KfQphID0gbTJhLigyMCkKZyA9IC0+bSwgbiB7cHV0cyAiKCN7bX0sI3tufSkg4oaSICN7YVttXVtuXSB8fCAwfSJ9CmcuKDIsMSkKZy4oMiwyKQpnLigyLDMpCmcuKDIwLDEpCmcuKDIwLDIpCmcuKDIwLDMpCmcuKDIwLDQwMDA5NikKZy4oMjAsNDAwMDk3KQojZy4oMzIsMSkKI2cuKDMyLDIpCiNnLigzMiwzKQojZy4oMzIsMTAwMCkKI2cuKDMyLDEwMDAwMDApCiNnLigzMiwxMDAwMDAwMDAwKQojZy4oMzIsMTMzMzYxMDkzNikKI2cuKDMyLDEzMzM2MTA5MzcpCg==
(2,1) → 2
(2,2) → 11
(2,3) → 0
(20,1) → 5555
(20,2) → 14555
(20,3) → 15455
(20,400096) → 11111111111111111111
(20,400097) → 0