#include using namespace std; vector a; long long ans=0; int n; long long fac[1202]; long long mod = 1000000007; long long c[1202][1202]; void rec(int ind, int p, long long s) { // printf("%d %d %lld\n",ind, p, s); if(ind == a.size()) { ans=(ans+s)%mod; return ; } if(p==-1) { int val=a[ind]; a[ind]=0; rec(ind+1, val, 1); a[ind]=val; for(int i=val-1; i>=1; i--) { a[ind]=val-i; rec(ind, i, 1); a[ind]=val; } }else { int val = a[ind]; for(int i=min(p,val); i>=1; i--) { a[ind]=val-i; if(a[ind]==0) rec(ind+1, i, (s*c[p][i]*fac[i])%mod); else rec(ind, i, (s*c[p][i]*fac[i])%mod); a[ind]=val; } } } int main(){ cin >> n; vector m(n); for(int m_i = 0; m_i < n; m_i++){ cin >> m[m_i]; } c[1][1]=1; for(int i=2; i<=n; i++) { c[i][0]=1; c[i][i]=1; for(int j=1; jm[i-1]) cnt++; else { a.push_back(cnt); cnt=1; } } a.push_back(cnt); rec(0, -1, 1); printf("%lld\n",ans); return 0; }