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}

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}

Examples

Input

3
1 -1 2


Output

4
-1 1
2 -2


Input

3
1 1 1


Output

1
1 1
1 0
#include<bits/stdc++.h>

using namespace std;

const int N=200010;

int n,a[N],ans1[N],ans2[N],cnt;

int main(){
//	freopen("c.in","r",stdin);
//	freopen("c.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;++i)scanf("%d",&a[i]);
	int mx=-1e9,mn=1e9,p1,p2;
	for(int i=1;i<=n;++i){
		if(mx<a[i]||(mx==a[i]&&p1<i))mx=a[p1=i];
		if(mn>a[i]||(mn==a[i]&&p2>i))mn=a[p2=i];
	}
	for(int i=1;i<=n;++i)if(i!=p1&&i!=p2){
		if(a[i]<0){
		//	printf("%d %d\n",mx,a[i]);
			ans1[++cnt]=mx;mx-=a[i];
		}else{
		//	printf("%d %d\n",mn,a[i]);
			ans1[++cnt]=mn;mn-=a[i];
		}
		ans2[cnt]=a[i];
	}
	ans1[++cnt]=mx;ans2[cnt]=mn;
	//printf("%d %d\n",mx,mn);
	mx-=mn;cout<<mx<<endl;
	for(int i=1;i<=cnt;++i)printf("%d %d\n",ans1[i],ans2[i]);
	return 0;
}
