#include <iostream> #include <queue> #include <vector> using namespace std; struct treenode{ int value; bool leaf; treenode(int x):value(x),leaf(true){}; bool operator< (treenode y) const{ return value>y.value; } }; priority_queue<treenode> l; vector<treenode> total; void init(){ while(!l.empty()) l.pop(); total.clear(); } int main() { int n; while(cin>>n){ init(); for(int i=0;i<n;i++){ int t; cin>>t; treenode tem(t); l.push(tem); } while(n>1){ n--; treenode a=l.top(); l.pop(); treenode b=l.top(); l.pop(); treenode c(a.value+b.value); c.leaf=false; l.push(c); total.push_back(c); } int r=0; for(int i=0;i<total.size();i++){ if(total[i].leaf==false) r+=total[i].value; } cout<<r<<endl; } }