#include #define MOD 1000000007 /** * Author : kaspers, Delhi Technological University */ #define mp(x,y) make_pair(x,y) #define trace1(x) cerr << #x << ": " << x << endl; #define trace2(x, y) cerr << #x << ": " << x << " | " << #y << ": " << y << endl; #define trace3(x, y, z) cerr << #x << ": " << x << " | " << #y << ": " << y << " | " << #z << ": " << z << endl; #define pi 3.14159265358979323846264338327950288 #define set0(a) memset(a,0,sizeof(a)) #define setN(a) memset(a,-1,sizeof(a)) using namespace std; //Util Functions template T gcd(T a,T b){if(b==0)return a;else return gcd(b,a%b);} template T power(T a,T b){T result=1;while(b>0){if(b&1) result = result * a;a = a*a;b>>=1;}return result;} template T powerMod(T a,T b,T c){T result =1%c;while(b>0){if(b&1)result = (result * a)%c;a = (a*a)%c;b>>=1;}return result;} typedef long long ll; ll A[100100]; ll dp[1201][1201], n; ll f(int idx, int coll) { if (idx >= n) { return 1; } if (dp[idx][coll] != -1) return dp[idx][coll]; ll i, j, cur, res = 0; cur = coll; j = 1; for (i = idx; i < idx + coll; i++) { if (idx == n) break; if (i == idx || A[i] > A[i - 1]) { res = (res + (cur * f(i + 1, i - idx + 1)) % MOD) % MOD; cur = (cur * (coll - j)) % MOD; j++; } else break; } return dp[idx][coll] = res; } void eval() { setN(dp); int i; ll res; cin>>n; for (i = 0; i < n; i++) { cin>>A[i]; } res = 0; for (i = 0; i < n; i++) { if (i == 0 || A[i] > A[i - 1]) { res = (res + f(i + 1, i + 1)) % MOD; } else break; } cout<>q; while (q--) { eval(); } return 0; }