orz (#7 #8WA)
#include<iostream>
#include<algorithm>
using namespace std;
int n;
long long ans;
int b[40000];
struct list{
int nexts = 0,last = 0,id = 0,x = 0;
}a[40000];
bool cmp(list a,list b){
if(a.x!=b.x)return a.x<b.x;
return a.id<b.id;
}
int main(){
cin >> n;
for(int i = 1;i<=n;i++){
cin >> b[i];
a[i].x = b[i];
a[i].id = i;
}
sort(a+1,a+1+n,cmp);
for(int i = 1;i<=n;i++){
a[i].nexts = i+1;
a[i].last = i-1;
}
for(int i = n;i>=2;i--){
for(int j = 1;j<=n;j++){
if(a[j].id == i){
if(a[a[j].nexts].x == 0) ans+=abs(a[j].x-a[a[j].last].x);
else if(a[a[j].last].x == 0) ans+=abs(a[j].x-a[a[j].nexts].x);
else ans+=min(abs(a[j].x - a[a[j].nexts].x),abs(a[j].x-a[a[j].last].x));
a[a[j].nexts].last = a[j].last;
a[a[j].last].nexts = a[j].nexts;
}
}
}
cout << ans+b[1];
return 0;
}