###template###
import sys
def input(): return sys.stdin.readline().rstrip()
def mi(): return map(int, input().split())
###template###

N = int(input())
As = list(mi())

TL = [[], [], []]
#[0] : zeroList
#[1] : minusList
#[2] : plusList

for a in As:
  if a == 0: TL[0].append(a)
  elif a < 0: TL[1].append(a)
  else: TL[2].append(a)

#print(TL)

ans = 0
printlist = []
#全てxxの場合（3パターン）
if len(TL[0])==N: #全てゼロの場合
  print(0)
  for i in range(N-1):
    print(0, 0)
  exit()
elif len(TL[1])==N: #全てminusの場合
  TL[1] = sorted(TL[1], reverse=True) #降順に並べる（-値の低いものから）
  printlist.append((TL[1][0],TL[1][1])) #痛みを最小に
  hand = TL[1][0]-TL[1][1] #これでプラスになった
  idx = 2
  while idx < N:
    printlist.append((hand, TL[1][idx]))
    hand -= TL[1][idx]
    idx += 1
  ans = hand
  #答えを出力する
  print(ans)
  for x, y in printlist:
    print(x, y)
  exit()
elif len(TL[2])==N: #全てplusの場合
  TL[2] = sorted(TL[2]) #昇順に並べる
  printlist.append((TL[2][0],TL[2][1])) #痛みを最小に
  hand = TL[2][0]-TL[2][1] #これで-になった
  idx = 2
  while idx < N-1:
    printlist.append((hand, TL[2][idx]))
    hand -= TL[2][idx]
    idx += 1
  #idx==N-1
  printlist.append((TL[2][idx], hand))
  hand = TL[2][idx]-hand
  ans = hand
  #答えを出力する
  print(ans)
  for x, y in printlist:
    print(x, y)
  exit()

# ここから先は、0,-,+のうちどれか2つはあるので、全て集合させられる
# ただし、0と-が1つずつ、0と+が1つずつというパターンは別途処理する必要がある
# 以下、そのパターンを処理
if len(TL[0])==1 and len(TL[1])==1:
  #0と-が1つずつ。0から-を引いて終わり
  left, right = TL[0].pop(), TL[1].pop()
  print(left-right)
  print(left, right)
  exit()
elif len(TL[0])==1 and len(TL[2])==1:
  #0と+が1つずつ。+から0を引いて終わり
  left, right = TL[2].pop(), TL[0].pop()
  print(left-right)
  print(left, right)
  exit()

# ここから先は、0,-,+のうちどれか2つはあり、前述のパターンも無いので、全て集合させられるし、最後に-と+が1つずつという最終処理パターンに持っていける
# よって一律のループ処理でOK
# 0が0個、+が1つ、-が1つになったら処理を抜け、最終手順に向かう
# 最初からそうなら、while文は実行されないのでＯＫ
# また、全てを集合させられる＝取り出す順番はどうでもいいので、高速化のため全てpop()で取り出していく
while not (len(TL[0])==0 and len(TL[1])==1 and len(TL[2])==1):
  left = 0
  right = 0
  if len(TL[0])>=1:
    #0があれば、まず0を消化する
    if len(TL[1])==0: #-がなければ、0を使って-を作る
      left, right = TL[0].pop(), TL[2].pop()
      printlist.append((left, right))
      TL[1].append(left-right)
    elif len(TL[2])==0: #+がなければ、0を使って+を作る
      left, right = TL[0].pop(), TL[1].pop()
      printlist.append((left, right))
      TL[2].append(left-right)
    else: #-も+もあるなら消化するだけなので、どっちでもいいが、-で消化する
      left, right = TL[1].pop(), TL[0].pop()
      printlist.append((left, right))
      TL[1].append(left-right)
    continue
  #ここからは、0がなくなったパターン
  #0がなくなったということは、+と-は必ず両方あることになる
  #またwhile文の条件から、「どちらも1つしかない」ということはありえない
  if len(TL[1])>=len(TL[2]): #-のが多い、もしくは同じ（もちろん2:2以上）
    left, right = TL[2].pop(), TL[1].pop()
    printlist.append((left, right))
    TL[2].append(left-right)
  else: #+のが多いパターン
    left, right = TL[1].pop(), TL[2].pop()
    printlist.append((left, right))
    TL[1].append(left-right)

# 最後に、プラス-マイナスでプラス数字を作って終わり
left, right = TL[2].pop(), TL[1].pop()
printlist.append((left, right))
ans = left-right


#答えを出力する
print(ans)
for x, y in printlist:
  print(x, y)
 import sys sys def input(): return sys.stdin.readline().rstrip() input def mi(): return map(int, input().split())
###template### mi N = int(input()) N int(input()) int input() input As = list(mi()) As list(mi()) list mi() mi TL = [[], [], []] TL [[], [], []] [] [] [] for a in As:
  if a == 0: TL[0].append(a)
  elif a < 0: TL[1].append(a)
  else: TL[2].append(a)

#print(TL) a As if a == 0: TL[0].append(a)
  elif a < 0: TL[1].append(a)
  else: TL[2].append(a)

#print(TL) a == 0 a 0 elif a < 0: TL[1].append(a)
   a < 0 a 0 ans = 0 ans 0 printlist = [] printlist [] if len(TL[0])==N: #全てゼロの場合
  print(0)
  for i in range(N-1):
    print(0, 0)
  exit()
elif len(TL[1])==N: #全てminusの場合
  TL[1] = sorted(TL[1], reverse=True) #降順に並べる（-値の低いものから）
  printlist.append((TL[1][0],TL[1][1])) #痛みを最小に
  hand = TL[1][0]-TL[1][1] #これでプラスになった
  idx = 2
  while idx < N:
    printlist.append((hand, TL[1][idx]))
    hand -= TL[1][idx]
    idx += 1
  ans = hand
  #答えを出力する
  print(ans)
  for x, y in printlist:
    print(x, y)
  exit()
elif len(TL[2])==N: #全てplusの場合
  TL[2] = sorted(TL[2]) #昇順に並べる
  printlist.append((TL[2][0],TL[2][1])) #痛みを最小に
  hand = TL[2][0]-TL[2][1] #これで-になった
  idx = 2
  while idx < N-1:
    printlist.append((hand, TL[2][idx]))
    hand -= TL[2][idx]
    idx += 1
  #idx==N-1
  printlist.append((TL[2][idx], hand))
  hand = TL[2][idx]-hand
  ans = hand
  #答えを出力する
  print(ans)
  for x, y in printlist:
    print(x, y)
  exit()

# ここから先は、0,-,+のうちどれか2つはあるので、全て集合させられる
# ただし、0と-が1つずつ、0と+が1つずつというパターンは別途処理する必要がある
# 以下、そのパターンを処理 len(TL[0])==N len(TL[0]) len TL[0] TL 0 N print(0) print 0 for i in range(N-1):
    print(0, 0)
   i range(N-1) range N-1 N 1 print(0, 0) print 0 0 exit() exit elif len(TL[1])==N: #全てminusの場合
  TL[1] = sorted(TL[1], reverse=True) #降順に並べる（-値の低いものから）
  printlist.append((TL[1][0],TL[1][1])) #痛みを最小に
  hand = TL[1][0]-TL[1][1] #これでプラスになった
  idx = 2
  while idx < N:
    printlist.append((hand, TL[1][idx]))
    hand -= TL[1][idx]
    idx += 1
  ans = hand
  #答えを出力する
  print(ans)
  for x, y in printlist:
    print(x, y)
  exit() len(TL[1])==N len(TL[1]) len TL[1] TL 1 N TL[1] = sorted(TL[1], reverse=True) TL[1] TL 1 sorted(TL[1], reverse=True) sorted TL[1] TL 1 reverse=True reverse True printlist.append((TL[1][0],TL[1][1])) printlist.append printlist append (TL[1][0],TL[1][1]) TL[1][0] [1] TL 1 0 TL[1][1] [1] TL 1 1 hand = TL[1][0]-TL[1][1] hand TL[1][0]-TL[1][1] TL[1][0] [1] TL 1 0 TL[1][1] [1] TL 1 1 idx = 2 idx 2 while idx < N:
    printlist.append((hand, TL[1][idx]))
    hand -= TL[1][idx]
    idx += 1
   idx < N idx N printlist.append((hand, TL[1][idx])) printlist.append printlist append (hand, TL[1][idx]) hand TL[1][idx] [1] TL 1 idx hand -= TL[1][idx] hand TL[1][idx] [1] TL 1 idx idx += 1 idx 1 ans = hand ans hand print(ans) print ans for x, y in printlist:
    print(x, y)
   x y printlist print(x, y) print x y exit() exit elif len(TL[2])==N: #全てplusの場合
  TL[2] = sorted(TL[2]) #昇順に並べる
  printlist.append((TL[2][0],TL[2][1])) #痛みを最小に
  hand = TL[2][0]-TL[2][1] #これで-になった
  idx = 2
  while idx < N-1:
    printlist.append((hand, TL[2][idx]))
    hand -= TL[2][idx]
    idx += 1
  #idx==N-1
  printlist.append((TL[2][idx], hand))
  hand = TL[2][idx]-hand
  ans = hand
  #答えを出力する
  print(ans)
  for x, y in printlist:
    print(x, y)
  exit()

# ここから先は、0,-,+のうちどれか2つはあるので、全て集合させられる
# ただし、0と-が1つずつ、0と+が1つずつというパターンは別途処理する必要がある
# 以下、そのパターンを処理 len(TL[2])==N len(TL[2]) len TL[2] TL 2 N TL[2] = sorted(TL[2]) TL[2] TL 2 sorted(TL[2]) sorted TL[2] TL 2 printlist.append((TL[2][0],TL[2][1])) printlist.append printlist append (TL[2][0],TL[2][1]) TL[2][0] [2] TL 2 0 TL[2][1] [2] TL 2 1 hand = TL[2][0]-TL[2][1] hand TL[2][0]-TL[2][1] TL[2][0] [2] TL 2 0 TL[2][1] [2] TL 2 1 idx = 2 idx 2 while idx < N-1:
    printlist.append((hand, TL[2][idx]))
    hand -= TL[2][idx]
    idx += 1
  #idx==N-1
   idx < N-1 idx N-1 N 1 printlist.append((hand, TL[2][idx])) printlist.append printlist append (hand, TL[2][idx]) hand TL[2][idx] [2] TL 2 idx hand -= TL[2][idx] hand TL[2][idx] [2] TL 2 idx idx += 1 idx 1 printlist.append((TL[2][idx], hand)) printlist.append printlist append (TL[2][idx], hand) TL[2][idx] [2] TL 2 idx hand hand = TL[2][idx]-hand hand TL[2][idx]-hand TL[2][idx] [2] TL 2 idx hand ans = hand ans hand print(ans) print ans for x, y in printlist:
    print(x, y)
   x y printlist print(x, y) print x y exit() exit if len(TL[0])==1 and len(TL[1])==1:
  #0と-が1つずつ。0から-を引いて終わり
  left, right = TL[0].pop(), TL[1].pop()
  print(left-right)
  print(left, right)
  exit()
elif len(TL[0])==1 and len(TL[2])==1:
  #0と+が1つずつ。+から0を引いて終わり
  left, right = TL[2].pop(), TL[0].pop()
  print(left-right)
  print(left, right)
  exit()

# ここから先は、0,-,+のうちどれか2つはあり、前述のパターンも無いので、全て集合させられるし、最後に-と+が1つずつという最終処理パターンに持っていける
# よって一律のループ処理でOK
# 0が0個、+が1つ、-が1つになったら処理を抜け、最終手順に向かう
# 最初からそうなら、while文は実行されないのでＯＫ
# また、全てを集合させられる＝取り出す順番はどうでもいいので、高速化のため全てpop()で取り出していく len(TL[0])==1 and len(TL[1])==1 len(TL[0])==1 len(TL[0]) len TL[0] TL 0 1 len(TL[1])==1 len(TL[1]) len TL[1] TL 1 1 left, right = TL[0].pop(), TL[1].pop() left TL[0].pop() [0].pop [0] TL 0 pop right TL[1].pop() [1].pop [1] TL 1 pop print(left-right) print left-right left right print(left, right) print left right exit() exit elif len(TL[0])==1 and len(TL[2])==1:
  #0と+が1つずつ。+から0を引いて終わり
  left, right = TL[2].pop(), TL[0].pop()
  print(left-right)
  print(left, right)
  exit()

# ここから先は、0,-,+のうちどれか2つはあり、前述のパターンも無いので、全て集合させられるし、最後に-と+が1つずつという最終処理パターンに持っていける
# よって一律のループ処理でOK
# 0が0個、+が1つ、-が1つになったら処理を抜け、最終手順に向かう
# 最初からそうなら、while文は実行されないのでＯＫ
# また、全てを集合させられる＝取り出す順番はどうでもいいので、高速化のため全てpop()で取り出していく len(TL[0])==1 and len(TL[2])==1 len(TL[0])==1 len(TL[0]) len TL[0] TL 0 1 len(TL[2])==1 len(TL[2]) len TL[2] TL 2 1 left, right = TL[2].pop(), TL[0].pop() left TL[2].pop() [2].pop [2] TL 2 pop right TL[0].pop() [0].pop [0] TL 0 pop print(left-right) print left-right left right print(left, right) print left right exit() exit while not (len(TL[0])==0 and len(TL[1])==1 and len(TL[2])==1):
  left = 0
  right = 0
  if len(TL[0])>=1:
    #0があれば、まず0を消化する
    if len(TL[1])==0: #-がなければ、0を使って-を作る
      left, right = TL[0].pop(), TL[2].pop()
      printlist.append((left, right))
      TL[1].append(left-right)
    elif len(TL[2])==0: #+がなければ、0を使って+を作る
      left, right = TL[0].pop(), TL[1].pop()
      printlist.append((left, right))
      TL[2].append(left-right)
    else: #-も+もあるなら消化するだけなので、どっちでもいいが、-で消化する
      left, right = TL[1].pop(), TL[0].pop()
      printlist.append((left, right))
      TL[1].append(left-right)
    continue
  #ここからは、0がなくなったパターン
  #0がなくなったということは、+と-は必ず両方あることになる
  #またwhile文の条件から、「どちらも1つしかない」ということはありえない
  if len(TL[1])>=len(TL[2]): #-のが多い、もしくは同じ（もちろん2:2以上）
    left, right = TL[2].pop(), TL[1].pop()
    printlist.append((left, right))
    TL[2].append(left-right)
  else: #+のが多いパターン
    left, right = TL[1].pop(), TL[2].pop()
    printlist.append((left, right))
    TL[1].append(left-right)

# 最後に、プラス-マイナスでプラス数字を作って終わり not (len(TL[0])==0 and len(TL[1])==1 and len(TL[2])==1) len(TL[0])==0 and len(TL[1])==1 and len(TL[2])==1 len(TL[0])==0 and len(TL[1])==1 len(TL[0])==0 len(TL[0]) len TL[0] TL 0 0 len(TL[1])==1 len(TL[1]) len TL[1] TL 1 1 len(TL[2])==1 len(TL[2]) len TL[2] TL 2 1 left = 0 left 0 right = 0 right 0 if len(TL[0])>=1:
    #0があれば、まず0を消化する
    if len(TL[1])==0: #-がなければ、0を使って-を作る
      left, right = TL[0].pop(), TL[2].pop()
      printlist.append((left, right))
      TL[1].append(left-right)
    elif len(TL[2])==0: #+がなければ、0を使って+を作る
      left, right = TL[0].pop(), TL[1].pop()
      printlist.append((left, right))
      TL[2].append(left-right)
    else: #-も+もあるなら消化するだけなので、どっちでもいいが、-で消化する
      left, right = TL[1].pop(), TL[0].pop()
      printlist.append((left, right))
      TL[1].append(left-right)
    continue
  #ここからは、0がなくなったパターン
  #0がなくなったということは、+と-は必ず両方あることになる
  #またwhile文の条件から、「どちらも1つしかない」ということはありえない
   len(TL[0])>=1 len(TL[0]) len TL[0] TL 0 1 if len(TL[1])==0: #-がなければ、0を使って-を作る
      left, right = TL[0].pop(), TL[2].pop()
      printlist.append((left, right))
      TL[1].append(left-right)
    elif len(TL[2])==0: #+がなければ、0を使って+を作る
      left, right = TL[0].pop(), TL[1].pop()
      printlist.append((left, right))
      TL[2].append(left-right)
    else: #-も+もあるなら消化するだけなので、どっちでもいいが、-で消化する
      left, right = TL[1].pop(), TL[0].pop()
      printlist.append((left, right))
      TL[1].append(left-right)
     len(TL[1])==0 len(TL[1]) len TL[1] TL 1 0 left, right = TL[0].pop(), TL[2].pop() left TL[0].pop() [0].pop [0] TL 0 pop right TL[2].pop() [2].pop [2] TL 2 pop printlist.append((left, right)) printlist.append printlist append (left, right) left right TL[1].append(left-right) [1].append [1] TL 1 append left-right left right elif len(TL[2])==0: #+がなければ、0を使って+を作る
      left, right = TL[0].pop(), TL[1].pop()
      printlist.append((left, right))
      TL[2].append(left-right)
     len(TL[2])==0 len(TL[2]) len TL[2] TL 2 0 left, right = TL[0].pop(), TL[1].pop() left TL[0].pop() [0].pop [0] TL 0 pop right TL[1].pop() [1].pop [1] TL 1 pop printlist.append((left, right)) printlist.append printlist append (left, right) left right TL[2].append(left-right) [2].append [2] TL 2 append left-right left right left, right = TL[1].pop(), TL[0].pop() left TL[1].pop() [1].pop [1] TL 1 pop right TL[0].pop() [0].pop [0] TL 0 pop printlist.append((left, right)) printlist.append printlist append (left, right) left right TL[1].append(left-right) [1].append [1] TL 1 append left-right left right continue if len(TL[1])>=len(TL[2]): #-のが多い、もしくは同じ（もちろん2:2以上）
    left, right = TL[2].pop(), TL[1].pop()
    printlist.append((left, right))
    TL[2].append(left-right)
  else: #+のが多いパターン
    left, right = TL[1].pop(), TL[2].pop()
    printlist.append((left, right))
    TL[1].append(left-right)

# 最後に、プラス-マイナスでプラス数字を作って終わり len(TL[1])>=len(TL[2]) len(TL[1]) len TL[1] TL 1 len(TL[2]) len TL[2] TL 2 left, right = TL[2].pop(), TL[1].pop() left TL[2].pop() [2].pop [2] TL 2 pop right TL[1].pop() [1].pop [1] TL 1 pop printlist.append((left, right)) printlist.append printlist append (left, right) left right TL[2].append(left-right) [2].append [2] TL 2 append left-right left right left, right = TL[1].pop(), TL[2].pop() left TL[1].pop() [1].pop [1] TL 1 pop right TL[2].pop() [2].pop [2] TL 2 pop printlist.append((left, right)) printlist.append printlist append (left, right) left right TL[1].append(left-right) [1].append [1] TL 1 append left-right left right left, right = TL[2].pop(), TL[1].pop() left TL[2].pop() [2].pop [2] TL 2 pop right TL[1].pop() [1].pop [1] TL 1 pop printlist.append((left, right)) printlist.append printlist append (left, right) left right ans = left-right ans left-right left right print(ans) print ans for x, y in printlist:
  print(x, y) x y printlist print(x, y) print x y right = TL[0].pop(), TL[1].pop() TL[1].pop() right def mi(): return map(int, input().split())
###template### def mi(): return map(int, input().split())
###template### mi hand = TL[2][0]-TL[2][1] TL[2][0]-TL[2][1] hand right = TL[2].pop(), TL[1].pop() TL[1].pop() right hand -= TL[1][idx] TL[1][idx] hand right = TL[0].pop(), TL[2].pop() TL[2].pop() right left, right = TL[0].pop(), TL[2].pop() TL[0].pop() left ans = hand hand ans ans = hand hand ans left, right = TL[1].pop(), TL[0].pop() TL[1].pop() left idx = 2 2 idx ans = left-right left-right ans printlist = [] [] printlist right = TL[2].pop(), TL[1].pop() TL[1].pop() right right = TL[1].pop(), TL[0].pop() TL[0].pop() right right = 0 0 right idx += 1 1 idx right = TL[2].pop(), TL[0].pop() TL[0].pop() right left = 0 0 left left, right = TL[1].pop(), TL[2].pop() TL[1].pop() left right = TL[1].pop(), TL[2].pop() TL[2].pop() right def input(): return sys.stdin.readline().rstrip() def input(): return sys.stdin.readline().rstrip() input hand = TL[2][idx]-hand TL[2][idx]-hand hand right = TL[0].pop(), TL[1].pop() TL[1].pop() right left, right = TL[0].pop(), TL[1].pop() TL[0].pop() left ans = 0 0 ans idx = 2 2 idx left, right = TL[2].pop(), TL[0].pop() TL[2].pop() left left, right = TL[2].pop(), TL[1].pop() TL[2].pop() left hand -= TL[2][idx] TL[2][idx] hand As = list(mi()) list(mi()) As hand = TL[1][0]-TL[1][1] TL[1][0]-TL[1][1] hand idx += 1 1 idx N = int(input()) int(input()) N left, right = TL[2].pop(), TL[1].pop() TL[2].pop() left left, right = TL[0].pop(), TL[1].pop() TL[0].pop() left TL = [[], [], []] [[], [], []] TL
###template###
import sys
def input(): return sys.stdin.readline().rstrip()
def mi(): return map(int, input().split())
###template###

N = int(input())
As = list(mi())

TL = [[], [], []]
#[0] : zeroList
#[1] : minusList
#[2] : plusList

for a in As:
  if a == 0: TL[0].append(a)
  elif a < 0: TL[1].append(a)
  else: TL[2].append(a)

#print(TL)

ans = 0
printlist = []
#全てxxの場合（3パターン）
if len(TL[0])==N: #全てゼロの場合
  print(0)
  for i in range(N-1):
    print(0, 0)
  exit()
elif len(TL[1])==N: #全てminusの場合
  TL[1] = sorted(TL[1], reverse=True) #降順に並べる（-値の低いものから）
  printlist.append((TL[1][0],TL[1][1])) #痛みを最小に
  hand = TL[1][0]-TL[1][1] #これでプラスになった
  idx = 2
  while idx < N:
    printlist.append((hand, TL[1][idx]))
    hand -= TL[1][idx]
    idx += 1
  ans = hand
  #答えを出力する
  print(ans)
  for x, y in printlist:
    print(x, y)
  exit()
elif len(TL[2])==N: #全てplusの場合
  TL[2] = sorted(TL[2]) #昇順に並べる
  printlist.append((TL[2][0],TL[2][1])) #痛みを最小に
  hand = TL[2][0]-TL[2][1] #これで-になった
  idx = 2
  while idx < N-1:
    printlist.append((hand, TL[2][idx]))
    hand -= TL[2][idx]
    idx += 1
  #idx==N-1
  printlist.append((TL[2][idx], hand))
  hand = TL[2][idx]-hand
  ans = hand
  #答えを出力する
  print(ans)
  for x, y in printlist:
    print(x, y)
  exit()

# ここから先は、0,-,+のうちどれか2つはあるので、全て集合させられる
# ただし、0と-が1つずつ、0と+が1つずつというパターンは別途処理する必要がある
# 以下、そのパターンを処理
if len(TL[0])==1 and len(TL[1])==1:
  #0と-が1つずつ。0から-を引いて終わり
  left, right = TL[0].pop(), TL[1].pop()
  print(left-right)
  print(left, right)
  exit()
elif len(TL[0])==1 and len(TL[2])==1:
  #0と+が1つずつ。+から0を引いて終わり
  left, right = TL[2].pop(), TL[0].pop()
  print(left-right)
  print(left, right)
  exit()

# ここから先は、0,-,+のうちどれか2つはあり、前述のパターンも無いので、全て集合させられるし、最後に-と+が1つずつという最終処理パターンに持っていける
# よって一律のループ処理でOK
# 0が0個、+が1つ、-が1つになったら処理を抜け、最終手順に向かう
# 最初からそうなら、while文は実行されないのでＯＫ
# また、全てを集合させられる＝取り出す順番はどうでもいいので、高速化のため全てpop()で取り出していく
while not (len(TL[0])==0 and len(TL[1])==1 and len(TL[2])==1):
  left = 0
  right = 0
  if len(TL[0])>=1:
    #0があれば、まず0を消化する
    if len(TL[1])==0: #-がなければ、0を使って-を作る
      left, right = TL[0].pop(), TL[2].pop()
      printlist.append((left, right))
      TL[1].append(left-right)
    elif len(TL[2])==0: #+がなければ、0を使って+を作る
      left, right = TL[0].pop(), TL[1].pop()
      printlist.append((left, right))
      TL[2].append(left-right)
    else: #-も+もあるなら消化するだけなので、どっちでもいいが、-で消化する
      left, right = TL[1].pop(), TL[0].pop()
      printlist.append((left, right))
      TL[1].append(left-right)
    continue
  #ここからは、0がなくなったパターン
  #0がなくなったということは、+と-は必ず両方あることになる
  #またwhile文の条件から、「どちらも1つしかない」ということはありえない
  if len(TL[1])>=len(TL[2]): #-のが多い、もしくは同じ（もちろん2:2以上）
    left, right = TL[2].pop(), TL[1].pop()
    printlist.append((left, right))
    TL[2].append(left-right)
  else: #+のが多いパターン
    left, right = TL[1].pop(), TL[2].pop()
    printlist.append((left, right))
    TL[1].append(left-right)

# 最後に、プラス-マイナスでプラス数字を作って終わり
left, right = TL[2].pop(), TL[1].pop()
printlist.append((left, right))
ans = left-right


#答えを出力する
print(ans)
for x, y in printlist:
  print(x, y)

