from typing import List


def binomial_list(n: int, k: int) -> List[List[int]]:
    """
    Produce a list of all possible combinations of picking k elements out of n. All elements are different.

    Args:
        n: Total number of elements.
        k: Number of elements to pick.

    Returns:
        blist: List of list of combinations.

    Example:
        binomial_list(5, 3) =
        [[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]]
    """

    blist, stack = [], []

    for i in range(k):
        stack.append(i)

    while 1:
        # [:] ensures append by value instead of by reference
        blist.append(stack[:])

        while len(stack) > 0 and stack[-1] == len(stack) - k + n - 1:
            stack.pop()
        if len(stack) == 0:
            break
        stack[-1] += 1
        for i in range(k - len(stack)):
            stack.append(stack[-1] + 1)

    return blist