#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>usingnamespace std;constint N =100005;int n, r[N], Left[N], Right[N];intJudge(int p){//printf("p:%d",p);int i, x, y;
Left[1]= r[1]; Right[1]=0;
x = r[1]; y = p - r[1];for(i =2; i <= n; i++){//偶数尽量从左边拿if(i %2==0){
Left[i]=min(r[i], x - Left[i -1]);
Right[i]= r[i]- Left[i];}//奇数尽量从右边拿else{
Right[i]=min(r[i], y - Right[i -1]);//注意!:原为:y - Right[i - 1]
Left[i]= r[i]- Right[i];}}//for (i = 1; i <= n; i++)// printf("i:%d----l:%d,r:%d\n",i,Left[i],Right[i]);return Left[n]==0;}intmain(){while(~scanf("%d",&n)&&n){int i, L =0, R =0, mid;for(i =1; i <= n; i++){scanf("%d",&r[i]);
R =max(R, r[i]*3);}if(n ==1){printf("%d\n", r[1]);continue;}
r[n +1]= r[1];for(i =1; i <= n; i++)
L =max(L, r[i]+ r[i +1]);if(n %2==1){while(L <= R){
mid =(L + R)/2;if(Judge(mid)){
R = mid -1;}else{
L = mid +1;}}printf("%d\n", R +1);}elseprintf("%d\n", L );}return0;}