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 Fortran (gfortran v4.8.4) (judge verdict: Accepted)

program align
  implicit none
  integer :: n, a(100000) = 0, b(100000) = 0, i, j
  integer(8) :: x = 0_8, y
  read(*,*) n
  do i = 1, n
    read(*,*) a(i)
  end do
  call quick_sort(a(1:n))
  do j = 1, 2
    b(1) = a((n+1)/2)
    do i = 1, n-1
      if (mod(i,2) == 0) then
        b(i+1) = a(i/2)
      else
        b(i+1) = a(n-i/2)
      end if
    end do
    y = 0_8
    do i = 1, n-1
      y = y+abs(b(i)-b(i+1))
    end do
    x = max(x,y)
    a(1:n) = a(n:1:-1)
  end do
  write(*,'(i0)') x
contains
  recursive subroutine quick_sort(a)
    integer, intent(inout) :: a(:)
    integer :: n, l, r, m
    integer :: p
    n = size(a)
    l = 1
    r = n
    m = (n+1)/2
    p = a(l)+a(m)+a(r)-max(a(l),a(m),a(r))-min(a(l),a(m),a(r))
    do
      do while (a(l) < p)
        l = l+1
      end do
      do while (a(r) > p)
        r = r-1
      end do
      if (l >= r) exit
      a(l) = xor(a(l),a(r))
      a(r) = xor(a(l),a(r))
      a(l) = xor(a(l),a(r))
      l = l+1
      r = r-1
    end do
    if (l-1 > 1) call quick_sort(a(1:l-1))
    if (n > r+1) call quick_sort(a(r+1:n))
  end
end program align