// Mohib Manva. #include using namespace std; #define ll long long #define mod 1000000007 static ll nCr[1505][1505],a[1500]; static ll f1[1505]; int main(){ f1[0] = 1ll; for(int i=1;i<=1500;i++){ f1[i] = (f1[i-1]*i*1ll)%mod; } nCr[0][0] = 1ll; for(int i=1;i<=1500;i++){ for(int j=0;j<=i;j++){ nCr[i][j] = nCr[i-1][j]; if(j>0){ nCr[i][j] += nCr[i-1][j-1]; nCr[i][j] %= mod; } } } int n; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%lld",&a[i]); } static long long dp[1505][1505]; // dp[last index][count of the subarray in last step]. dp[1][1] = 1ll; for(int i=2;i<=n;i++){ if(a[i-1]=mod) sum -= mod; } dp[j][count] += sum; if(dp[j][count]>=mod){ dp[j][count] -= mod; } if(j==n){ ans += dp[j][count]; if(ans>=mod){ ans -= mod; } } } } printf("%lld\n",ans+dp[n][n]); return 0; }