#include using namespace std; const int MOD=1000000007; int N; int A[1201]; int ok[1201][1201]; int dp[1201][1201]; int fact[1201]; int ifact[1201]; int powmod(int a, int b) { int ret=1; for(; b>0; b/=2) { if(b&1) ret=1LL*ret*a%MOD; a=1LL*a*a%MOD; } return ret; } int C(int n, int k) { return 1LL*fact[n]*ifact[k]%MOD*ifact[n-k]%MOD; } int solve(int pos, int k) { if(pos>N) return ifact[k]; if(k==0) return 0; int& ret=dp[pos][k]; if(ret!=-1) return ret; ret=0; for(int i=1; i<=k; i++) if(pos+i-1<=N && ok[pos][pos+i-1]) ret=(ret+1LL*fact[i]*ifact[k-i]%MOD*solve(pos+i, i))%MOD; return ret; } int main() { memset(dp, -1, sizeof dp); scanf("%d", &N); fact[0]=1; for(int i=1; i<=N; i++) scanf("%d", A+i), fact[i]=1LL*fact[i-1]*i%MOD; for(int i=0; i<=N; i++) ifact[i]=powmod(fact[i], MOD-2); for(int i=1; i<=N; i++) { ok[i][i]=1; for(int j=i+1; j<=N; j++) ok[i][j]=ok[i][j-1] && A[j-1]