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 PHP7 (7.0.15) (judge verdict: Wrong Answer)

<?php
class In {
    public $array = [];
    function __construct()	{
        while (!feof(STDIN)) {
            $str = trim(fgets(STDIN));
            $this->array = array_merge($this->array, explode(' ', $str));
        }
        $this->length = count($this->array);
    }
}

class Out {
    public static function line($str = "") {
        echo $str . PHP_EOL;
    }
}


$in = new In();
array_splice($in->array, 0, 1);

$length = count($in->array);
sort($in->array);
$large = $in->array;
$small = array_splice($large, 0, $length / 2);
rsort($large);

$flag = (bool)($length % 2);

$ans = "";
$smallCnt = 0;
$largeCnt = 0;
$smallLength = count($small);
$largeLength = count($large);

$flag = !$flag;

if($flag){
    $ans = $large[$largeCnt++];
}else{
    $ans = $small[$smallCnt++];
}
$flag = !$flag;

$switch = 0;
while (true) {
    $left = substr($ans, 0, 1);
    $right = substr($ans, -1, 1);

    if($flag){
        if($largeCnt >= $largeLength){
            $switch = 0;
            $flag != $flag;
        }else{
            $t = $large[$largeCnt++];
            if(abs($t - $left) > abs($t - $right)){
                $ans = $t . "," . $ans;
            }else{
                $ans = $ans . "," . $t;
            }
            ++$switch;
        }

    }else{
        if($smallCnt >= $smallLength){
            $switch = 0;
            $flag = !$flag;
        }else{
            $t = $small[$smallCnt++];
            if(abs($t - $left) > abs($t - $right)){
                $ans = $t . "," . $ans;
            }else{
                $ans = $ans . "," . $t;
            }
            ++$switch;
        }
    }

    if($switch >= 2){
        $switch = 0;
        $flag = !$flag;
    }


    if($smallCnt >= $smallLength && $largeCnt >= $largeLength){
        break;
    }
}
$arr = explode(',', $ans);

$ans = 0;
for ($i = 0; $i < $length - 1; ++$i) { 
    $ans += ($arr[$i] > $arr[$i + 1]) ? $arr[$i] - $arr[$i + 1] : $arr[$i + 1] - $arr[$i];
}

Out::line($ans);