with merge_sort