another merge sort