def dfs(d,l,r) Memo[d][l][r]||=( if l==r 1 elsif d==0 if A[l]>=A[r] dfs(0,l,r-1) else [dfs(0,l,r-1),dfs(1,l+1,r)+1].max end else if A[l]<=A[r] dfs(1,l+1,r) else [dfs(1,l+1,r),dfs(0,l,r-1)+1].max end end ) end N=gets.to_i A=gets.split.map(&:to_i) Memo=[0,1].map{(1..N).map{[]}} p (0...N).flat_map{|i|[dfs(0,i,N-1),dfs(1,0,i)]}.max