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(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