m2a = ->m {
c = [[[[]]]]
(1..m).each_with_object([]) {|i, a|
(1..i).each {|w|
(1..5).each {|hd|
j = i - hd
break if j < 0
c[j][w - 1]&.each {|tl|
b = [hd, tl]
a[i] ||= [nil]
a[i] << b
c[i] ||= []
c[i][w] ||= []
c[i][w] << b
}
}
}
}
}
a = m2a.(20)
g = ->m, n {puts "(#{m},#{n}) → #{(a[m][n] || [0]).join}"}
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)
bTJhID0gLT5tIHsKICBjID0gW1tbW11dXV0KICAoMS4ubSkuZWFjaF93aXRoX29iamVjdChbXSkge3xpLCBhfAogICAgKDEuLmkpLmVhY2gge3x3fAogICAgICAoMS4uNSkuZWFjaCB7fGhkfAogICAgICAgIGogPSBpIC0gaGQKICAgICAgICBicmVhayBpZiBqIDwgMAogICAgICAgIGNbal1bdyAtIDFdJi5lYWNoIHt8dGx8CiAgICAgICAgICBiID0gW2hkLCB0bF0KICAgICAgICAgIGFbaV0gfHw9IFtuaWxdCiAgICAgICAgICBhW2ldIDw8IGIKICAgICAgICAgIGNbaV0gfHw9IFtdCiAgICAgICAgICBjW2ldW3ddIHx8PSBbXQogICAgICAgICAgY1tpXVt3XSA8PCBiCiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQp9CmEgPSBtMmEuKDIwKQpnID0gLT5tLCBuIHtwdXRzICIoI3ttfSwje259KSDihpIgI3soYVttXVtuXSB8fCBbMF0pLmpvaW59In0KZy4oMiwxKQpnLigyLDIpCmcuKDIsMykKZy4oMjAsMSkKZy4oMjAsMikKZy4oMjAsMykKZy4oMjAsNDAwMDk2KQpnLigyMCw0MDAwOTcpCiNnLigzMiwxKQojZy4oMzIsMikKI2cuKDMyLDMpCiNnLigzMiwxMDAwKQojZy4oMzIsMTAwMDAwMCkKI2cuKDMyLDEwMDAwMDAwMDApCiNnLigzMiwxMzMzNjEwOTM2KQojZy4oMzIsMTMzMzYxMDkzNykK
(2,1) → 2
(2,2) → 11
(2,3) → 0
(20,1) → 5555
(20,2) → 14555
(20,3) → 15455
(20,400096) → 11111111111111111111
(20,400097) → 0