def gm1(m)
q, r = m.divmod 5
(0 < r ? [r] : []) + [5] * q
end
def next_or_nil(a)
a = a.dup
k = a.rindex {|ak| 1 < ak}
i = k && (k-1).downto(0).find {|i| a[i] != 5}
if !k
nil
elsif !i
a[k] -= 1
([1] + a.reverse)
else
a[i] += 1
a[k] -= 1
a[i+1..-1] = a[i+1..-1].reverse
a
end
end
def nexts(a)
[a].tap {|b| b << a while a = next_or_nil(a)}
end
ga = (1..20).map{|m| nexts(gm1(m))}
g = ->m, n {puts "(#{m},#{n}) → #{(ga[m - 1][n - 1] || [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)
ZGVmIGdtMShtKQogIHEsIHIgPSBtLmRpdm1vZCA1CiAgKDAgPCByID8gW3JdIDogW10pICsgWzVdICogcQplbmQKZGVmIG5leHRfb3JfbmlsKGEpCiAgYSA9IGEuZHVwCiAgayA9IGEucmluZGV4IHt8YWt8IDEgPCBha30KICBpID0gayAmJiAoay0xKS5kb3dudG8oMCkuZmluZCB7fGl8IGFbaV0gIT0gNX0KICBpZiAhawogICAgbmlsCiAgZWxzaWYgIWkKICAgIGFba10gLT0gMQogICAgKFsxXSArIGEucmV2ZXJzZSkKICBlbHNlCiAgICBhW2ldICs9IDEKICAgIGFba10gLT0gMQogICAgYVtpKzEuLi0xXSA9IGFbaSsxLi4tMV0ucmV2ZXJzZQogICAgYQogIGVuZAplbmQKZGVmIG5leHRzKGEpCiAgW2FdLnRhcCB7fGJ8IGIgPDwgYSB3aGlsZSBhID0gbmV4dF9vcl9uaWwoYSl9CmVuZAoKZ2EgPSAoMS4uMjApLm1hcHt8bXwgbmV4dHMoZ20xKG0pKX0KZyA9IC0+bSwgbiB7cHV0cyAiKCN7bX0sI3tufSkg4oaSICN7KGdhW20gLSAxXVtuIC0gMV0gfHwgWzBdKS5qb2lufSJ9CgpnLigyLDEpCmcuKDIsMikKZy4oMiwzKQpnLigyMCwxKQpnLigyMCwyKQpnLigyMCwzKQpnLigyMCw0MDAwOTYpCmcuKDIwLDQwMDA5NykKI2cuKDMyLDEpCiNnLigzMiwyKQojZy4oMzIsMykKI2cuKDMyLDEwMDApCiNnLigzMiwxMDAwMDAwKQojZy4oMzIsMTAwMDAwMDAwMCkKI2cuKDMyLDEzMzM2MTA5MzYpCiNnLigzMiwxMzMzNjEwOTM3KQo=
(2,1) → 2
(2,2) → 11
(2,3) → 0
(20,1) → 5555
(20,2) → 14555
(20,3) → 15455
(20,400096) → 11111111111111111111
(20,400097) → 0