Problem:
Score : 500 points

Problem Statement

There are N integers, A_1, A_2, ..., A_N, written on a blackboard.

We will repeat the following operation N-1 times so that we have only one integer on the blackboard.

Choose two integers x and y on the blackboard and erase these two integers. Then, write a new integer x-y.

Find the maximum possible value of the final integer on the blackboard and a sequence of operations that maximizes the final integer.

Constraints

2 \leq N \leq 10^5

-10^4 \leq A_i \leq 10^4

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N
A_1 A_2 ... A_N

Output

Print the maximum possible value M of the final integer on the blackboard, and a sequence of operations x_i, y_i that maximizes the final integer, in the format below.

Here x_i and y_i represent the integers x and y chosen in the i-th operation, respectively.

If there are multiple sequences of operations that maximize the final integer, any of them will be accepted.

M
x_1 y_1
:
x_{N-1} y_{N-1}

Sample Input 1

3
1 -1 2

Sample Output 1

4
-1 1
2 -2

If we choose x = -1 and y = 1 in the first operation, the set of integers written on the blackboard becomes (-2, 2).

Then, if we choose x = 2 and y = -2 in the second operation, the set of integers written on the blackboard becomes (4).

In this case, we have 4 as the final integer. We cannot end with a greater integer, so the answer is 4.

Sample Input 2

3
1 1 1

Sample Output 2

1
1 1
1 0

Solution in Python (3.4.3) (judge verdict: Accepted)

N = int(input())

#As = [int(elm) for elm in input().split(" ")]
As = []
minus_As = []
plus_As = []
minus_count = 0
plus_count = 0
for elm in input().split(" "):
    A = int(elm)
    if A >= 0:
        plus_As.append(A)
        plus_count += 1
    else:
        minus_As.append(A)
        minus_count += 1
    As.append(A)

cond1 = plus_count > 0
cond2 = minus_count > 0
# 両方
case1 = cond1 and cond2
# 全て非負の場合
case2 = cond1 and (not cond2)
# 全てマイナスの場合
case3 = (not cond1) and cond2

out_txts = []
if case1:
    max_val = max(plus_As)
    max_i = plus_As.index(max_val)

    mA = minus_As[0]
    for i, pA in enumerate(plus_As):
        if i == max_i:
            continue
        out_txts.append("%d %d" % (mA, pA))
        mA -= pA
    minus_As[0] = mA

    out = max_val
    for mA in minus_As:
        out_txt = "%d %d" % (out, mA)
        out_txts.append(out_txt)
        out -= mA
elif case2:
    max_val = max(plus_As)
    max_i = plus_As.index(max_val)
    del plus_As[max_i]

    min_val = min(plus_As)
    min_i = plus_As.index(min_val)
    del plus_As[min_i]

    minA = min_val
    for i, pA in enumerate(plus_As):
        #if i in [min_i, max_i]:
        #    continue
        out_txt = "%d %d" % (minA, pA)
        out_txts.append(out_txt)
        minA -= pA
    
    out_txt = "%d %d" % (max_val, minA)
    out_txts.append(out_txt)
    out = max_val - minA

else:
    max_val = max(minus_As)
    max_i = minus_As.index(max_val)
    del minus_As[max_i]

    out = max_val
    for i, mA in enumerate(minus_As):
        #if max_i == i:
        #    continue
        out_txt = "%d %d" % (out, mA)
        out_txts.append(out_txt)
        out -= mA

#print("case", case1, case2, case3)
print(out)
for out_txt in out_txts:
    print(out_txt)