const int LEN=100010;
const LL MOD=1000000007LL;
struct Sequential_Automaton{
vector<int> Pos[LEN];
int S[LEN],Last[LEN];
LL f[LEN];
int Len;
void Input(int len){
Len=len;
for(RG i=1;i<=Len;++i){
Read(S[i]);
Pos[S[i]].push_back(i);
}
}
bool Find(int *P,int LenP){//查询P是否是S的子序列
int LastPos=0;
for(RG i=1;i<=LenP;++i){
auto it=upper_bound(Pos[P[i]].begin(),Pos[P[i]].end(),LastPos);
if(it==Pos[P[i]].end()) return false;
LastPos=*it;
}
return true;
}
LL Count_Subsequence(){//本质不同的子序列数目
for(RG i=1;i<=Len;++i){
f[i]=(f[i-1]<<1)%MOD;
if(!Last[S[i]]) {Last[S[i]]=i;++f[i];}
else {f[i]=(f[i]-f[Last[S[i]]-1]+MOD)%MOD;Last[S[i]]=i;}
}
return f[Len];
}
};