Problem:
Score : 500 points

Problem Statement

There are N integers, A_1, A_2, ..., A_N, written on a blackboard.

We will repeat the following operation N-1 times so that we have only one integer on the blackboard.

Choose two integers x and y on the blackboard and erase these two integers. Then, write a new integer x-y.

Find the maximum possible value of the final integer on the blackboard and a sequence of operations that maximizes the final integer.

Constraints

2 \leq N \leq 10^5

-10^4 \leq A_i \leq 10^4

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N
A_1 A_2 ... A_N

Output

Print the maximum possible value M of the final integer on the blackboard, and a sequence of operations x_i, y_i that maximizes the final integer, in the format below.

Here x_i and y_i represent the integers x and y chosen in the i-th operation, respectively.

If there are multiple sequences of operations that maximize the final integer, any of them will be accepted.

M
x_1 y_1
:
x_{N-1} y_{N-1}

Sample Input 1

3
1 -1 2

Sample Output 1

4
-1 1
2 -2

If we choose x = -1 and y = 1 in the first operation, the set of integers written on the blackboard becomes (-2, 2).

Then, if we choose x = 2 and y = -2 in the second operation, the set of integers written on the blackboard becomes (4).

In this case, we have 4 as the final integer. We cannot end with a greater integer, so the answer is 4.

Sample Input 2

3
1 1 1

Sample Output 2

1
1 1
1 0

Solution in Fortran (GNU Fortran 9.2.1) (judge verdict: Wrong Answer)

program prob6
    implicit none
    integer, allocatable::a(:), ans(:,:)
    integer::n, i, j
    read(*,*) n
    allocate(a(n),ans(n,2))
    read(*,*) a
    call hsort(n,1,1,a)
    if(a(n) <= 0) then
        do i = 1, n-1
            ans(i,1) = a(n)
            ans(i,2) = a(n-1)
            a(n) = a(n) - a(n-1)
        end do
    else if(a(1) >= 0 .and. a(n) >= 0) then
        do i = 1, n-2
            ans(i,1) = a(1)
            ans(i,2) = a(i+1)
            a(1) = a(1) - a(i+1)
        end do
        ans(n-1,1) = a(n)
        ans(n-1,2) = a(1)
        a(n) = a(n) - a(1)
    else
        do i = 1, n
            if(a(i) >= 0) then
                do j = i, n-1
                    ans(j-i+1,1) = a(1)
                    ans(j-i+1,2) = a(j)
                    a(1) = a(1) - a(j)
                end do
                do j = 1, i-1
                    ans(n-i+j,1) = a(n)
                    ans(n-i+j,2) = a(j)
                    a(n) = a(n) - a(j)
                end do
                exit
            end if
        end do
    end if
    write(*,*) a(n)
    do i = 1, n-1
        write(*,*) ans(i,1), ans(i,2)
    end do
    deallocate(a, ans)
    stop
contains
    ! n行m列の配列をp列目でsort
    ! 1次元配列ならm=p=1
    subroutine hsort(n,m,p,array)
        implicit none
        integer,intent(in)::n, m, p
        integer,intent(inout)::array(n,m)

        integer ::i,k,j,l
        integer::t(m)

        if(n.le.0)then
        write(6,*)"Error, at heapsort"; stop
        end if
        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
            end if
        end if
        i=l
        j=l+l
        do while(j.le.k)
            if(j.lt.k)then
                if(array(j,p).lt.array(j+1,p))j=j+1
            end if
            if (t(p).lt.array(j,p))then
                array(i,:)=array(j,:)
                i=j
                j=j+j
            else
                j=k+1
            end if
        end do
        array(i,:)=t
        end do

        return
    end subroutine hsort
end program