def _first_available(color_list):
    """
    (https://en.wikipedia.org/wiki/Greedy_coloring)
    Return smallest non-negative integer not in the given list of colors.

    :param color_list: List of neighboring nodes colors
    :type color_list: list of int
    :rtype: int
    """
    color_set = set(color_list)
    count = 0

    while True:
        if count not in color_set:
            return count
        count += 1