def c(n,a):
    a.sort()
    max = a.pop()
    min = a.pop(0)
    opr = []
    for i in a:
        if i >= 0:
            opr.append('{} {}'.format(min, i))
            min-=i
        else:
            opr.append('{} {}'.format(max, i))
            max-=i
    opr.append('{} {}'.format(max, min))
    return str(max - min) + '\n' + '\n'.join(opr)

n = int(input())
a = list(map(int, input().split()))
print(c(n, a)) def c(n,a):
    a.sort()
    max = a.pop()
    min = a.pop(0)
    opr = []
    for i in a:
        if i >= 0:
            opr.append('{} {}'.format(min, i))
            min-=i
        else:
            opr.append('{} {}'.format(max, i))
            max-=i
    opr.append('{} {}'.format(max, min))
    return str(max - min) + '\n' + '\n'.join(opr) c a.sort() a.sort a sort max = a.pop() max a.pop() a.pop a pop min = a.pop(0) min a.pop(0) a.pop a pop 0 opr = [] opr [] for i in a:
        if i >= 0:
            opr.append('{} {}'.format(min, i))
            min-=i
        else:
            opr.append('{} {}'.format(max, i))
            max-=i
     i a if i >= 0:
            opr.append('{} {}'.format(min, i))
            min-=i
        else:
            opr.append('{} {}'.format(max, i))
            max-=i
     i >= 0 i 0 opr.append('{} {}'.format(min, i)) opr.append opr append '{} {}'.format(min, i) '{} {}'.format '{} {}' format min i min-=i min i opr.append('{} {}'.format(max, i)) opr.append opr append '{} {}'.format(max, i) '{} {}'.format '{} {}' format max i max-=i max i opr.append('{} {}'.format(max, min)) opr.append opr append '{} {}'.format(max, min) '{} {}'.format '{} {}' format max min return str(max - min) + '\n' + '\n'.join(opr) str(max - min) + '\n' + '\n'.join(opr) str(max - min) + '\n' str(max - min) str max - min max min '\n' '\n'.join(opr) '\n'.join '\n' join opr n n a a 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 print(c(n, a)) print c(n, a) c n a a = list(map(int, input().split())) list(map(int, input().split())) a def c(n,a):
    a.sort()
    max = a.pop()
    min = a.pop(0)
    opr = []
    for i in a:
        if i >= 0:
            opr.append('{} {}'.format(min, i))
            min-=i
        else:
            opr.append('{} {}'.format(max, i))
            max-=i
    opr.append('{} {}'.format(max, min))
    return str(max - min) + '\n' + '\n'.join(opr) def c(n,a):
    a.sort()
    max = a.pop()
    min = a.pop(0)
    opr = []
    for i in a:
        if i >= 0:
            opr.append('{} {}'.format(min, i))
            min-=i
        else:
            opr.append('{} {}'.format(max, i))
            max-=i
    opr.append('{} {}'.format(max, min))
    return str(max - min) + '\n' + '\n'.join(opr) c n = int(input()) int(input()) n
def c(n,a):
    a.sort()
    max = a.pop()
    min = a.pop(0)
    opr = []
    for i in a:
        if i >= 0:
            opr.append('{} {}'.format(min, i))
            min-=i
        else:
            opr.append('{} {}'.format(max, i))
            max-=i
    opr.append('{} {}'.format(max, min))
    return str(max - min) + '\n' + '\n'.join(opr)

n = int(input())
a = list(map(int, input().split()))
print(c(n, a))