from collections import *
from heapq import *
from itertools import *
from fractions import gcd
import sys
from decimal import *
import copy
from bisect import *
input=lambda :sys.stdin.readline().rstrip()
N=int(input())
A=list(map(int,input().split()))
if N==2:
    A.sort()
    print(A[1]-A[0])
    print(A[1],A[0])
else:
    plus= [i for i in A if i>=0]
    minus=[i for i in A if i<0]

    plus.sort(reverse=True)
    minus.sort()
    lst=[]
    if not minus:
        a=plus.pop()
        b=plus.pop()
        minus.append(a-b)
        lst.append([a,b])
    if not plus:
        a=minus.pop()
        b=minus.pop()
        plus.append(a-b)
        lst.append([a,b])

    while len(plus)>1:
        a=plus.pop()
        lst.append([minus[0],a])
        minus[0]-=a

    while len(minus)>1:
        a=minus.pop()
        lst.append([plus[0],a])
        plus[0]-=a

    print(plus[0]-minus[0])
    lst.append([plus[0],minus[0]])
    for a,b in lst:
        print(a,b) from collections import * from heapq import * from itertools import * from fractions import gcd import sys sys from decimal import * import copy copy from bisect import * input=lambda :sys.stdin.readline().rstrip() input lambda :sys.stdin.readline().rstrip() sys.stdin.readline().rstrip() sys.stdin.readline().rstrip sys.stdin.readline() sys.stdin.readline sys.stdin sys stdin readline rstrip N=int(input()) N int(input()) int input() input A=list(map(int,input().split())) A list(map(int,input().split())) list map(int,input().split()) map int input().split() ().split () input split if N==2:
    A.sort()
    print(A[1]-A[0])
    print(A[1],A[0])
else:
    plus= [i for i in A if i>=0]
    minus=[i for i in A if i<0]

    plus.sort(reverse=True)
    minus.sort()
    lst=[]
    if not minus:
        a=plus.pop()
        b=plus.pop()
        minus.append(a-b)
        lst.append([a,b])
    if not plus:
        a=minus.pop()
        b=minus.pop()
        plus.append(a-b)
        lst.append([a,b])

    while len(plus)>1:
        a=plus.pop()
        lst.append([minus[0],a])
        minus[0]-=a

    while len(minus)>1:
        a=minus.pop()
        lst.append([plus[0],a])
        plus[0]-=a

    print(plus[0]-minus[0])
    lst.append([plus[0],minus[0]])
    for a,b in lst:
        print(a,b) N==2 N 2 A.sort() A.sort A sort print(A[1]-A[0]) print A[1]-A[0] A[1] A 1 A[0] A 0 print(A[1],A[0]) print A[1] A 1 A[0] A 0 i for i in A if i>=0 for i in A if i>=0 i A i>=0 i 0 if i>=0 i plus= [i for i in A if i>=0] plus [i for i in A if i>=0] i for i in A if i<0 for i in A if i<0 i A i<0 i 0 if i<0 i minus=[i for i in A if i<0] minus [i for i in A if i<0] plus.sort(reverse=True) plus.sort plus sort reverse=True reverse True minus.sort() minus.sort minus sort lst=[] lst [] if not minus:
        a=plus.pop()
        b=plus.pop()
        minus.append(a-b)
        lst.append([a,b])
     not minus minus a=plus.pop() a plus.pop() plus.pop plus pop b=plus.pop() b plus.pop() plus.pop plus pop minus.append(a-b) minus.append minus append a-b a b lst.append([a,b]) lst.append lst append [a,b] a b if not plus:
        a=minus.pop()
        b=minus.pop()
        plus.append(a-b)
        lst.append([a,b])

     not plus plus a=minus.pop() a minus.pop() minus.pop minus pop b=minus.pop() b minus.pop() minus.pop minus pop plus.append(a-b) plus.append plus append a-b a b lst.append([a,b]) lst.append lst append [a,b] a b while len(plus)>1:
        a=plus.pop()
        lst.append([minus[0],a])
        minus[0]-=a

     len(plus)>1 len(plus) len plus 1 a=plus.pop() a plus.pop() plus.pop plus pop lst.append([minus[0],a]) lst.append lst append [minus[0],a] minus[0] minus 0 a minus[0]-=a minus[0] minus 0 a while len(minus)>1:
        a=minus.pop()
        lst.append([plus[0],a])
        plus[0]-=a

     len(minus)>1 len(minus) len minus 1 a=minus.pop() a minus.pop() minus.pop minus pop lst.append([plus[0],a]) lst.append lst append [plus[0],a] plus[0] plus 0 a plus[0]-=a plus[0] plus 0 a print(plus[0]-minus[0]) print plus[0]-minus[0] plus[0] plus 0 minus[0] minus 0 lst.append([plus[0],minus[0]]) lst.append lst append [plus[0],minus[0]] plus[0] plus 0 minus[0] minus 0 for a,b in lst:
        print(a,b) a b lst print(a,b) print a b plus= [i for i in A if i>=0] [i for i in A if i>=0] plus lst=[] [] lst input=lambda :sys.stdin.readline().rstrip() lambda :sys.stdin.readline().rstrip() input a=plus.pop() plus.pop() a b=minus.pop() minus.pop() b b=plus.pop() plus.pop() b a=plus.pop() plus.pop() a N=int(input()) int(input()) N minus=[i for i in A if i<0] [i for i in A if i<0] minus a=minus.pop() minus.pop() a a=minus.pop() minus.pop() a A=list(map(int,input().split())) list(map(int,input().split())) A
from collections import *
from heapq import *
from itertools import *
from fractions import gcd
import sys
from decimal import *
import copy
from bisect import *
input=lambda :sys.stdin.readline().rstrip()
N=int(input())
A=list(map(int,input().split()))
if N==2:
    A.sort()
    print(A[1]-A[0])
    print(A[1],A[0])
else:
    plus= [i for i in A if i>=0]
    minus=[i for i in A if i<0]

    plus.sort(reverse=True)
    minus.sort()
    lst=[]
    if not minus:
        a=plus.pop()
        b=plus.pop()
        minus.append(a-b)
        lst.append([a,b])
    if not plus:
        a=minus.pop()
        b=minus.pop()
        plus.append(a-b)
        lst.append([a,b])

    while len(plus)>1:
        a=plus.pop()
        lst.append([minus[0],a])
        minus[0]-=a

    while len(minus)>1:
        a=minus.pop()
        lst.append([plus[0],a])
        plus[0]-=a

    print(plus[0]-minus[0])
    lst.append([plus[0],minus[0]])
    for a,b in lst:
        print(a,b)
