/**
  * Sorts list. See MergeSort
  *
  * @param list
  * @param temp
  * @param low
  * @param high
  */
 private static <E extends Comparable<? super E>> void sort(
     ArrayList<E> list, ArrayList<E> temp, int low, int high) {
   if (low < high) {
     int center = (low + high) / 2;
     sort(list, temp, low, center);
     sort(list, temp, center + 1, high);
     merge(list, temp, low, center + 1, high);
   }
 }