n=int(input())

a=list(map(int,input().split()))

if n==2:
    print(max(a)-min(a))

    print(max(a),min(a))
    exit()

#+ -が最低一つ必要
#あとはどちらの符号にもできる？

a_p=[]
#a_zero=[]
a_m=[]

for aa in a:
    if aa>=0:
        a_p.append(aa)
    else:
        a_m.append(aa)

#どっちもある

ans=[]

if len(a_m)>0 and len(a_p)>0:
    if len(a_p)==1:
        tmp=a_p[0]
        for v in a_m:
            ans.append([tmp,v])
            tmp=tmp-v
    else:
        tmp=a_m[0]
        for v in a_p[1:]:
            ans.append([tmp,v])
            tmp=tmp-v
        ans.append([a_p[0],tmp])
        tmp=a_p[0]-tmp
        for v in a_m[1:]:
            ans.append([tmp,v])
            tmp=tmp-v

elif len(a_p)>0:
    a_p.sort()

    tmp=a_p[0]
    for v in a_p[2:]:
        ans.append([tmp,v])
        tmp=tmp-v
    ans.append([a_p[1],tmp])

else:
    a_m.sort(reverse=True)

    tmp=a_m[0]
    for v in a_m[1:]:
        ans.append([tmp,v])
        tmp=tmp-v


print(ans[-1][0]-ans[-1][1])
for item in ans:
    print(item[0],item[1])


 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:
    print(max(a)-min(a))

    print(max(a),min(a))
    exit()

#+ -が最低一つ必要
#あとはどちらの符号にもできる？ n==2 n 2 print(max(a)-min(a)) print max(a)-min(a) max(a) max a min(a) min a print(max(a),min(a)) print max(a) max a min(a) min a exit() exit a_p=[] a_p [] a_m=[] a_m [] for aa in a:
    if aa>=0:
        a_p.append(aa)
    else:
        a_m.append(aa)

#どっちもある aa a if aa>=0:
        a_p.append(aa)
    else:
        a_m.append(aa)

#どっちもある aa>=0 aa 0 a_p.append(aa) a_p.append a_p append aa a_m.append(aa) a_m.append a_m append aa ans=[] ans [] if len(a_m)>0 and len(a_p)>0:
    if len(a_p)==1:
        tmp=a_p[0]
        for v in a_m:
            ans.append([tmp,v])
            tmp=tmp-v
    else:
        tmp=a_m[0]
        for v in a_p[1:]:
            ans.append([tmp,v])
            tmp=tmp-v
        ans.append([a_p[0],tmp])
        tmp=a_p[0]-tmp
        for v in a_m[1:]:
            ans.append([tmp,v])
            tmp=tmp-v

elif len(a_p)>0:
    a_p.sort()

    tmp=a_p[0]
    for v in a_p[2:]:
        ans.append([tmp,v])
        tmp=tmp-v
    ans.append([a_p[1],tmp])

else:
    a_m.sort(reverse=True)

    tmp=a_m[0]
    for v in a_m[1:]:
        ans.append([tmp,v])
        tmp=tmp-v len(a_m)>0 and len(a_p)>0 len(a_m)>0 len(a_m) len a_m 0 len(a_p)>0 len(a_p) len a_p 0 if len(a_p)==1:
        tmp=a_p[0]
        for v in a_m:
            ans.append([tmp,v])
            tmp=tmp-v
    else:
        tmp=a_m[0]
        for v in a_p[1:]:
            ans.append([tmp,v])
            tmp=tmp-v
        ans.append([a_p[0],tmp])
        tmp=a_p[0]-tmp
        for v in a_m[1:]:
            ans.append([tmp,v])
            tmp=tmp-v len(a_p)==1 len(a_p) len a_p 1 tmp=a_p[0] tmp a_p[0] a_p 0 for v in a_m:
            ans.append([tmp,v])
            tmp=tmp-v
     v a_m ans.append([tmp,v]) ans.append ans append [tmp,v] tmp v tmp=tmp-v tmp tmp-v tmp v tmp=a_m[0] tmp a_m[0] a_m 0 for v in a_p[1:]:
            ans.append([tmp,v])
            tmp=tmp-v
         v a_p[1:] a_p 1: 1 ans.append([tmp,v]) ans.append ans append [tmp,v] tmp v tmp=tmp-v tmp tmp-v tmp v ans.append([a_p[0],tmp]) ans.append ans append [a_p[0],tmp] a_p[0] a_p 0 tmp tmp=a_p[0]-tmp tmp a_p[0]-tmp a_p[0] a_p 0 tmp for v in a_m[1:]:
            ans.append([tmp,v])
            tmp=tmp-v v a_m[1:] a_m 1: 1 ans.append([tmp,v]) ans.append ans append [tmp,v] tmp v tmp=tmp-v tmp tmp-v tmp v elif len(a_p)>0:
    a_p.sort()

    tmp=a_p[0]
    for v in a_p[2:]:
        ans.append([tmp,v])
        tmp=tmp-v
    ans.append([a_p[1],tmp]) len(a_p)>0 len(a_p) len a_p 0 a_p.sort() a_p.sort a_p sort tmp=a_p[0] tmp a_p[0] a_p 0 for v in a_p[2:]:
        ans.append([tmp,v])
        tmp=tmp-v
     v a_p[2:] a_p 2: 2 ans.append([tmp,v]) ans.append ans append [tmp,v] tmp v tmp=tmp-v tmp tmp-v tmp v ans.append([a_p[1],tmp]) ans.append ans append [a_p[1],tmp] a_p[1] a_p 1 tmp a_m.sort(reverse=True) a_m.sort a_m sort reverse=True reverse True tmp=a_m[0] tmp a_m[0] a_m 0 for v in a_m[1:]:
        ans.append([tmp,v])
        tmp=tmp-v v a_m[1:] a_m 1: 1 ans.append([tmp,v]) ans.append ans append [tmp,v] tmp v tmp=tmp-v tmp tmp-v tmp v print(ans[-1][0]-ans[-1][1]) print ans[-1][0]-ans[-1][1] ans[-1][0] [-1] ans -1 0 ans[-1][1] [-1] ans -1 1 for item in ans:
    print(item[0],item[1]) item ans print(item[0],item[1]) print item[0] item 0 item[1] item 1 tmp=a_p[0] a_p[0] tmp tmp=a_m[0] a_m[0] tmp tmp=a_p[0]-tmp a_p[0]-tmp tmp n=int(input()) int(input()) n tmp=tmp-v tmp-v tmp a=list(map(int,input().split())) list(map(int,input().split())) a a_m=[] [] a_m a_p=[] [] a_p tmp=tmp-v tmp-v tmp tmp=tmp-v tmp-v tmp tmp=tmp-v tmp-v tmp tmp=a_p[0] a_p[0] tmp tmp=tmp-v tmp-v tmp ans=[] [] ans tmp=a_m[0] a_m[0] tmp
n=int(input())

a=list(map(int,input().split()))

if n==2:
    print(max(a)-min(a))

    print(max(a),min(a))
    exit()

#+ -が最低一つ必要
#あとはどちらの符号にもできる？

a_p=[]
#a_zero=[]
a_m=[]

for aa in a:
    if aa>=0:
        a_p.append(aa)
    else:
        a_m.append(aa)

#どっちもある

ans=[]

if len(a_m)>0 and len(a_p)>0:
    if len(a_p)==1:
        tmp=a_p[0]
        for v in a_m:
            ans.append([tmp,v])
            tmp=tmp-v
    else:
        tmp=a_m[0]
        for v in a_p[1:]:
            ans.append([tmp,v])
            tmp=tmp-v
        ans.append([a_p[0],tmp])
        tmp=a_p[0]-tmp
        for v in a_m[1:]:
            ans.append([tmp,v])
            tmp=tmp-v

elif len(a_p)>0:
    a_p.sort()

    tmp=a_p[0]
    for v in a_p[2:]:
        ans.append([tmp,v])
        tmp=tmp-v
    ans.append([a_p[1],tmp])

else:
    a_m.sort(reverse=True)

    tmp=a_m[0]
    for v in a_m[1:]:
        ans.append([tmp,v])
        tmp=tmp-v


print(ans[-1][0]-ans[-1][1])
for item in ans:
    print(item[0],item[1])



