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 PyPy3 (2.4.0) (judge verdict: Wrong Answer)

import sys

# import re
import math
import collections
# import decimal
import bisect
import itertools
import fractions
# import functools
import copy
import heapq
import decimal
# import statistics
import queue

sys.setrecursionlimit(10000001)
INF = 10 ** 16
MOD = 10 ** 9 + 7

ni = lambda: int(sys.stdin.readline())
ns = lambda: map(int, sys.stdin.readline().split())
na = lambda: list(map(int, sys.stdin.readline().split()))


# ===CODE===


def main():
    n = ni()

    small = queue.PriorityQueue()
    large = queue.PriorityQueue()
    for _ in range(n):
        tmp = ni()
        small.put(tmp)
        large.put(-tmp)

    res = [0 for i in range(n)]

    even = not n % 2
    idx = n // 2 - even
    res[idx] = small.get()
    cnt = 0
    while True:
        cnt += 1

        first = 0
        second = 0

        if cnt % 2:
            first = -large.get()
            if large.qsize() != 0:
                second = -large.get()
        else:
            first = small.get()
            if small.qsize() != 0:
                second = small.get()

        if 0 <= idx + cnt < n:
            res[idx + cnt] = first
        else:
            break
        if 0 <= idx - cnt < n:
            res[idx - cnt] = second
        else:
            break

    ans = 0
    for i in range(1, n):
        ans += abs(res[i - 1] - res[i])

    print(ans)


if __name__ == '__main__':
    main()