#include using namespace std; typedef long long ll; typedef long double ld; typedef complex pt; #define fi first #define se second #define pb push_back #define mp make_pair const ld TAU=2*acos(-1); #define int ll const int P=1e9+7; const int N=1202; int powq(int x,int e) { if(!e) return 1; if(e&1) return powq(x,e-1)*x%P; x=powq(x,e>>1); return x*x%P; } int inv(int x) { return powq(x,P-2); } int F[N],iF[N],C[N][N]; int32_t main() { F[0]=1; for(int i=1;i>n; static int m[N]; for(int i=0;i>m[i]; m[n]=n+7; static int f[N][N]; f[n][0]=1; for(int i=n;--i>=0;) { for(int k=1;k<=n-i;k++) { for(int j=0;j<=n-i-k && j<=k;j++) { f[i][k]+=f[i+k][j]*C[k][j]%P; } f[i][k]%=P; // fprintf(stderr,"f[%lld][%lld] = %lld\n",i,k,f[i][k]); if(m[i+k-1]>=m[i+k]) break; } } cout<