def iterative_overlap_assembly(
        variant_sequences,
        min_overlap_size=MIN_VARIANT_SEQUENCE_ASSEMBLY_OVERLAP_SIZE):
    if len(variant_sequences) <= 1:
        return variant_sequences
    n_before_collapse = len(variant_sequences)
    variant_sequences = collapse_substrings(variant_sequences)
    n_after_collapse = len(variant_sequences)
    logger.info(
        "Collapsed %d -> %d sequences",
        n_before_collapse,
        n_after_collapse)
    merged_variant_sequences = greedy_merge(variant_sequences, min_overlap_size)
    return list(sorted(
        merged_variant_sequences,
        key=lambda seq: -len(seq.reads)))