//by tzupengwang™ #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef long double ld; typedef pair ii; int n ; int s[ 1500 ] ; const int mod = 1000000007 ; void add( int& x , int y ) { x += y ; if ( x >= mod ) x -= mod ; } int mul( int x , int y ) { return (ll)x * y % mod ; } void init() { scanf( "%d" , &n ) ; for ( int i = 1 ; i <= n ; i ++ ) scanf( "%d" , &s[ i ] ) ; } int dp[ 1500 ][ 1500 ] ; void process() { memset( dp , 0 , sizeof dp ) ; dp[ 1 ][ 1 ] = 1 ; for ( int i = 2 ; i <= n ; i ++ ) { if ( s[ i ] > s[ i - 1 ] ) { dp[ i ][ i ] = 1 ; } else { break ; } } for ( int i = 1 ; i <= n ; i ++ ) { for ( int j = 1 ; j <= i ; j ++ ) if ( dp[ i ][ j ] ) { int co = 1 ; for ( int k = 1 ; i + k <= n && k <= j ; k ++ ) { if ( k > 1 && s[ i + k ] < s[ i + k - 1 ] ) break ; co = mul( co , j - k + 1 ) ; add( dp[ i + k ][ k ] , mul( dp[ i ][ j ] , co ) ) ; } } } int ans = 0 ; for ( int i = 1 ; i <= n ; i ++ ) { add( ans , dp[ n ][ i ] ) ; } printf( "%d\n" , ans ) ; } int main() { /* #ifdef ONLINE_JUDGE freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); #endif int Cases; scanf( "%d" , &Cases ) ; for ( int cases = 1 ; cases <= Cases ; cases ++ ) { */ init() ; process() ; /* } */ return 0 ; }