object Solution { def maxTR(A: Array[Int]) : List[Int] = { val len = A.length var B: List[Int] = List() for(k<- 0 to len) { for(i<- 0 to len - k - 1) { val j = i + k //println("i=" + i + ",j=" + j) val slA = A.slice(i,j+1) val mx = slA.max B = mx :: B //println("max=" + mx) } } return B } def maxTR2(A: List[Int]) : Int = { val pprime = 1000000007 val len = A.length var total = 0L for(k<- 0 to len) { for(i<- 0 to len - k - 1) { val j = i + k //println("i=" + i + ",j=" + j) val slA = A.slice(i,j+1) val mx = slA.max total += mx total = total % pprime } } return total.toInt } def solve(A: Array[Int]): Int = { // Return the sum of S(S(A)) modulo 10^9+7. val B = maxTR(A) //val mB = B.toArray val nB = maxTR2(B) //println(nB) return nB } def main(args: Array[String]) { val sc = new java.util.Scanner (System.in); var n = sc.nextInt(); var a = new Array[Int](n); for(a_i <- 0 to n-1) { a(a_i) = sc.nextInt(); } val result = solve(a); println(result) } }