#include<bits/stdc++.h>
#define maxn 10010
using namespace std;
int n,len,num,a[maxn],ans,x,y; //小根堆
void put(int x){ //插入一个x
a[++len]=x;
int son=len,father;
while(son>1){
father=son/2;
if(a[father]<=a[son])break;
else swap(a[father],a[son]);
son=father;
}
}
int get(){ //删除根节点
int res=a[1];
a[1]=a[n];
len--;
int son=1,father=1;
while(father*2<=len){
son*=2;
if(son<len&&a[son+1]<a[son])son++;
if(a[father]<=a[son])break;
else swap(a[father],a[son]);
father=son;
}
return res;
}
int main() {
cin>>n;
for(int i=1;i<=n;i++){
cin>>num;
put(num);
}
for(int i=1;i<=len;i++)cout<<a[i]<<" ";
cout<<endl;
for(int i=1;i<=n-1;i++){
x=get();
y=get();
ans+=x+y;
}
cout<<ans;
return 0;
}