1class Solution:2def sumSubarrayMins(self, arr: List[int]) -> int:3n = len(arr)4small_before = [-1] * n5stack = []6for i in range(n):7while stack and arr[stack[-1]] >= arr[i]:8stack.pop()9if stack:10small_before[i] = stack[-1]11stack.append(i)12best = [0] * (n + 1)13ans = 014for i in range(n):15best[i] = best[small_before[i]] + (i - small_before[i]) * arr[i]16ans += best[i]17return ans % 1000000007