<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def greedy_merge_helper( variant_sequences, min_overlap_size=MIN_VARIANT_SEQUENCE_ASSEMBLY_OVERLAP_SIZE):
 """ Returns a list of merged VariantSequence objects, and True if any were successfully merged. """

    merged_variant_sequences = {}
    merged_any = False

    # here we'll keep track of sequences that haven't been merged yet, and add them in at the end
    unmerged_variant_sequences = set(variant_sequences)
    for i in range(len(variant_sequences)):
        sequence1 = variant_sequences[i]
        # it works to loop over the triangle (i+1 onwards) because combine() tries flipping the
        # arguments if sequence1 is on the right of sequence2
        for j in range(i + 1, len(variant_sequences)):
            sequence2 = variant_sequences[j]
            combined = sequence1.combine(sequence2)
            if combined is None:
                continue
            if combined.sequence in merged_variant_sequences:
                existing = merged_variant_sequences[combined.sequence]
                # the existing VariantSequence and the newly merged
                # VariantSequence should differ only in which reads support them
                combined = combined.add_reads(existing.reads)
            merged_variant_sequences[combined.sequence] = combined
            unmerged_variant_sequences.discard(sequence1)
            unmerged_variant_sequences.discard(sequence2)
            merged_any = True
    result = list(merged_variant_sequences.values()) + list(unmerged_variant_sequences)
    return result, merged_any