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 (GNU Fortran 9.2.1) (judge verdict: Wrong Answer)

program prob6
    implicit none
    integer(16)::N,i,j,ans,tmp,k,ans2
    integer(16),allocatable::A(:),gg(:)
    read(*,*) N
    allocate(A(N),gg(N))
    do i = 1, N
        read(*,*) A(i)
    end do

    call heapsort(n,A)

    ans = 0
    ans2 = 0

    if(mod(n,2) == 1)then
        i = 1
        j = N
        do k = 1, n/2
            ans = ans + A(j) - A(i)
            j = j-1
            if(k < n/2) then
                ans = ans + A(j) - A(i)
            end if
            i = i+1
        end do
        ans = ans + max(A(n)-A(n/2+1),A(n/2+1)-A(n/2))

        i = 1
        j = N
        do k = 1, n/2
            ans2 = ans2 + A(j) - A(i)
            i = i + 1
            if(k < n/2) then
                ans2 = ans2 + A(j) - A(i)
                j = j - 1
            end if
        end do
        ans2 = ans2 + max(A(n/2+1)-A(1),A(n-1)-A(n/2+1))
        ans = max(ans,ans2)

    else if(n == 2) then
        ans = A(2)-A(1)
    else
        tmp = A(n/2)
        j = N
        i = 1
        do k = 1, n/2-1
            ans = ans + A(j) - A(i)
            j = j-1
            ans = ans + A(j) - A(i)
            i = i+1
        end do
        ans = ans + A(N) - A(n/2)

        j = N
        i = 1
        do k = 1, n/2-1
            ans2 = ans2 + A(j) - A(i)
            i = i+1
            ans2 = ans2 + A(j) - A(i)
            j = j-1
        end do
        ans2 = ans2 + A(n/2+1) - A(1)
        ans = max(ans,ans2)
    end if

    write(*,*) ans

    stop
contains
    subroutine heapsort(n,array)
        implicit none
        integer(16),intent(in) :: n
        integer(16),intent(inout) :: array(1:n)
       
        integer ::i,k,j,l
        double precision :: t
       
        if(n.le.0)then
           write(6,*)"Error, at heapsort"; stop
        endif
        if(n.eq.1)return
      
        l=n/2+1
        k=n
        do while(k.ne.1)
           if(l.gt.1)then
              l=l-1
              t=array(L)
           else
              t=array(k)
              array(k)=array(1)
              k=k-1
              if(k.eq.1) then
                 array(1)=t
                 exit
              endif
           endif
           i=l
           j=l+l
           do while(j.le.k)
              if(j.lt.k)then
                 if(array(j).lt.array(j+1))j=j+1
              endif
              if (t.lt.array(j))then
                 array(i)=array(j)
                 i=j
                 j=j+j
              else
                 j=k+1
              endif
           enddo
           array(i)=t
        enddo
      
        return
    end subroutine heapsort
end program