#include<string.h>
#include<cmath>
#include<iostream>
#include<cstdio>
#include<algorithm>
#define ll long long
using namespace std;
struct hfmtree
{
int parient,lson,rson;
int value;
hfmtree(){
parient=lson=rson=-1;
}
}hf[100000];
int n;
bool cmp(hfmtree a,hfmtree b)
{
return a.value<b.value;
}
void bulidhfm()
{
sort(hf+1,hf+1+n,cmp);
int l1,l2,mi1,mi2;
for(int i=n+1;i<=2*n-1;i++)
{
mi1=mi2=0x3f3f3f3f;
for(int j=1;j<i;j++)
{
if(hf[j].parient==-1)
{
if(hf[j].value<mi1)
{
mi2=mi1;
l2=l1;
mi1=hf[j].value;
l1=j;
}
else if(hf[j].value<mi2)
{
mi2=hf[j].value;
l2=j;
}
}
}
hf[l1].parient=hf[l2].parient=i;
hf[i].value=hf[l1].value+hf[l2].value;
hf[i].lson=l1;
hf[i].rson=l2;
}
for(int i=1;i<=2*n-1;i++)
{
cout<<hf[i].value<<' '<<hf[i].lson<<' '<<hf[i].rson<<' '<<' '<<hf[i].parient<<endl;
}
}
struct hfcod
{
char cc[100];
int l;
}hfco[10000];
void findh()
{
for(int i=1;i<=n;i++)
{
hfco[i].l=n;
int j=hf[i].parient,so=i;
while(j!=-1)
{
if(hf[j].lson==so)
{
hfco[i].cc[hfco[i].l--]='0';
}
else
{
hfco[i].cc[hfco[i].l--]='1';
}
so=j;
j=hf[j].parient;
}
hfco[i].l++;
}
for(int i=1;i<=n;i++)
{
for(int j=hfco[i].l;j<=n;j++)
{
cout<<hfco[i].cc[j];
}
cout<<endl;
}
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>hf[i].value;
}
bulidhfm();
cout<<endl;
findh();
}
#include<string.h>
#include<cmath>
#include<iostream>
#include<cstdio>
#include<algorithm>
#define ll long long
using namespace std;
struct hfmtree
{
int parient,lson,rson;
int value;
hfmtree(){
parient=lson=rson=-1;
}
}hf[100000];
int n;
bool cmp(hfmtree a,hfmtree b)
{
return a.value<b.value;
}
void bulidhfm()
{
sort(hf+1,hf+1+n,cmp);
int l1,l2,mi1,mi2;
for(int i=n+1;i<=2*n-1;i++)
{
mi1=mi2=0x3f3f3f3f;
for(int j=1;j<i;j++)
{
if(hf[j].parient==-1)
{
if(hf[j].value<mi1)
{
mi2=mi1;
l2=l1;
mi1=hf[j].value;
l1=j;
}
else if(hf[j].value<mi2)
{
mi2=hf[j].value;
l2=j;
}
}
}
hf[l1].parient=hf[l2].parient=i;
hf[i].value=hf[l1].value+hf[l2].value;
hf[i].lson=l1;
hf[i].rson=l2;
}
/*for(int i=1;i<=2*n-1;i++)
{
cout<<hf[i].value<<' '<<hf[i].lson<<' '<<hf[i].rson<<' '<<' '<<hf[i].parient<<endl;
}*/
}
struct hfcod
{
char cc[100];
int l;
}hfco[10000];
void findh()
{
for(int i=1;i<=n;i++)
{
hfco[i].l=n;
int j=hf[i].parient,so=i;
while(j!=-1)
{
if(hf[j].lson==so)
{
hfco[i].cc[hfco[i].l--]='0';
}
else
{
hfco[i].cc[hfco[i].l--]='1';
}
so=j;
j=hf[j].parient;
}
hfco[i].l++;
}
/*for(int i=1;i<=n;i++)
{
for(int j=hfco[i].l;j<=n;j++)
{
cout<<hfco[i].cc[j];
}
cout<<endl;
}*/
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>hf[i].value;
}
bulidhfm();
findh();
int sun=0;
for(int i=1;i<=n;i++)
{
sun+=(n-hfco[i].l+1)*hf[i].value;
}
cout<<sun<<endl;
}