m2a = ->m {
c = [[[[]]]]
(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 = [hd, tl]
(a[s] ||= [nil]) << b
((c[s] ||= [])[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)
bTJhID0gLT5tIHsKICBjID0gW1tbW11dXV0KICAoMS4ubSkuZWFjaF93aXRoX29iamVjdChbXSkge3xzLCBhfAogICAgKDEuLnMpLmVhY2gge3x3fAogICAgICAoMS4uW3MsIDVdLm1pbikuZWFjaCB7fGhkfAogICAgICAgIGNbcyAtIGhkXVt3IC0gMV0mLmVhY2gge3x0bHwKICAgICAgICAgIGIgPSBbaGQsIHRsXQogICAgICAgICAgKGFbc10gfHw9IFtuaWxdKSA8PCBiCiAgICAgICAgICAoKGNbc10gfHw9IFtdKVt3XSB8fD0gW10pIDw8IGIKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9Cn0KYSA9IG0yYS4oMjApCmcgPSAtPm0sIG4ge3B1dHMgIigje219LCN7bn0pIOKGkiAjeyhhW21dW25dIHx8IFswXSkuam9pbn0ifQpnLigyLDEpCmcuKDIsMikKZy4oMiwzKQpnLigyMCwxKQpnLigyMCwyKQpnLigyMCwzKQpnLigyMCw0MDAwOTYpCmcuKDIwLDQwMDA5NykKI2cuKDMyLDEpCiNnLigzMiwyKQojZy4oMzIsMykKI2cuKDMyLDEwMDApCiNnLigzMiwxMDAwMDAwKQojZy4oMzIsMTAwMDAwMDAwMCkKI2cuKDMyLDEzMzM2MTA5MzYpCiNnLigzMiwxMzMzNjEwOTM3KQo=
(2,1) → 2
(2,2) → 11
(2,3) → 0
(20,1) → 5555
(20,2) → 14555
(20,3) → 15455
(20,400096) → 11111111111111111111
(20,400097) → 0