- """
- #If FastIO not needed, use this and don't forget to strip
- #import sys, math
- #input = sys.stdin.readline
- """
- import os
- import sys
- from io import BytesIO, IOBase
- import heapq as h
- from bisect import bisect_left, bisect_right
- import time
- from types import GeneratorType
- BUFSIZE = 8192
- class FastIO(IOBase):
- newlines = 0
- def __init__(self, file):
- import os
- self.os = os
- self._fd = file.fileno()
- self.buffer = BytesIO()
- self.writable = "x" in file.mode or "r" not in file.mode
- self.write = self.buffer.write if self.writable else None
- def read(self):
- while True:
- b = self.os.read(self._fd, max(self.os.fstat(self._fd).st_size, BUFSIZE))
- if not b:
- break
- ptr = self.buffer.tell()
- self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
- self.newlines = 0
- return self.buffer.read()
- def readline(self):
- while self.newlines == 0:
- b = self.os.read(self._fd, max(self.os.fstat(self._fd).st_size, BUFSIZE))
- self.newlines = b.count(b"\n") + (not b)
- ptr = self.buffer.tell()
- self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
- self.newlines -= 1
- return self.buffer.readline()
- def flush(self):
- if self.writable:
- self.os.write(self._fd, self.buffer.getvalue())
- self.buffer.truncate(0), self.buffer.seek(0)
- class IOWrapper(IOBase):
- def __init__(self, file):
- self.buffer = FastIO(file)
- self.flush = self.buffer.flush
- self.writable = self.buffer.writable
- self.write = lambda s: self.buffer.write(s.encode("ascii"))
- self.read = lambda: self.buffer.read().decode("ascii")
- self.readline = lambda: self.buffer.readline().decode("ascii")
- sys.stdin, sys.stdout = IOWrapper(sys.stdin), IOWrapper(sys.stdout)
- input = lambda: sys.stdin.readline().rstrip("\r\n")
- from collections import defaultdict as dd, deque as dq, Counter as dc
- import math, string
- #start_time = time.time()
- def getInts():
- return [int(s) for s in input().split()]
- def getInt():
- return int(input())
- def getStrs():
- return [s for s in input().split()]
- def getStr():
- return input()
- def listStr():
- return list(input())
- def getMat(n):
- return [getInts() for _ in range(n)]
- def isInt(s):
- return '0' <= s[0] <= '9'
- MOD = 10**9 + 7
- """
- """
- def solve():
- def find(a):
- if a != p[a]:
- p[a] = find(p[a])
- return p[a]
- def union(a, b):
- global max_size
- a, b = find(a), find(b)
- if size[a] > size[b]:
- a, b = b, a
- p[a] = b
- size[b] += size[a]
- max_size = max(max_size,size[b])
- return
- N = getInt()
- p = [i for i in range(N)]
- size = [1]*N
- global max_size
- max_size = 1
- A = getInts()
- ans = 0
- inds = dd(set)
- bools = [False for i in range(N)]
- for i,a in enumerate(A):
- inds[a].add(i)
- flag = False
- for i in range(10**5,0,-1):
- for ind in inds[i]:
- flag = True
- bools[ind] = True
- if ind < N-1 and bools[ind+1]: union(ind,ind+1)
- if ind > 0 and bools[ind-1]: union(ind,ind-1)
- if flag: ans = max(ans,i*max_size)
- return ans
- #for _ in range(getInt()):
- print(solve())
- #solve()
- #print(time.time()-start_time)