M=10*9+7

def div_conq(l,r,c)
  return 1 if r-l<=1
  m=(l+r)/2
  l_num=div_conq(l,m-1,c)
  r_num=div_conq(m,r,c)
  sum=l_num+r_num
  l_h=Hash.new(0)
  r_h=Hash.new(0)
  ret=-1
  v=c[m]
  if c[m-1]!=c[m]
    l.upto(m-1){|k|l_h[c[k]]+=1}
    m.upto(r){|k|r_h[c[k]]+=1}
    l_h.each{|k,v|ret+=v*r_h[k]}
    return (ret+sum)%M
  end
  l.upto(m-1){|k|l_h[c[k]]+=1 if c[k]!=v}
  m.upto(r){|k|r_h[c[k]]+=1 if c[k]!=v}
  l_h.each{|k,v|ret+=v*r_h[k]}
  l_same_num=0
  r_same_num=0
  l_flag=false
  r_flag=false
  (m-2).downto(l){|k|
    if c[k]!=v
      l_flag=true
    elsif l_flag&&c[k]==v
      l_same_num+=1
    end
  }
  (m+1).upto(r){|k|
    if c[k]!=v
      r_flag=true
    elsif r_flag&&c[k]==v
      r_same_num+=1
    end
  }
  (ret+sum+l_same_num*r_same_num)%M
end

n=gets.to_i
c=n.times.map{gets.to_i}

puts div_conq(0,n-1,c)