#include <iostream>
#include <queue>
#define maxN 10000
using namespace std;
struct Elem{
   int hossz; int azon;
   Elem(){};
   Elem( int x , int y ) { hossz = x ; azon = y ; }
   bool operator <( const Elem&) const ;
};
bool Elem:: operator < ( const Elem& jobb ) const {
   return hossz > jobb . hossz ;
}

struct Fapont {
   int bal , jobb , hossz ;
};
Fapont Fa [maxN] ;

void KiIr (int f) {
   cout<<Fa[f].hossz<<" "<<Fa[Fa[f].bal].hossz<<endl ;
   if (Fa[f].bal !=0) KiIr(Fa[f].bal) ;
   if (Fa[f].jobb!=0) KiIr(Fa[f].jobb) ;
}
int main ( ) {
   int n , dh, OsszKolts=0;
   Elem e , x , y ;
   priority_queue <Elem> S;

   cin>>n;
   for (int i =1; i <=n; i ++){
      cin>>dh;
      e.azon=i; e.hossz=dh;
      S.push(e);
      Fa[i].hossz=dh;
      Fa[i].bal=0; Fa[i].jobb=0;
   }
   for ( int i =n+1; i <2*n; i ++){
      x=S.top(); S.pop();
      y=S.top(); S.pop();
      e.azon=i; e.hossz=x.hossz+y.hossz;
      S.push(e);
      Fa[i].hossz=e.hossz;
      Fa[i].bal=x.azon; Fa[i].jobb=y.azon;
      OsszKolts+=e.hossz ;
   }
   cout<<OsszKolts<<endl ;
   KiIr (2*n-1);
   return 0;
}
