def generate_options(sequence, constraints):
    """
    Generates options for each element of *sequence*, based on *constraints*

    :param seqence: The sequence to generate options for
    :type sequence: list or str
    :param constraints: The constraints to base the options on
    :type constraints: list of Constraint
    :return: A list of options
    :rtype: list of set of str
    """
    options = [set() for _ in range(len(sequence) + 6)]

    for constraint in constraints:
        labels = constraint.label.split('-')
        for i, label in enumerate(labels):
            index = constraint.span[0] + i
            options[index].add(label)

    for option in options:
        if not option:
            option.add('_')

    return options