merge sort from mit