def mergeSort(X):
  mergeSortHelper(X, 0, len(X))
  return X

def mergeSortHelper(X, left, right):
  if (right - left) > 1:
    mid = (left + right) // 2
    mergeSortHelper(X, left, mid)
    mergeSortHelper(X, mid, right)
    merge(X, left, mid, right)

def merge(X, left, mid, right):
  temp = []
  left_idx = left
  right_idx = mid
  while left_idx < mid and right_idx < right:
    if X[left_idx] < X[right_idx]:
      temp.append(X[left_idx])
      left_idx = left_idx + 1
    else:
      temp.append(X[right_idx])
      right_idx = right_idx + 1
  while left_idx < mid:
    temp.append(X[left_idx])
    left_idx = left_idx + 1
  while right_idx < right:
    temp.append(X[right_idx])
    right_idx = right_idx + 1
  for i in range(left, right):
    X[i] = temp[i-left]

list1 = [72, 1, 48, 9, 21, 26]
list2 = ["a", "x", "y", "b", "z", "w", "r"]

print("List 1: " + str(list1))
list1 = mergeSort(list1)
print("List 1 (sorted): " + str(list1))

print("List 2: " + str(list2))
list2 = mergeSort(list2)
print("List 2 (sorted): " + str(list2))