#include "bits/stdc++.h" using namespace std; const int N = 1205; const int mod = 1e9 + 7; int n; int arr[N]; int rgt[N]; int fac[N]; int inv[N]; int dp[N][N]; int solve(int last , int pos){ if(pos > n){ return inv[last]; } if(dp[last][pos] != -1){ return dp[last][pos]; } long long res = 0; for(int i = pos ; i <= min(rgt[pos] , last + pos - 1) ; ++i){ res += (((1LL * fac[i - pos + 1] * solve(i - pos + 1 , i + 1)) % mod) * inv[last - (i - pos + 1)]) % mod; } return dp[last][pos] = res % mod; } int main(){ scanf("%d" , &n); for(int i = 1 ; i <= n ; ++i){ scanf("%d" , arr + i); } rgt[n] = n; for(int i = n - 1 ; i >= 1 ; --i){ if(arr[i + 1] > arr[i]){ rgt[i] = rgt[i + 1]; } else{ rgt[i] = i; } } fac[0] = 1; for(int i = 1 ; i <= n ; ++i){ fac[i] = (1LL * fac[i - 1] * i) % mod; } inv[0] = 1; inv[1] = 1; for(int i = 2 ; i <= n ; ++i){ inv[i] = ((-1LL * (mod / i) * inv[mod % i]) % mod) + mod; } for(int i = 2 ; i <= n ; ++i){ inv[i] = (1LL * inv[i - 1] * inv[i]) % mod; } memset(dp , -1 , sizeof(dp)); int ans = 0; for(int i = 1 ; i <= rgt[1] ; ++i){ ans += (1LL * fac[i] * solve(i , i + 1)) % mod; if(ans >= mod){ ans -= mod; } } printf("%d\n" , ans); }