#include using namespace std; #define ll long long #define lim 10000 #define pb push_back #define S second #define pb push_back #define mp make_pair #define INF 1e18 #define fr(i,j,k) for(ll i=j;i<=k;i++) #define frd(i,j,k) for(ll i=j;i>=k;i--) #define F first #define sd(n) scanf("%lld",&n) #define pd(n) printf("%lld\n",n) #define db double #define mod 1000000007 #define pii pair ll fact[lim+1]; ll inv[lim+1]; bool vval(ll* a,ll i,ll j) { ll c=a[i]; while(i<=j) { if(a[i]0) { if(b&1) { r*=a; r%=c; } b=b>>1; a*=a; a%=c; } return r; } int main() { fact[0]=1; inv[0]=1; for(ll i=1;i<=lim;i++) { fact[i]=fact[i-1]*i; fact[i]%=mod; inv[i]=po(i,mod-2,mod)*inv[i-1]; inv[i]%=mod; } ll n; cin>>n; ll a[n+1]; for(ll i=1;i<=n;i++) cin>>a[i]; ll dp[n+2][n+2]; for(ll i=0;i<=n+1;i++) { for(ll j=0;j<=n+1;j++) dp[i][j]=0; } ll fans=0; ll val[n+1][n+1]; for(ll i=1;i<=n;i++) for(ll j=i;j<=n;j++) { if(j>i) { if(val[i][j-1]==0) { val[i][j]=0; continue; } if(a[j]>a[j-1]) val[i][j]=val[i][j-1]; else val[i][j]=0; } else val[i][j]=1; } for(ll sz=1;sz<=n;sz++) { for(ll i=n;i>=1;i--) { //cout<n) continue; if(!val[i][j]) continue; if(j==n) { dp[i][sz]=1; continue; } ll bb=0; for(ll ss=sz;ss>=1;ss--) { bb=dp[j+1][ss]; bb=fact[sz]*(bb); bb%=mod; bb*=inv[sz-ss]; bb%=mod; dp[i][sz]+=bb; dp[i][sz]%=mod; } dp[i][sz]%=mod; } fans+=dp[1][sz]; fans%=mod; } cout<