#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> iPair;
typedef vector<int> iVector;
typedef vector<iVector> iMatrix;
#define MOD 1000000007
#define INF 1e18
#define long long long
#define endl ('\n')
#define fill(ar,val) memset(ar,val,sizeof(ar))
#define fastIO ios::sync_with_stdio(false); cin.tie(0)
class SegmentTree
{
int n;
vector<long> vec, tree;
int getMin(int s, int e)
{
if(s==-1)
return e;
if(e==-1)
return s;
return (vec[s] < vec[e] ? s : e);
}
void build(int s, int e, int node)
{
if(s==e)
tree[node] = s;
else
{
int m = s + (e-s>>1);
build(s,m,node<<1);
build(m+1,e,node<<1|1);
tree[node] = getMin(tree[node<<1],tree[node<<1|1]);
}
}
long RMQ(int s, int e, int l, int r, int node)
{
if(s>e || s>r || e<l)
return -1;
if(s>=l && e<=r)
return tree[node];
else
{
int m = s + (e-s>>1);
long lQuery = RMQ(s,m,l,r,node<<1);
long rQuery = RMQ(m+1,e,l,r,node<<1|1);
return getMin(lQuery,rQuery);
}
}
long query(int s, int e)
{
if(s>e)
return -INF;
if(s==e)
return vec[s];
int m = RMQ(0,n-1,s,e,1);
long lQuery = query(s,m-1);
long rQuery = query(m+1,e);
return max({lQuery, rQuery, (e-s+1) * vec[m]});
}
public:
SegmentTree(const vector<long> &v)
{
this->vec = v;
this->n = v.size();
tree.resize(n<<2);
build(0,n-1,1);
}
long query()
{
return query(0,n-1);
}
};
int main()
{
fastIO;
while(true)
{
int n; cin >> n;
if(n==0)
break;
vector<long> h(n);
for(int i=0;i<n;i++)
cin >> h[i];
SegmentTree st(h);
cout << st.query() << endl;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0eXBlZGVmIHBhaXI8aW50LGludD4gaVBhaXI7CnR5cGVkZWYgdmVjdG9yPGludD4gaVZlY3RvcjsKdHlwZWRlZiB2ZWN0b3I8aVZlY3Rvcj4gaU1hdHJpeDsKI2RlZmluZSBNT0QgMTAwMDAwMDAwNwojZGVmaW5lIElORiAxZTE4CiNkZWZpbmUgbG9uZyBsb25nIGxvbmcKI2RlZmluZSBlbmRsICgnXG4nKQojZGVmaW5lIGZpbGwoYXIsdmFsKSBtZW1zZXQoYXIsdmFsLHNpemVvZihhcikpCiNkZWZpbmUgZmFzdElPIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgY2luLnRpZSgwKQoKY2xhc3MgU2VnbWVudFRyZWUKewoJaW50IG47Cgl2ZWN0b3I8bG9uZz4gdmVjLCB0cmVlOwoKCWludCBnZXRNaW4oaW50IHMsIGludCBlKQoJewoJCWlmKHM9PS0xKQoJCQlyZXR1cm4gZTsKCQlpZihlPT0tMSkKCQkJcmV0dXJuIHM7CgkJcmV0dXJuICh2ZWNbc10gPCB2ZWNbZV0gPyBzIDogZSk7Cgl9CgoJdm9pZCBidWlsZChpbnQgcywgaW50IGUsIGludCBub2RlKQoJewoJCWlmKHM9PWUpCgkJCXRyZWVbbm9kZV0gPSBzOwoJCWVsc2UKCQl7CgkJCWludCBtID0gcyArIChlLXM+PjEpOwoJCQlidWlsZChzLG0sbm9kZTw8MSk7CgkJCWJ1aWxkKG0rMSxlLG5vZGU8PDF8MSk7CgkJCXRyZWVbbm9kZV0gPSBnZXRNaW4odHJlZVtub2RlPDwxXSx0cmVlW25vZGU8PDF8MV0pOwoJCX0KCX0KCglsb25nIFJNUShpbnQgcywgaW50IGUsIGludCBsLCBpbnQgciwgaW50IG5vZGUpCgl7CgkJaWYocz5lIHx8IHM+ciB8fCBlPGwpCgkJCXJldHVybiAtMTsKCQlpZihzPj1sICYmIGU8PXIpCgkJCXJldHVybiB0cmVlW25vZGVdOwoJCWVsc2UKCQl7CgkJCWludCBtID0gcyArIChlLXM+PjEpOwoJCQlsb25nIGxRdWVyeSA9IFJNUShzLG0sbCxyLG5vZGU8PDEpOwoJCQlsb25nIHJRdWVyeSA9IFJNUShtKzEsZSxsLHIsbm9kZTw8MXwxKTsKCQkJcmV0dXJuIGdldE1pbihsUXVlcnksclF1ZXJ5KTsKCQl9Cgl9CgoJbG9uZyBxdWVyeShpbnQgcywgaW50IGUpCgl7CgkJaWYocz5lKQoJCQlyZXR1cm4gLUlORjsKCQlpZihzPT1lKQoJCQlyZXR1cm4gdmVjW3NdOwoKCQlpbnQgbSA9IFJNUSgwLG4tMSxzLGUsMSk7CgkJbG9uZyBsUXVlcnkgPSBxdWVyeShzLG0tMSk7CgkJbG9uZyByUXVlcnkgPSBxdWVyeShtKzEsZSk7CgkJcmV0dXJuIG1heCh7bFF1ZXJ5LCByUXVlcnksIChlLXMrMSkgKiB2ZWNbbV19KTsKCX0KCgpwdWJsaWM6CglTZWdtZW50VHJlZShjb25zdCB2ZWN0b3I8bG9uZz4gJnYpCgl7CgkJdGhpcy0+dmVjID0gdjsKCQl0aGlzLT5uID0gdi5zaXplKCk7CgkJdHJlZS5yZXNpemUobjw8Mik7CgkJYnVpbGQoMCxuLTEsMSk7Cgl9CgoJbG9uZyBxdWVyeSgpCgl7CgkJcmV0dXJuIHF1ZXJ5KDAsbi0xKTsKCX0KfTsKCmludCBtYWluKCkKewoJZmFzdElPOwoJd2hpbGUodHJ1ZSkKCXsKCQlpbnQgbjsgY2luID4+IG47CgkJaWYobj09MCkKCQkJYnJlYWs7CgkJdmVjdG9yPGxvbmc+IGgobik7CgkJZm9yKGludCBpPTA7aTxuO2krKykKCQkJY2luID4+IGhbaV07CgkJU2VnbWVudFRyZWUgc3QoaCk7CgkJY291dCA8PCBzdC5xdWVyeSgpIDw8IGVuZGw7Cgl9CglyZXR1cm4gMDsKfQo=