#include #define M 1000000007 #define MAX 102 using namespace std; int A[MAX]; int vis[MAX][132][132]; int dp[MAX][132][132]; int tc; int f(int idx, int prev, int add) { if ( idx == MAX - 2 ) return 1; if ( vis[idx][prev][add] == tc ) return dp[idx][prev][add]; vis[idx][prev][add] = tc; int new_val = A[idx] + add; int ans = 0; for ( int i = 0; i <= min(new_val, prev); i++ ) { ans += f(idx + 1, new_val - i, i); if ( ans >= M ) ans -= M; } dp[idx][prev][add] = ans; return ans; } int main() { int n, t; cin >> t; assert(t >= 1 && t <= 5); for ( tc = 1; tc <= t; tc++ ) { cin >> n; assert(n >= 1 && n <= 50); memset(A, 0, sizeof(A)); for ( int i = 0; i < n; i++ ) { cin >> A[i]; assert(A[i] >= 0 && A[i] <= 50); } cout << f(0, 0, 0) << endl; } return 0; }