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(8) :: N, i, j, K, L, m, tmp, s, ind
    integer(8), allocatable :: a(:)
    character(40) :: x, y
    logical :: check

    read(*,*) N
    allocate(a(N))

    read(*,*) a

    K = 0
    L = 0
    do i = 1, N
        if(a(i) > 0)then
            K = K + 1
        else if(a(i) < 0)then
            L = L + 1
        end if
    end do

    s = 0
    do i = 1, N
        s = s + abs(a(i))
    end do

    if(K == N) then
        m = 100000
        do i = 1, N
            if(m > a(i)) then
                m = a(i)
                ind = i
            end if
        end do
        write(x,*) s - 2 * m
        write(*,'(a)') trim(adjustl(x))

        if(mod(N, 2) == 1) then
            tmp = m
            do i = 1, N
                if(i == ind) then
                    cycle
                end if
                write(x,*) a(i)
                write(y,*) tmp
                write(*,'(a, 1X, a)') trim(adjustl(x)), trim(adjustl(y))
                tmp = a(i) - tmp                 
            end do
        else
            tmp = m
            check = .false.
            do i = 1, N
                if(i == ind) then
                    cycle
                end if
                if(check .eqv. .false.) then
                    write(x,*) tmp
                    write(y,*) a(i)
                    write(*,'(a, 1X, a)') trim(adjustl(x)), trim(adjustl(y))
                    tmp = tmp - a(i)                    
                else
                    write(x,*) a(i)
                    write(y,*) tmp
                    write(*,'(a, 1X, a)') trim(adjustl(x)), trim(adjustl(y))
                    tmp = a(i) - tmp 
                end if
            end do
        end if

    else if(L == N) then
        m = -100000
        do i = 1, N
            if(m < a(i)) then
                m = a(i)
                ind = i
            end if
        end do
        write(x,*) s + 2 * m
        write(*,'(a)') trim(adjustl(x))
        tmp = m
        do i = 1, N
            if(i == ind) then
                cycle
            end if
            write(x,*) tmp
            write(y,*) a(i)
            write(*,'(a, 1X, a)') trim(adjustl(x)), trim(adjustl(y))
            tmp = tmp - a(i)  
        end do

    else
        do i = 1, N
            if(a(i) <= 0) then
                m = a(i)
                ind = i
                exit
            end if
        end do
        write(x,*) s
        write(*,'(a)') trim(adjustl(x))
        
        if(mod(K, 2) == 1) then
            tmp = m
            do j = 1, N
                if(a(j) > 0) then
                    write(x,*) a(j)
                    write(y,*) tmp
                    write(*,'(a, 1X, a)') trim(adjustl(x)), trim(adjustl(y))
                    tmp = a(j) - tmp
                end if
            end do
            do j = ind+1, N
                if(a(j) <= 0) then
                    write(x,*) tmp
                    write(y,*) a(j)
                    write(*,'(a, 1X, a)') trim(adjustl(x)), trim(adjustl(y))
                    tmp = tmp - a(j)
                end if
            end do
        else
            tmp = m
            check = .false.
            do j = 1, N
                if(a(j) > 0) then
                    if(check .eqv. .false.) then
                        write(x,*) tmp
                        write(y,*) a(j)
                        write(*,'(a, 1X, a)') trim(adjustl(x)), trim(adjustl(y))
                        tmp = tmp - a(j)
                        check = .true.
                    else
                        write(x,*) a(j)
                        write(y,*) tmp
                        write(*,'(a, 1X, a)') trim(adjustl(x)), trim(adjustl(y))
                        tmp = a(j) - tmp
                    end if
                end if
            end do
            do j = ind+1, N
                if(a(j) <= 0) then
                    write(x,*) tmp
                    write(y,*) a(j)
                    write(*,'(a, 1X, a)') trim(adjustl(x)), trim(adjustl(y))
                    tmp = tmp - a(j)
                end if
            end do
        end if
    end if

    
    deallocate(a)

    stop
contains
end program prob6