iterator comb(m, n): seq[int] =
var c = newSeq[int](n)
for i in 0 .. <n: c[i] = i
block outer:
while true:
yield c
var i = n-1
inc c[i]
if c[i] <= m - 1: continue
while c[i] >= m - n + i:
dec i
if i < 0: break outer
inc c[i]
while i < n-1:
c[i+1] = c[i] + 1
inc i
for i in comb(5, 3): echo i
aXRlcmF0b3IgY29tYihtLCBuKTogc2VxW2ludF0gPQogIHZhciBjID0gbmV3U2VxW2ludF0obikKICBmb3IgaSBpbiAwIC4uIDxuOiBjW2ldID0gaQogCiAgYmxvY2sgb3V0ZXI6CiAgICB3aGlsZSB0cnVlOgogICAgICB5aWVsZCBjCiAKICAgICAgdmFyIGkgPSBuLTEKICAgICAgaW5jIGNbaV0KICAgICAgaWYgY1tpXSA8PSBtIC0gMTogY29udGludWUKIAogICAgICB3aGlsZSBjW2ldID49IG0gLSBuICsgaToKICAgICAgICBkZWMgaQogICAgICAgIGlmIGkgPCAwOiBicmVhayBvdXRlcgogICAgICBpbmMgY1tpXQogICAgICB3aGlsZSBpIDwgbi0xOgogICAgICAgIGNbaSsxXSA9IGNbaV0gKyAxCiAgICAgICAgaW5jIGkKIApmb3IgaSBpbiBjb21iKDUsIDMpOiBlY2hvIGkK