#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef vector vi; typedef pair ii; typedef vector vl; typedef long long ll; typedef pair llll; typedef vector vll; #define matrix(a) vector< vector > #define sz(a) int((a).size()) #define ite(v) v::iterator #define lop(i,a,b) for (int i=a; i<=b; i++) #define vlop(i,v) lop(i,0,sz(v)-1) #define vlop1(i,v) lop(i,1,sz(v)-1) #define rlop(i,a,b) for (int i=b; i>=a; i--) #define vrlop(i,v) rlop(i,0,sz(v)-1) #define vrlop1(i,v) rlop(i,1,sz(v)-1) #define printv(i,v) vlop(i,v)cout< r = { a,b }; vector s = { 1,0 }; vector t = { 0,1 }; int i; long long q; while (true) { i = r.size() - 1; r.pb(r[i - 1] % r[i]); q = r[i - 1] / r[i]; s.pb(s[i - 1] - s[i] * q); if (r[i + 1] == 0)break; } if (s[i]<0)s[i] += M; if (s[i] >= M)s[i] -= M; return s[i]; } int main(){ int n; cin >> n; vll fact(n+1,1),invfact(n+1,1); vlop1(i,fact){ fact[i]=fact[i-1]*i%M; invfact[i]=euclidean(fact[i],M); } vector m(n); for(int m_i = 0; m_i < n; m_i++){ cin >> m[m_i]; } vi sec; int head=0; vlop1(i,m){ if(m[i]=sec[i]){ lop(l,k,j-k){ p[j][k]+=(p[j-k][l]*fact[l]%M*invfact[l-k]%M); p[j][k]%=M; } } } /*printv(k,p[j]); enter;*/ } } } ll result=0; vlop1(i,p[n]){ result+=p[n][i]; result%=M; } cout<