#include using namespace std; long long int fact(long long int n) { if (n <= 1) return 1; return ((n*fact(n-1))%1000000007); } long long int npr(int n, int r,int* dp2,int k) {//cout<<"n "<0))return dp2[n*k+r]; long long int z=1; for(int i=n-r+1;i<=n;i++) { z=(z*i)%1000000007; } dp2[n*k+r]=z; return z; } long long int fun2(vector &m,int n,int k,int index,int* dp,int kk,int *dp2) {if(index0))return dp[(index)*kk+k-1]; long long int kn=min(k,n-index); for(int m_i = index+1; m_i < n&&m_i<(index+kn); m_i++){ if(m[m_i]=1)sum=npr(k,1,dp2,kk+1); for(int i = 2; i <= kn; i++){ long long int temp=npr(k,i,dp2,kk+1); temp=(temp*fun2(m,n,i,index+i,dp,kk,dp2))%1000000007; sum=(sum+temp)%1000000007; } if(index &arr,int n,int k,int* dp,int *dp2) { long long int sum=1; for(int i = 2; i <= k; i++){ long long int temp; temp=fun2(arr,n,i,i,dp,k,dp2); //cout<> n; vector m(n); int k=n; for(int m_i = 0; m_i < n; m_i++){ cin >> m[m_i]; } for(int m_i = 1; m_i < n; m_i++){ if(m[m_i]