Problem:
Score : 400 points

Problem Statement

You are given N integers; the i-th of them is A_i.
Find the maximum possible sum of the absolute differences between the adjacent elements after arranging these integers in a row in any order you like.

Constraints

2 \leq N \leq 10^5

1 \leq A_i \leq 10^9

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N
A_1
:
A_N

Output

Print the maximum possible sum of the absolute differences between the adjacent elements after arranging the given integers in a row in any order you like.

Sample Input 1

5
6
8
1
2
3

Sample Output 1

21

When the integers are arranged as 3,8,1,6,2, the sum of the absolute differences between the adjacent elements is |3 - 8| + |8 - 1| + |1 - 6| + |6 - 2| = 21. This is the maximum possible sum.

Sample Input 2

6
3
1
4
1
5
9

Sample Output 2

25

Sample Input 3

3
5
5
1

Sample Output 3

8

Solution in Java8 (OpenJDK 1.8.0) (judge verdict: Time Limit Exceeded)

import java.util.*;

class Main {
	public static ArrayList<ArrayList<Integer>> permute(int[] num) {
      ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();

      //start from an empty list
      result.add(new ArrayList<Integer>());

      for (int i = 0; i < num.length; i++) {
          //list of list in current iteration of the array num
          ArrayList<ArrayList<Integer>> current = new ArrayList<ArrayList<Integer>>();

          for (ArrayList<Integer> l : result) {
              // # of locations to insert is largest index + 1
              for (int j = 0; j < l.size()+1; j++) {
                  // + add num[i] to different locations
                  l.add(j, num[i]);

                  ArrayList<Integer> temp = new ArrayList<Integer>(l);
                  current.add(temp);

                  //System.out.println(temp);

                  // - remove num[i] add
                  l.remove(j);
              }
          }

          result = new ArrayList<ArrayList<Integer>>(current);
      }

      return result;
  }

  public static void main(String[] args) {
  	Scanner sc = new Scanner(System.in);
    int lines = Integer.parseInt(sc.nextLine());
    int[] arr = new int[lines];

    for(int i=0; i<lines; i++) {
        arr[i] = Integer.parseInt(sc.nextLine());
    }

    System.out.println(Main.calcMax(Main.permute(arr)));
  }

  public static int calcMax(ArrayList<ArrayList<Integer>> ar) {
  	int max = 0;
  	for(ArrayList<Integer> i: ar) {
      int tmp = 0;
      for(int n=0; n<i.size(); n++) {
      	if(n==0)
        	continue;
        tmp += Math.abs(i.get(n) - i.get(n - 1));
      }
      if(max < tmp)
      	max = tmp;
    }
    return max;
  }
}