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

program successive_subtraction
  implicit none
  integer :: n, i, l, r
  integer(8) :: a(100000), m, s
  a = 0_8
  read(*,*) n
  read(*,*) a(1:n)
  call quick_sort(a(1:n))
  l = 0
  do while ((l.lt.n).and.(a(l+1).lt.0))
    l = l+1
  end do
  if (l.eq.0) then
    write(*,'(i0)') sum(a(1:n))-2_8*a(1)
    m = a(1)
    do i = 2, n-1
      write(*,'(i0,x,i0)') m, a(i)
      m = m-a(i)
    end do
    write(*,'(i0,x,i0)') a(n), m
    stop
  end if
  r = n+1
  do while ((r.gt.2).and.(a(r-1).gt.0))
    r = r-1
  end do
  if (r.eq.n+1) then
    write(*,'(i0)') 2_8*a(n)-sum(a(1:n))
    m = a(n)
    do i = n-1, 1, -1
      write(*,'(i0,x,i0)') m, a(i)
      m = m-a(i)
    end do
    stop
  end if
  write(*,'(i0)') sum(a(r:n))-sum(a(1:l))
  m = a(n)
  do i = 2, r-1
    write(*,'(i0,x,i0)') m, a(i)
    m = m-a(i)
  end do
  s = a(1)
  do i = r, n-1
    write(*,'(i0,x,i0)') s, a(i)
    s = s-a(i)
  end do
  write(*,'(i0,x,i0)') m, s
  stop
contains
  recursive subroutine quick_sort(a)
    implicit none
    integer(8), intent(inout) :: a(:)
    integer(8) :: p, c
    integer :: n, l, r
    n = size(a)
    l = 1
    r = n
    p = a((l+r)/2)+a(l)+a(r)-max(a((l+r)/2),a(l),a(r))-min(a((l+r)/2),a(l),a(r))
    do
      do while (a(l).lt.p)
        l = l+1
      end do
      do while (a(r).gt.p)
        r = r-1
      end do
      if (l.ge.r) exit
      c = a(l)
      a(l) = a(r)
      a(r) = c
      l = l+1
      r = r-1
    end do
    if (l.gt.2) call quick_sort(a(1:l-1))
    if (n.gt.r+1) call quick_sort(a(r+1:n))
  end subroutine quick_sort
end program successive_subtraction