code: def greedy_merge_helper(
          variant_sequences,
          min_overlap_size=MIN_VARIANT_SEQUENCE_ASSEMBLY_OVERLAP_SIZE):
      
      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
docs: Returns a list of merged VariantSequence objects, and True if any
      were successfully merged.