#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
/**
【思路】:其实一开始维护一个单调的栈,
这个栈存储序号,然后判断是不是可以填入,
如果可以填进去,就是维护一个单调递增的栈
如果输入一个不能维护的话,就倒回去到比它小的
这样的话每次倒回去,就等于枚举了,枚举math[temp]*(i-stk.top()-1)
就是枚举一个面积,如果为空的话,就是这个放入的值是最小的
就进行维护,就是他只只能选择math[temp]*i
就是底下的长度。最后一个0保证了会去进行求面积操作。
这样的话复杂度就是O(N)
**/
ll math[100005];
int main()
{
int n;
while(~scanf("%d",&n)&&n)
{
ll s;
s=0;
memset(math,0,sizeof(math));
for(int i=0; i<n; i++)
scanf("%lld",&math[i]);
math[n]=0;
stack<int>stk;
for(int i=0; i<=n; i++)
{
if(stk.empty()||math[stk.top()]<math[i])
stk.push(i);
else
{
int temp=stk.top();
stk.pop();
s=max(s,math[temp]*(stk.empty()?i:(i-stk.top()-1)));
i--;
}
}
while(!stk.empty())
stk.pop();
printf("%lld\n",s);
}
return 0;
}