#include<bits/stdc++.h>
#define int long long
using namespace std;
int top,n,c[100009],t[100009],f[100009],ans;
const int mod=1e9+7;
struct dian
{
int x,v,v1;
}a[100009];
bool cmp1(dian i,dian j)
{
return i.v<j.v;
}
bool cmp2(dian i,dian j)
{
return i.x<j.x;
}
int d[100009];
int lowbit(int x)
{
return x&-x;
}
void add(int x,int k)
{
k=(k%mod+mod)%mod;
while(x<=n)
{
d[x]+=k;
d[x]=(d[x]%mod+mod)%mod;
x+=lowbit(x);
}
}
int find(int x)
{
int rtd=0;
while(x)
{
rtd+=d[x];
x-=lowbit(x);
rtd=(rtd%mod+mod)%mod;
}
return rtd;
}
signed main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>c[i];
}
c[0]=-(1e11+7);
for(int i=1;i<=n;i++)
{
if(c[i]==c[i-1])
continue;
top++;
a[top].v=c[i];
a[top].x=top;
}
n=top;
sort(a+1,a+n+1,cmp1);
top=0;
a[0].v=-(1e11+7);
for(int i=1;i<=n;i++)
{
if(a[i].v!=a[i-1].v)
top++;
a[i].v1=top;
}
sort(a+1,a+n+1,cmp2);
for(int i=1;i<=n;i++)
{
if(t[a[i].v1])
add(a[t[a[i].v1]].v1,-f[t[a[i].v1]]);
f[i]=find(a[i].v1-1)+1;
f[i]=(f[i]%mod+mod)%mod;
ans+=f[i];
ans=(ans%mod+mod)%mod;
add(a[i].v1,f[i]);
t[a[i].v1]=i;
}
cout<<ans-n;
return 0;
}