# https://stackoverflow.com/a/75408780/1468366
def next_combination(n: int, c: list[int]):
"""Compute next combination, in lexicographical order.
Args:
n: the number of items to choose
from.
c: a list of integers between 0
(inclusive) and n (exclusive) in
strictly ascending order. It
will get modified by the call.
Returns: the list c after modification,
or None if this was the last
combination.
"""
i = len(c)
while i > 0:
i -= 1
n -= 1
if c[i] == n: continue
c[i] += 1
for j in range(i + 1, len(c)):
c[j] = c[j - 1] + 1
return c
return None
lst = [0, 1, 2]
while lst is not None:
print(lst)
lst = next_combination(5, lst)
IyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzU0MDg3ODAvMTQ2ODM2NgoKZGVmIG5leHRfY29tYmluYXRpb24objogaW50LCBjOiBsaXN0W2ludF0pOgogICAgIiIiQ29tcHV0ZSBuZXh0IGNvbWJpbmF0aW9uLCBpbiBsZXhpY29ncmFwaGljYWwgb3JkZXIuCgogICAgQXJnczoKICAgICAgbjogdGhlIG51bWJlciBvZiBpdGVtcyB0byBjaG9vc2UKICAgICAgICAgZnJvbS4KICAgICAgYzogYSBsaXN0IG9mIGludGVnZXJzIGJldHdlZW4gMAogICAgICAgICAoaW5jbHVzaXZlKSBhbmQgbiAoZXhjbHVzaXZlKSBpbgogICAgICAgICBzdHJpY3RseSBhc2NlbmRpbmcgb3JkZXIuIEl0CiAgICAgICAgIHdpbGwgZ2V0IG1vZGlmaWVkIGJ5IHRoZSBjYWxsLgogICAgUmV0dXJuczogdGhlIGxpc3QgYyBhZnRlciBtb2RpZmljYXRpb24sCiAgICAgICAgIG9yIE5vbmUgaWYgdGhpcyB3YXMgdGhlIGxhc3QKICAgICAgICAgY29tYmluYXRpb24uCiAgICAiIiIKICAgIGkgPSBsZW4oYykKICAgIHdoaWxlIGkgPiAwOgogICAgICAgIGkgLT0gMQogICAgICAgIG4gLT0gMQogICAgICAgIGlmIGNbaV0gPT0gbjogY29udGludWUKICAgICAgICBjW2ldICs9IDEKICAgICAgICBmb3IgaiBpbiByYW5nZShpICsgMSwgbGVuKGMpKToKICAgICAgICAgICAgY1tqXSA9IGNbaiAtIDFdICsgMQogICAgICAgIHJldHVybiBjCiAgICByZXR1cm4gTm9uZQoKbHN0ID0gWzAsIDEsIDJdCndoaWxlIGxzdCBpcyBub3QgTm9uZToKICAgIHByaW50KGxzdCkKICAgIGxzdCA9IG5leHRfY29tYmluYXRpb24oNSwgbHN0KQ==
[0, 1, 2]
[0, 1, 3]
[0, 1, 4]
[0, 2, 3]
[0, 2, 4]
[0, 3, 4]
[1, 2, 3]
[1, 2, 4]
[1, 3, 4]
[2, 3, 4]