#include using namespace std; typedef long long ll; typedef vector vi; typedef vector vl; typedef pair pii; typedef pair pll; typedef int _loop_int; #define REP(i,n) for(_loop_int i=0;i<(_loop_int)(n);++i) #define FOR(i,a,b) for(_loop_int i=(_loop_int)(a);i<(_loop_int)(b);++i) #define FORR(i,a,b) for(_loop_int i=(_loop_int)(b)-1;i>=(_loop_int)(a);--i) #define DEBUG(x) cout<<#x<<": "< P; int n; int m[1252]; int err[1252]; ll dp[1252][1252]; // dp[i][j] := rest i items, split into j array // dp[i][j] = 0 if there is error in j items or im[i+1]); REP(i,n-1)err[i+1] += err[i]; dp[0][0] = 1; FOR(i,1,n+1)FOR(j,1,n+1){ if(i %d-%d : %d\n",head,tail,err[tail-1],err[head],err[tail-1]-err[head]); if(err[tail-1] - err[head] > 0)continue; REP(k,j+1){ dp[i][j] += perm[j][k] * dp[i-j][k] % MOD; } dp[i][j] %= MOD; } // REP(i,n+1){ // REP(j,n+1)printf("%3lld",dp[i][j]); // puts(""); // } ll ans = 0; FOR(j,1,n+1)ans = (ans + dp[n][j]) % MOD; printf("%lld\n",ans); return 0; }