# 符号が異なる数同士の引き算をすれば絶対値が大きくなる
# 基本は負から正を引いて大きな負の数を作る
# 最後だけ正から負を引いて大きな正の数を作る
# 正と正しか存在しない場合は最も小さい数からその他の数を引くことで負の数を作れる
# 負と負しか存在しない場合は最も大きい数からその他の数を引くことで正の数を作れる
# 正のリストと負のリスト両方を管理する
# 0は何も影響を与えないのでとりあえず正のリストに入れておく

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

if len(A) == 2:
  x = max(A)
  y = min(A)
  print(x-y)
  print(x,y)
  exit(0)

plusA = []
minusA = []
for a in A:
  if a >= 0:
    plusA += [a]
  else:
    minusA += [a]
    
method = [] # 計算過程をメモ
if len(plusA) == 0:
  minusA = sorted(minusA) # 最も小さな数を取り出すため
#  print("minusA",minusA)
  x = minusA.pop()
  y = minusA.pop()
#  print("x",x,"y",y)
  method.append([x,y])
  plusA.append(x-y)
#  print("plusA",plusA,"minusA",minusA,"method",method)
elif len(minusA) == 0:
  plusA = sorted(plusA)[::-1] # 最も小さな数を取り出すため
  x = plusA.pop()
  y = plusA.pop()
  method.append([x,y])
  minusA.append(x-y)
  
while True:
  if len(minusA) + len(plusA) == 1:
    print(x-y)
    for m in method:
      print(*m)
    break
  if len(plusA) == 1:
    # 正の数が一つのときは、この数から残りの負の数を引いていく
    x = plusA.pop()
    y = minusA.pop()
    method.append([x,y])
    plusA.append(x-y)
  else:
    # 正の数が複数あるときは、負の数を作り続ける
    x = minusA.pop()
    y = plusA.pop()
    method.append([x,y])
    minusA.append(x-y) 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 len(A) == 2:
  x = max(A)
  y = min(A)
  print(x-y)
  print(x,y)
  exit(0) len(A) == 2 len(A) len A 2 x = max(A) x max(A) max A y = min(A) y min(A) min A print(x-y) print x-y x y print(x,y) print x y exit(0) exit 0 plusA = [] plusA [] minusA = [] minusA [] for a in A:
  if a >= 0:
    plusA += [a]
  else:
    minusA += [a]
     a A if a >= 0:
    plusA += [a]
  else:
    minusA += [a]
     a >= 0 a 0 plusA += [a] plusA [a] a minusA += [a] minusA [a] a method = [] method [] if len(plusA) == 0:
  minusA = sorted(minusA) # 最も小さな数を取り出すため
#  print("minusA",minusA)
  x = minusA.pop()
  y = minusA.pop()
#  print("x",x,"y",y)
  method.append([x,y])
  plusA.append(x-y)
#  print("plusA",plusA,"minusA",minusA,"method",method)
elif len(minusA) == 0:
  plusA = sorted(plusA)[::-1] # 最も小さな数を取り出すため
  x = plusA.pop()
  y = plusA.pop()
  method.append([x,y])
  minusA.append(x-y)
   len(plusA) == 0 len(plusA) len plusA 0 minusA = sorted(minusA) minusA sorted(minusA) sorted minusA x = minusA.pop() x minusA.pop() minusA.pop minusA pop y = minusA.pop() y minusA.pop() minusA.pop minusA pop method.append([x,y]) method.append method append [x,y] x y plusA.append(x-y) plusA.append plusA append x-y x y elif len(minusA) == 0:
  plusA = sorted(plusA)[::-1] # 最も小さな数を取り出すため
  x = plusA.pop()
  y = plusA.pop()
  method.append([x,y])
  minusA.append(x-y)
   len(minusA) == 0 len(minusA) len minusA 0 plusA = sorted(plusA)[::-1] plusA sorted(plusA)[::-1] (plusA) sorted plusA ::-1 -1 x = plusA.pop() x plusA.pop() plusA.pop plusA pop y = plusA.pop() y plusA.pop() plusA.pop plusA pop method.append([x,y]) method.append method append [x,y] x y minusA.append(x-y) minusA.append minusA append x-y x y while True:
  if len(minusA) + len(plusA) == 1:
    print(x-y)
    for m in method:
      print(*m)
    break
  if len(plusA) == 1:
    # 正の数が一つのときは、この数から残りの負の数を引いていく
    x = plusA.pop()
    y = minusA.pop()
    method.append([x,y])
    plusA.append(x-y)
  else:
    # 正の数が複数あるときは、負の数を作り続ける
    x = minusA.pop()
    y = plusA.pop()
    method.append([x,y])
    minusA.append(x-y) True if len(minusA) + len(plusA) == 1:
    print(x-y)
    for m in method:
      print(*m)
    break
   len(minusA) + len(plusA) == 1 len(minusA) + len(plusA) len(minusA) len minusA len(plusA) len plusA 1 print(x-y) print x-y x y for m in method:
      print(*m)
     m method print(*m) print *m m break if len(plusA) == 1:
    # 正の数が一つのときは、この数から残りの負の数を引いていく
    x = plusA.pop()
    y = minusA.pop()
    method.append([x,y])
    plusA.append(x-y)
  else:
    # 正の数が複数あるときは、負の数を作り続ける
    x = minusA.pop()
    y = plusA.pop()
    method.append([x,y])
    minusA.append(x-y) len(plusA) == 1 len(plusA) len plusA 1 x = plusA.pop() x plusA.pop() plusA.pop plusA pop y = minusA.pop() y minusA.pop() minusA.pop minusA pop method.append([x,y]) method.append method append [x,y] x y plusA.append(x-y) plusA.append plusA append x-y x y x = minusA.pop() x minusA.pop() minusA.pop minusA pop y = plusA.pop() y plusA.pop() plusA.pop plusA pop method.append([x,y]) method.append method append [x,y] x y minusA.append(x-y) minusA.append minusA append x-y x y y = plusA.pop() plusA.pop() y plusA = sorted(plusA)[::-1] sorted(plusA)[::-1] plusA x = plusA.pop() plusA.pop() x x = minusA.pop() minusA.pop() x A = list(map(int,input().split())) list(map(int,input().split())) A plusA += [a] [a] plusA y = min(A) min(A) y minusA += [a] [a] minusA y = minusA.pop() minusA.pop() y plusA = [] [] plusA N = int(input()) int(input()) N x = max(A) max(A) x y = minusA.pop() minusA.pop() y x = plusA.pop() plusA.pop() x y = plusA.pop() plusA.pop() y method = [] [] method minusA = sorted(minusA) sorted(minusA) minusA x = minusA.pop() minusA.pop() x minusA = [] [] minusA
# 符号が異なる数同士の引き算をすれば絶対値が大きくなる
# 基本は負から正を引いて大きな負の数を作る
# 最後だけ正から負を引いて大きな正の数を作る
# 正と正しか存在しない場合は最も小さい数からその他の数を引くことで負の数を作れる
# 負と負しか存在しない場合は最も大きい数からその他の数を引くことで正の数を作れる
# 正のリストと負のリスト両方を管理する
# 0は何も影響を与えないのでとりあえず正のリストに入れておく

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

if len(A) == 2:
  x = max(A)
  y = min(A)
  print(x-y)
  print(x,y)
  exit(0)

plusA = []
minusA = []
for a in A:
  if a >= 0:
    plusA += [a]
  else:
    minusA += [a]
    
method = [] # 計算過程をメモ
if len(plusA) == 0:
  minusA = sorted(minusA) # 最も小さな数を取り出すため
#  print("minusA",minusA)
  x = minusA.pop()
  y = minusA.pop()
#  print("x",x,"y",y)
  method.append([x,y])
  plusA.append(x-y)
#  print("plusA",plusA,"minusA",minusA,"method",method)
elif len(minusA) == 0:
  plusA = sorted(plusA)[::-1] # 最も小さな数を取り出すため
  x = plusA.pop()
  y = plusA.pop()
  method.append([x,y])
  minusA.append(x-y)
  
while True:
  if len(minusA) + len(plusA) == 1:
    print(x-y)
    for m in method:
      print(*m)
    break
  if len(plusA) == 1:
    # 正の数が一つのときは、この数から残りの負の数を引いていく
    x = plusA.pop()
    y = minusA.pop()
    method.append([x,y])
    plusA.append(x-y)
  else:
    # 正の数が複数あるときは、負の数を作り続ける
    x = minusA.pop()
    y = plusA.pop()
    method.append([x,y])
    minusA.append(x-y)
