from collections import deque

N = int(input())
A = sorted(list(map(int,input().split())))

ans_list = []
p = deque()
n = deque()

# 最大にプラス、最小にマイナスを割り当てる
p.append(A[-1])
n.append(A[0])

# 正ならプラスを負ならマイナスを割り当てる
for a in A[1:-1]:
    if a >= 0:
        p.append(a)
    elif a < 0:
        n.append(a)

# プラスが１つになるまで消す
while len(p) != 1:
    x = n.pop()
    y = p.pop()
    n.append(x-y)
    ans_list.append((x, y))

# マイナスがなくなるまで消す
while len(n) != 0:
    x = p.pop()
    y = n.pop()
    p.append(x-y)
    ans_list.append((x,y))

# 残ったものが最大値
M = p[0]
print(M)
for x, y in ans_list:
    print(x, y) from collections import deque N = int(input()) N int(input()) int input() input A = sorted(list(map(int,input().split()))) A sorted(list(map(int,input().split()))) sorted list(map(int,input().split())) list map(int,input().split()) map int input().split() ().split () input split ans_list = [] ans_list [] p = deque() p deque() deque n = deque() n deque() deque p.append(A[-1]) p.append p append A[-1] A -1 n.append(A[0]) n.append n append A[0] A 0 for a in A[1:-1]:
    if a >= 0:
        p.append(a)
    elif a < 0:
        n.append(a)

# プラスが１つになるまで消す a A[1:-1] A 1:-1 1 -1 if a >= 0:
        p.append(a)
    elif a < 0:
        n.append(a)

# プラスが１つになるまで消す a >= 0 a 0 p.append(a) p.append p append a elif a < 0:
        n.append(a)

# プラスが１つになるまで消す a < 0 a 0 n.append(a) n.append n append a while len(p) != 1:
    x = n.pop()
    y = p.pop()
    n.append(x-y)
    ans_list.append((x, y))

# マイナスがなくなるまで消す len(p) != 1 len(p) len p 1 x = n.pop() x n.pop() n.pop n pop y = p.pop() y p.pop() p.pop p pop n.append(x-y) n.append n append x-y x y ans_list.append((x, y)) ans_list.append ans_list append (x, y) x y while len(n) != 0:
    x = p.pop()
    y = n.pop()
    p.append(x-y)
    ans_list.append((x,y))

# 残ったものが最大値 len(n) != 0 len(n) len n 0 x = p.pop() x p.pop() p.pop p pop y = n.pop() y n.pop() n.pop n pop p.append(x-y) p.append p append x-y x y ans_list.append((x,y)) ans_list.append ans_list append (x,y) x y M = p[0] M p[0] p 0 print(M) print M for x, y in ans_list:
    print(x, y) x y ans_list print(x, y) print x y n = deque() deque() n ans_list = [] [] ans_list y = p.pop() p.pop() y M = p[0] p[0] M x = n.pop() n.pop() x A = sorted(list(map(int,input().split()))) sorted(list(map(int,input().split()))) A x = p.pop() p.pop() x p = deque() deque() p y = n.pop() n.pop() y N = int(input()) int(input()) N
from collections import deque

N = int(input())
A = sorted(list(map(int,input().split())))

ans_list = []
p = deque()
n = deque()

# 最大にプラス、最小にマイナスを割り当てる
p.append(A[-1])
n.append(A[0])

# 正ならプラスを負ならマイナスを割り当てる
for a in A[1:-1]:
    if a >= 0:
        p.append(a)
    elif a < 0:
        n.append(a)

# プラスが１つになるまで消す
while len(p) != 1:
    x = n.pop()
    y = p.pop()
    n.append(x-y)
    ans_list.append((x, y))

# マイナスがなくなるまで消す
while len(n) != 0:
    x = p.pop()
    y = n.pop()
    p.append(x-y)
    ans_list.append((x,y))

# 残ったものが最大値
M = p[0]
print(M)
for x, y in ans_list:
    print(x, y)