#include <bits/stdc++.h>
#include <unistd.h>
using namespace std;
typedef long long LL;
const int N=1.1e6+10,P=1e9+7;
LL n,fac[N],ifac[N];
LL ksm(LL a,LL b) { LL res=1; for(;b;b>>=1,a=a*a%P) if(b&1) res=res*a%P; return res; }
void init(int n)
{
fac[0]=1; for(int i=1;i<=n;i++) fac[i]=fac[i-1]*i%P;
ifac[n]=ksm(fac[n],P-2); for(int i=n;i>=1;i--) ifac[i-1]=ifac[i]*i%P;
}
LL C(LL a,LL b) { return fac[a]*ifac[b]%P*ifac[a-b]%P; }
int main() {
init(N-1);
scanf("%lld",&n);
int len=0,lst=1000,ans=1,x;
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
if(!x) len++;
else
{
if(x>lst) return !printf("0");
ans=1ll*ans*C(len+lst-x,len)%P;
lst=x,len=0;
}
}
ans=1ll*ans*C(len+lst-1,len)%P;
printf("%d",ans);
return 0;
}
// 64 位输出请用 printf("%lld")