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 Python (3.8.2) (judge verdict: Accepted)

#!/usr/bin/env python3
from collections import defaultdict, Counter
from itertools import product, groupby, count, permutations, combinations
from math import pi, sqrt
from collections import deque
from bisect import bisect, bisect_left, bisect_right
from string import ascii_lowercase
from functools import lru_cache
import sys
sys.setrecursionlimit(10000)
INF = float("inf")
YES, Yes, yes, NO, No, no = "YES", "Yes", "yes", "NO", "No", "no"
dy4, dx4 = [0, 1, 0, -1], [1, 0, -1, 0]
dy8, dx8 = [0, -1, 0, 1, 1, -1, -1, 1], [1, 0, -1, 0, 1, 1, -1, -1]


def inside(y, x, H, W):
    return 0 <= y < H and 0 <= x < W


def ceil(a, b):
    return (a + b - 1) // b


def sum_of_arithmetic_progression(s, d, n):
    return n * (2 * s + (n - 1) * d) // 2


def gcd(a, b):
    if b == 0:
        return a
    return gcd(b, a % b)


def lcm(a, b):
    g = gcd(a, b)
    return a / g * b


def func1(A):
    ans = 0
    N = len(A)
    m, p = [], []
    for i in range(N):
        if i < N // 2:
            m.append(A[i])
        else:
            p.append(A[i])

    ans -= sum(m) * 2
    ans += sum(p) * 2

    if N % 2 == 0:
        ans += m[-1]
        ans -= p[0]
    else:
        ans -= p[0]
        ans -= p[1]

    return ans


def func2(A):
    ans = 0
    N = len(A)
    m, p = [], []
    for i in range(N):
        if i < N // 2 + 1:
            m.append(A[i])
        else:
            p.append(A[i])

    ans -= sum(m) * 2
    ans += sum(p) * 2

    if N % 2 == 0:
        ans += m[-1]
        ans -= p[0]
    else:
        ans += m[-1]
        ans += m[-2]

    return ans


def solve(A):
    return max(func1(A[:]), func2(A[:]))


def check(A):
    ans = 0
    for p in permutations(A):
        tmp = 0
        for i in range(1, len(p)):
            tmp += abs(p[i] - p[i - 1])

        ans = max(ans, tmp)
    return ans


def main():
    N = int(input())
    A = []
    for _ in range(N):
        A.append(int(input()))
    A.sort()

    if N < 5:
        print(check(A))
    else:
        print(solve(A))


if __name__ == '__main__':
    main()