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 JavaScript (node.js v5.12) (judge verdict: Accepted)

var toInt = x=>parseInt(x,10);
var toIntArr = arr=>arr.map(x=>toInt(x));
var abs = x=>x>0?x:-x;
function min(){var rest=arguments,v=rest[0];for(var i=1;i<rest.length;i++)if(rest[i]<v)v=rest[i];return v}
function max(){var rest=arguments,v=rest[0];for(var i=1;i<rest.length;i++)if(rest[i]>v)v=rest[i];return v}
function gcd(){var rest=arguments,v=rest[0],temp=(a,b)=>b?temp(b,a%b):a;for(var i=1;i<rest.length;i++)v=temp(v,rest[i]);return v}
Main(require("fs").readFileSync("/dev/stdin", "utf8"));
 
function Main(input){
	var input = input.split('\n');
	var n = toInt(input[0]);
	var as = [];
	for(var i = 0; i < n; i++){
		as[i] = toInt(input[i+1]);
	}

	as.sort((a,b)=>a-b);

	var x = 0;
	var y = 0;
	if(n%2===0){
		for(var i = 0; i < n; i++){
			x += i>=n/2? 2*as[i]: -2*as[i];
		}
		x += as[n/2 -1] - as[n/2];
	}else{
		for(var i = 0; i < n; i++){
			x += i>=(n-1)/2? 2*as[i]: -2*as[i];
			y += i>(n-1)/2? 2*as[i]: -2*as[i];
		}
		x -= as[(n-1)/2] + as[(n+1)/2];
		y += as[(n-1)/2] + as[(n-3)/2];
	}
	var ans = max(x,y);

	//console.log(as,bs)
	console.log(ans);

	return 0;
}