import heapq
from collections import defaultdict
N = int(input())
nums  = list(map(int, input().split(" ")))
# 正の数、負の数の個数で操作をコントロール？
p_count = 0
m_count = 0
pos = []
minus = []
for num in nums:
    if num < 0:
        m_count += 1
        minus.append(num)
    else:
        p_count += 1
        pos.append(num)
pos.sort()
minus.sort() #小さい順番
途中式 = []
if N == 2:
    x = max(nums) 
    y = min(nums)
    print(max(nums) - min(nums))
    print(x, y)
else:
    #正の数を一つにして、そこから引きまくる
    if m_count == 0: #マイナスが無かったら作る
        x = min(pos)
        y = max(pos)
        途中式.append((x, y))
        minus.append(x - y)
        pos.remove(x)
        pos.remove(y)
        p_count -=2
        m_count += 1

    if p_count > 1: # 正が複数あったら、マイナスから引くことで減らしていく
        for i in range(p_count - 1):
            #マイナスから正が1個になるまで引いていく
            x = minus.pop()
            y = pos.pop()
            途中式.append((x,y))
            minus.append(x- y)
    elif p_count == 0 : #正が一つも無かったら、作る
        x = minus.pop()
        y = minus.pop()
        途中式.append((x, y))
        pos.append(x - y)

    x = pos.pop()
    for i in minus:
        y = i
        途中式.append((x, y))
        x -=y
    print(x)
    for temp in 途中式:
        x,y = temp
        print(x,y) import heapq heapq from collections import defaultdict N = int(input()) N int(input()) int input() input nums  = list(map(int, input().split(" "))) nums list(map(int, input().split(" "))) list map(int, input().split(" ")) map int input().split(" ") ().split () input split " " p_count = 0 p_count 0 m_count = 0 m_count 0 pos = [] pos [] minus = [] minus [] for num in nums:
    if num < 0:
        m_count += 1
        minus.append(num)
    else:
        p_count += 1
        pos.append(num) num nums if num < 0:
        m_count += 1
        minus.append(num)
    else:
        p_count += 1
        pos.append(num) num < 0 num 0 m_count += 1 m_count 1 minus.append(num) minus.append minus append num p_count += 1 p_count 1 pos.append(num) pos.append pos append num pos.sort() pos.sort pos sort minus.sort() minus.sort minus sort 途中式 = [] 途中式 [] if N == 2:
    x = max(nums) 
    y = min(nums)
    print(max(nums) - min(nums))
    print(x, y)
else:
    #正の数を一つにして、そこから引きまくる
    if m_count == 0: #マイナスが無かったら作る
        x = min(pos)
        y = max(pos)
        途中式.append((x, y))
        minus.append(x - y)
        pos.remove(x)
        pos.remove(y)
        p_count -=2
        m_count += 1

    if p_count > 1: # 正が複数あったら、マイナスから引くことで減らしていく
        for i in range(p_count - 1):
            #マイナスから正が1個になるまで引いていく
            x = minus.pop()
            y = pos.pop()
            途中式.append((x,y))
            minus.append(x- y)
    elif p_count == 0 : #正が一つも無かったら、作る
        x = minus.pop()
        y = minus.pop()
        途中式.append((x, y))
        pos.append(x - y)

    x = pos.pop()
    for i in minus:
        y = i
        途中式.append((x, y))
        x -=y
    print(x)
    for temp in 途中式:
        x,y = temp
        print(x,y) N == 2 N 2 x = max(nums) x max(nums) max nums y = min(nums) y min(nums) min nums print(max(nums) - min(nums)) print max(nums) - min(nums) max(nums) max nums min(nums) min nums print(x, y) print x y if m_count == 0: #マイナスが無かったら作る
        x = min(pos)
        y = max(pos)
        途中式.append((x, y))
        minus.append(x - y)
        pos.remove(x)
        pos.remove(y)
        p_count -=2
        m_count += 1

     m_count == 0 m_count 0 x = min(pos) x min(pos) min pos y = max(pos) y max(pos) max pos 途中式.append((x, y)) 途中式.append 途中式 append (x, y) x y minus.append(x - y) minus.append minus append x - y x y pos.remove(x) pos.remove pos remove x pos.remove(y) pos.remove pos remove y p_count -=2 p_count 2 m_count += 1 m_count 1 if p_count > 1: # 正が複数あったら、マイナスから引くことで減らしていく
        for i in range(p_count - 1):
            #マイナスから正が1個になるまで引いていく
            x = minus.pop()
            y = pos.pop()
            途中式.append((x,y))
            minus.append(x- y)
    elif p_count == 0 : #正が一つも無かったら、作る
        x = minus.pop()
        y = minus.pop()
        途中式.append((x, y))
        pos.append(x - y)

     p_count > 1 p_count 1 for i in range(p_count - 1):
            #マイナスから正が1個になるまで引いていく
            x = minus.pop()
            y = pos.pop()
            途中式.append((x,y))
            minus.append(x- y)
     i range(p_count - 1) range p_count - 1 p_count 1 x = minus.pop() x minus.pop() minus.pop minus pop y = pos.pop() y pos.pop() pos.pop pos pop 途中式.append((x,y)) 途中式.append 途中式 append (x,y) x y minus.append(x- y) minus.append minus append x- y x y elif p_count == 0 : #正が一つも無かったら、作る
        x = minus.pop()
        y = minus.pop()
        途中式.append((x, y))
        pos.append(x - y)

     p_count == 0 p_count 0 x = minus.pop() x minus.pop() minus.pop minus pop y = minus.pop() y minus.pop() minus.pop minus pop 途中式.append((x, y)) 途中式.append 途中式 append (x, y) x y pos.append(x - y) pos.append pos append x - y x y x = pos.pop() x pos.pop() pos.pop pos pop for i in minus:
        y = i
        途中式.append((x, y))
        x -=y
     i minus y = i y i 途中式.append((x, y)) 途中式.append 途中式 append (x, y) x y x -=y x y print(x) print x for temp in 途中式:
        x,y = temp
        print(x,y) temp 途中式 x,y = temp x temp y print(x,y) print x y y = min(nums) min(nums) y p_count -=2 2 p_count x = minus.pop() minus.pop() x y = temp temp y y = pos.pop() pos.pop() y minus = [] [] minus x = pos.pop() pos.pop() x p_count += 1 1 p_count pos = [] [] pos x = max(nums) max(nums) x m_count = 0 0 m_count x = min(pos) min(pos) x y = minus.pop() minus.pop() y nums  = list(map(int, input().split(" "))) list(map(int, input().split(" "))) nums N = int(input()) int(input()) N y = i i y 途中式 = [] [] 途中式 m_count += 1 1 m_count x,y = temp temp x p_count = 0 0 p_count m_count += 1 1 m_count y = max(pos) max(pos) y x -=y y x x = minus.pop() minus.pop() x
import heapq
from collections import defaultdict
N = int(input())
nums  = list(map(int, input().split(" ")))
# 正の数、負の数の個数で操作をコントロール？
p_count = 0
m_count = 0
pos = []
minus = []
for num in nums:
    if num < 0:
        m_count += 1
        minus.append(num)
    else:
        p_count += 1
        pos.append(num)
pos.sort()
minus.sort() #小さい順番
途中式 = []
if N == 2:
    x = max(nums) 
    y = min(nums)
    print(max(nums) - min(nums))
    print(x, y)
else:
    #正の数を一つにして、そこから引きまくる
    if m_count == 0: #マイナスが無かったら作る
        x = min(pos)
        y = max(pos)
        途中式.append((x, y))
        minus.append(x - y)
        pos.remove(x)
        pos.remove(y)
        p_count -=2
        m_count += 1

    if p_count > 1: # 正が複数あったら、マイナスから引くことで減らしていく
        for i in range(p_count - 1):
            #マイナスから正が1個になるまで引いていく
            x = minus.pop()
            y = pos.pop()
            途中式.append((x,y))
            minus.append(x- y)
    elif p_count == 0 : #正が一つも無かったら、作る
        x = minus.pop()
        y = minus.pop()
        途中式.append((x, y))
        pos.append(x - y)

    x = pos.pop()
    for i in minus:
        y = i
        途中式.append((x, y))
        x -=y
    print(x)
    for temp in 途中式:
        x,y = temp
        print(x,y)