import bisect
n=int(input())
a=[int(i) for i in input().split()]
a.sort()
ans=[]
x=bisect.bisect_left(a, 0)
m=a[:x]
p=a[x:]

if n==2 and len(p)==2:
    print(p[1]-p[0])
    print(p[1],p[0])
    
    exit()
if m==[]:
    m+=[p[0]-p[-1]]
    ans+=[[p[0],p[-1]]]
    del p[0]
    del p[-1]

if p==[]:
    p+=[m[-1]-m[0]]
    ans+=[[m[-1],m[0]]]
    del m[-1]
    del m[0]

while len(p)!=1:

    m+=[m[0]-p[0]]
    ans+=[[m[0],p[0]]]
    del p[0]
    del m[0]
cnt=p[0]
for i in m:
    ans+=[[cnt,i]]
    cnt-=i
print(cnt)
for i,j in ans:print(i,j) import bisect bisect n=int(input()) n int(input()) int input() input int(i) for i in input().split() for i in input().split() i input().split() ().split () input split for i in input().split() int(i) int i a=[int(i) for i in input().split()] a [int(i) for i in input().split()] a.sort() a.sort a sort ans=[] ans [] x=bisect.bisect_left(a, 0) x bisect.bisect_left(a, 0) bisect.bisect_left bisect bisect_left a 0 m=a[:x] m a[:x] a :x x p=a[x:] p a[x:] a x: x if n==2 and len(p)==2:
    print(p[1]-p[0])
    print(p[1],p[0])
    
    exit() n==2 and len(p)==2 n==2 n 2 len(p)==2 len(p) len p 2 print(p[1]-p[0]) print p[1]-p[0] p[1] p 1 p[0] p 0 print(p[1],p[0]) print p[1] p 1 p[0] p 0 exit() exit if m==[]:
    m+=[p[0]-p[-1]]
    ans+=[[p[0],p[-1]]]
    del p[0]
    del p[-1] m==[] m [] m+=[p[0]-p[-1]] m [p[0]-p[-1]] p[0]-p[-1] p[0] p 0 p[-1] p -1 ans+=[[p[0],p[-1]]] ans [[p[0],p[-1]]] [p[0],p[-1]] p[0] p 0 p[-1] p -1 del p[0] p[0] p 0 del p[-1] p[-1] p -1 if p==[]:
    p+=[m[-1]-m[0]]
    ans+=[[m[-1],m[0]]]
    del m[-1]
    del m[0] p==[] p [] p+=[m[-1]-m[0]] p [m[-1]-m[0]] m[-1]-m[0] m[-1] m -1 m[0] m 0 ans+=[[m[-1],m[0]]] ans [[m[-1],m[0]]] [m[-1],m[0]] m[-1] m -1 m[0] m 0 del m[-1] m[-1] m -1 del m[0] m[0] m 0 while len(p)!=1:

    m+=[m[0]-p[0]]
    ans+=[[m[0],p[0]]]
    del p[0]
    del m[0] len(p)!=1 len(p) len p 1 m+=[m[0]-p[0]] m [m[0]-p[0]] m[0]-p[0] m[0] m 0 p[0] p 0 ans+=[[m[0],p[0]]] ans [[m[0],p[0]]] [m[0],p[0]] m[0] m 0 p[0] p 0 del p[0] p[0] p 0 del m[0] m[0] m 0 cnt=p[0] cnt p[0] p 0 for i in m:
    ans+=[[cnt,i]]
    cnt-=i i m ans+=[[cnt,i]] ans [[cnt,i]] [cnt,i] cnt i cnt-=i cnt i print(cnt) print cnt for i,j in ans:print(i,j) i j ans ans=[] [] ans n=int(input()) int(input()) n x=bisect.bisect_left(a, 0) bisect.bisect_left(a, 0) x ans+=[[m[-1],m[0]]] [[m[-1],m[0]]] ans ans+=[[m[0],p[0]]] [[m[0],p[0]]] ans m=a[:x] a[:x] m p=a[x:] a[x:] p m+=[p[0]-p[-1]] [p[0]-p[-1]] m ans+=[[cnt,i]] [[cnt,i]] ans m+=[m[0]-p[0]] [m[0]-p[0]] m p+=[m[-1]-m[0]] [m[-1]-m[0]] p a=[int(i) for i in input().split()] [int(i) for i in input().split()] a cnt=p[0] p[0] cnt cnt-=i i cnt ans+=[[p[0],p[-1]]] [[p[0],p[-1]]] ans
import bisect
n=int(input())
a=[int(i) for i in input().split()]
a.sort()
ans=[]
x=bisect.bisect_left(a, 0)
m=a[:x]
p=a[x:]

if n==2 and len(p)==2:
    print(p[1]-p[0])
    print(p[1],p[0])
    
    exit()
if m==[]:
    m+=[p[0]-p[-1]]
    ans+=[[p[0],p[-1]]]
    del p[0]
    del p[-1]

if p==[]:
    p+=[m[-1]-m[0]]
    ans+=[[m[-1],m[0]]]
    del m[-1]
    del m[0]

while len(p)!=1:

    m+=[m[0]-p[0]]
    ans+=[[m[0],p[0]]]
    del p[0]
    del m[0]
cnt=p[0]
for i in m:
    ans+=[[cnt,i]]
    cnt-=i
print(cnt)
for i,j in ans:print(i,j)
