#include #include using namespace std; int readPosIntLn(){ int x=0; int cnt=0; int fi=-1; while(true){ char g=getchar(); if('0'<=g && g<='9'){ x*=10; x+=g-'0'; if(cnt==0){ fi=g-'0'; } cnt++; assert(!(cnt>10 || ( cnt==10 && fi>1) )); } else if(g=='\n'){ return x; } else { assert(false); } } } long long readPosLongLn(){ long long x=0; int cnt=0; int fi=-1; while(true){ char g=getchar(); if('0'<=g && g<='9'){ x*=10; x+=g-'0'; if(cnt==0){ fi=g-'0'; } cnt++; assert(!(cnt>19 || ( cnt==18 && fi>1) )); } else if(g=='\n'){ return x; } else { assert(false); } } } int readPosIntSpace(){ int x=0; int cnt=0; int fi=-1; while(true){ char g=getchar(); if('0'<=g && g<='9'){ x*=10; x+=g-'0'; if(cnt==0){ fi=g-'0'; } cnt++; assert(!(cnt>10 || ( cnt==10 && fi>1) )); } else if(g==' '){ return x; } else { assert(false); } } } long long readPosLongSpace(){ int x=0; int cnt=0; int fi=-1; while(true){ char g=getchar(); if('0'<=g && g<='9'){ x*=10; x+=g-'0'; if(cnt==0){ fi=g-'0'; } cnt++; assert(!(cnt>19 || ( cnt==18 && fi>1) )); } else if(g==' '){ return x; } else { assert(false); } } } int T; int n; int arr[1111]; long long mod=1000000007; long long dp[1111][1111]; int main(){ //cin>>T; T=readPosIntLn(); assert(1<=T && T<=2000); int sm=0; while(T--){ //cin>>n; n=readPosIntLn(); sm+=n; assert(1<=sm && sm<=10000); assert(1<=n && n<=1000); for(int i=1;i<=n;i++){ //cin>>arr[i]; if(i==n){ arr[i]=readPosIntLn(); } else { arr[i]=readPosIntSpace(); } assert(1<=arr[i] && arr[i]<=10); } for(int i=0;i<=n;i++){ for(int j=0;j<(1<<10);j++){ dp[i][j]=0; } } if(n==1){ cout<<10<l)continue; int from,to; to=A[arr[i+1]-1]; if(arr[i+1]==1){ from=0; } else { from=A[arr[i+1]-2]+1; } for(int k=from;k<=to;k++){ if(k==0 && i==0)continue; if(arr[i+1]==l){ dp[i+1][j+ (1<