#include #include using namespace std ; #define MAXN 1207 #define MOD 1000000007 int n ; int a[ MAXN ] ; long long comb[ MAXN ][ MAXN ] ; long long fac[ MAXN ] ; long long dp[ MAXN ][ MAXN ] ; void input ( ) { scanf ( "%d" , &n ) ; int i , j ; for ( i = 1 ; i <= n ; i ++ ) { scanf ( "%d" , &a[ i ] ) ; } comb[ 0 ][ 0 ] = 1 ; fac[ 0 ] = 1 ; for ( i = 1 ; i <= n ; i ++ ) { for ( j = 0 ; j <= i ; j ++ ) { comb[ i ][ j ] = comb[ i - 1 ][ j ] ; if ( j != 0 ) { comb[ i ][ j ] += comb[ i - 1 ][ j - 1 ] ; } comb[ i ][ j ] %= MOD ; } fac[ i ] = ( fac[ i - 1 ] * i ) % MOD ; } } void solve ( ) { int i , j , t ; dp[ n + 1 ][ 0 ] = 1 ; for ( i = n ; i >= 1 ; i -- ) { for ( j = 1 ; j <= ( n - i + 1 ) ; j ++ ) { if ( j != 1 && a[ i + j - 2 ] > a[ i + j - 1 ] ) { break ; } for ( t = 0 ; t <= j ; t ++ ) { dp[ i ][ j ] += ( ( dp[ i + j ][ t ] * ( ( comb[ j ][ t ] * fac[ t ] ) % MOD ) ) % MOD ) ; dp[ i ][ j ] %= MOD ; } } } long long ans = 0 ; for ( i = 1 ; i <= n ; i ++ ) { ans += dp[ 1 ][ i ] ; ans %= MOD ; } printf ( "%lld\n" , ans ) ; } int main ( ) { input ( ) ; solve ( ) ; return 0 ; }