#include <bits/stdc++.h>
using namespace std;
#define int              long long int
#define double           long double
#define print(a)         for(auto x : a) cout << x << " "; cout << endl




//_ ***************************** START Below *******************************




const int MOD = 1000000007;
const int N = 3e5+9;
const int INF = 2e9+1;
const int LINF = 2000000000000000001;
const int MAX_VAL = 5000;

int countArrays(vector<int> a) {
    int n = a.size();
    if (n == 0) return 0;

    auto getDigitSum = [](int x) {
        int sum = 0;
        x = abs(x); // Safe guard just in case
        while (x > 0) {
            sum += x % 10;
            x /= 10;
        }
        return sum;
    };

    vector<int> digitSum(MAX_VAL + 1);
    for (int i = 1; i <= MAX_VAL; ++i) {
        digitSum[i] = getDigitSum(i);
    }

    vector<int> dp(MAX_VAL + 1, 0);

    for (int i = 1; i <= MAX_VAL; ++i) {
        if (digitSum[i] == a[0]) {
            dp[i] = 1;
        }
    }

    for (int i = 1; i < n; ++i) {
        vector<int> pref(MAX_VAL + 1, 0);
        
        pref[1] = dp[1];
        for (int j = 2; j <= MAX_VAL; ++j) {
            pref[j] = (pref[j - 1] + dp[j]) % MOD;
        }

        for (int j = 1; j <= MAX_VAL; ++j) {
            if (digitSum[j] == a[i]) {
                dp[j] = pref[j];
            } else {
                dp[j] = 0;
            }
        }
    }

    int ways = 0;
    for (int i = 1; i <= MAX_VAL; ++i) {
        ways = (ways + dp[i]) % MOD;
    }

    return ways;
}

// int countArrays(vector<int> a) {
//     int n = a.size();
//     if (n == 0) return 0;

//     auto getDigitSum = [](int x) {
//         int sum = 0;
//         while (x > 0) {
//             sum += x % 10;
//             x /= 10;
//         }
//         return sum;
//     };

//     vector<int> digitSum(MAX_VAL + 1);
//     for (int i = 0; i <= MAX_VAL; ++i) {
//         digitSum[i] = getDigitSum(i);
//     }

//     vector<int> dp(MAX_VAL + 1, 0);

//     for (int i = 0; i <= MAX_VAL; ++i) {
//         if (digitSum[i] == a[0]) {
//             dp[i] = 1;
//         }
//     }

//     for (int i = 1; i < n; ++i) {
//         vector<int> pref(MAX_VAL + 1, 0);
//         pref[0] = dp[0];
        
//         for (int j = 1; j <= MAX_VAL; ++j) {
//             pref[j] = (pref[j - 1] + dp[j]) % MOD;
//         }

//         for (int j = 0; j <= MAX_VAL; ++j) {
//             if (digitSum[j] == a[i]) {
//                 dp[j] = pref[j];
//             } else {
//                 dp[j] = 0;
//             }
//         }
//     }

//     int ways = 0;
//     for (int i = 0; i <= MAX_VAL; ++i) {
//         ways = (ways + dp[i]) % MOD;
//     }

//     return ways;
// }








void solve() {
    
	int n;
	cin >> n;
	
	vector<int> a(n);
	for(int i=0; i<n; i++) cin >> a[i];
	
	cout << countArrays(a) << endl;


}





int32_t main() {
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

    int t = 1;
    cin >> t;
    while (t--) {
        solve();
    }

    return 0;
}