#include<cstdio>
#define N 2000000
long long q[N];
int n,i,j,k,r[N],s[N],d[N];
void A(int k,int a,int b)
{if(k>n)
{A(s[k],2*a,b+1),A(d[k],2*a+1,b+1);
return;}
r[k]=b,q[k]=a;}
int main()
{freopen("huffman.in","r",stdin);
freopen("huffman.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&r[i]),q[i]=N;
for(j=k=i=1;i<n;i++)
if(k<n&&r[k+1]<=q[j])
q[i]=r[k]+r[k+1],s[i+n]=k++,d[i+n]=k++,q[0]+=q[i];
else
if(q[j+1]<=r[k]||k>n)
q[i]=q[j]+q[j+1],s[i+n]=n+j++,d[i+n]=n+j++,q[0]+=q[i];
else
if(q[j]<=r[k]&&r[k]<=q[j+1])
q[i]=r[k]+q[j],s[i+n]=k++,d[i+n]=n+j++,q[0]+=q[i];
else
q[i]=r[k]+q[j],s[i+n]=n+j++,d[i+n]=k++,q[0]+=q[i];
printf("%lld\n",q[0]),A(2*n-1,0,0);
for(i=1;i<=n;i++)
printf("%d %lld\n",r[i],q[i]);
return 0;}