def skippable_exons(exons):
    """ Determine which exon(s) can be skipped

    For each exon (except the first and second, which cannot be skipped), we
    want to find the minimum number of exons which together have a size that
    can be divided by 3.
    >>> list(skippable_exons([30]))
    []
    >>> list(skippable_exons([30,30]))
    []
    >>> list(skippable_exons([30,30,30]))
    [[1]]
    >>> list(skippable_exons([30,30,30,30]))
    [[1], [2]]
    >>> list(skippable_exons([30,31,32,30]))
    [[1, 2]]
    >>> list(skippable_exons([30,32,32,30]))
    []

    """
    # If there are less than 3 exons, there is nothing to skip
    if len(exons) < 3:
        return []

    # We check every exon that isn't the first or the last
    for i in range(1,len(exons)):
        # Test every sub-sequence of exons, starting from the current exon
        for j in range(i+1, len(exons)):
            # Determine the total lenght of the exons we are considering
            total_length = sum(exons[i:j])
            if total_length%3 == 0:
                yield list(range(i,j))
                # Once we found the minimum number of exons to skip to stay in
                # frame (can be 1), we are not interested in skipping more
                break