#include<stdio.h>
#include<algorithm>
using namespace std;
int main () {
freopen("prieteni.in","r",stdin);
freopen("prieteni.out","w",stdout);
int n,v[1000],i,max,s=0;
scanf("%d",&n);
max=n-1;
for(i=0;i<n;++i)
scanf("%d",&v[i]);
sort(v,v+n);
if(n==1){
printf("%d\n%d\n",v[0],v[0]);
return 0;
}
if(n==2){
printf("%d %d\n%d",v[0],v[1],v[0]+v[1]);
return 0;
}
if(n==3){
printf("%d %d\n",v[0],v[1]);
printf("%d\n",v[0]);
printf("%d %d\n",v[0],v[2]);
printf("%d",v[0]+v[1]+v[2]);
return 0;
}
if(n%2==0){
while(max>1){
printf("%d %d\n",v[0],v[1]);
printf("%d\n",v[0]);
printf("%d %d\n",v[max],v[max-1]);
printf("%d\n",v[1]);
s+=v[1]+v[max]+v[1]+v[0];
max-=2;
}
printf("%d %d\n",v[0],v[1]);
s+=v[1];
printf("%d\n",s);
}
else{
while(max>2){
printf("%d %d\n",v[0],v[1]);
printf("%d\n",v[0]);
printf("%d %d\n",v[max],v[max-1]);
printf("%d\n",v[1]);
s+=v[1]+v[max]+v[0]+v[1];
max-=2;
}
printf("%d %d\n",v[0],v[1]);
printf("%d\n",v[0]);
printf("%d %d\n",v[0],v[2]);
s+=v[1]+v[0]+v[2];
printf("%d\n",s);
}
return 0;
}