N=int(input()) A=list(map(int,input().split())) mod=10**9+7 compression_dict={a: ind+1 for ind, a in enumerate(sorted(set(A)))} A=[compression_dict[a] for a in A] def seg_function(x,y): # Segment treeで扱うfunction if x[0]==y[0]: return (x[0],x[1]+y[1]) elif x[0]>y[0]: return x else: return y seg_el=1<<(N.bit_length()) # Segment treeの台の要素数 SEG=[(-1,0)]*(2*seg_el) # 1-indexedなので、要素数2*seg_el.Segment treeの初期値で初期化 def update(n,x,seg_el): # A[n]をxへ更新(反映) i=n+seg_el SEG[i]=x i>>=1# 子ノードへ while i!=0: SEG[i]=seg_function(SEG[i*2],SEG[i*2+1]) i>>=1 def getvalues(l,r):# 区間[l,r)に関するseg_functionを調べる L=l+seg_el R=r+seg_el ANS=(-1,0) while L>=1 R>>=1 return ANS update(0,(0,1),seg_el) for a in A: x=getvalues(0,a+1) y=getvalues(a,a+1) z=getvalues(0,a) #print(a,x,y) if x[0]==y[0]: update(a,(x[0],z[1]+y[1]),seg_el) else: update(a,(x[0]+1,x[1]+y[1]),seg_el) #for i in range(6): # print(getvalues(i,i+1),end=" ") #print() print(getvalues(0,N+1)[1]%mod)