def supported(aln):
    def col_consensus(columns):
        for col in columns:
            if (
                (col.count('-') >= len(col)/2) or
                all(c.islower() for c in col if c not in '.-')
                ):
                yield '-'
                continue
            if any(c.islower() for c in col):
                logging.warn('Mixed lowercase and uppercase letters in a '
                        'column: ' + ''.join(col))
                col = map(str.upper, col)
            most_common = Counter(
                    [c for c in col if c not in '-']
                    ).most_common()
            if not most_common:
                logging.warn("Column is all gaps! How did that happen?")
            if most_common[0][1] == 1:
                yield '-'
            elif (len(most_common) > 1 and
                    most_common[0][1] == most_common[1][1]):
                ties = [x[0] for x in most_common
                        if x[1] == most_common[0][1]]
                yield ''.join(ties)
            else:
                yield most_common[0][0]
    return list(col_consensus(zip(*aln)))