/*
* D. Aragorn is Gone | SRBD Code Contest - 2024 (Round 1)
* Author: Sohom Sahaun | @sohomsahaun | CF: sahaun
*/
#include <bits/stdc++.h>
using namespace std;
#define FAST ios_base::sync_with_stdio(false);cin.tie(NULL);
using ll = long long;
const ll MOD = 1000000007;
const int MX = 105;
ll dp[MX][MX][2*MX];
ll a[MX];
ll n, groups;
ll solve(ll ind, ll rem, ll mod) {
if (ind > n) {
if ((rem == 0) && (mod == groups)) return 1;
return 0;
}
ll& curr = dp[ind][rem][mod];
if (curr != -1) return curr;
curr = solve(ind+1, rem, mod);
if (rem > 0) {
ll m = (mod - groups + a[ind]) % groups;
curr = (curr + solve(ind+1, rem-1, m + groups)) % MOD;
}
return curr;
}
void clear() {
ll i, j, k;
for (i = 0; i <= n+1; ++i) {
for (j = 0; j <= n+1; ++j) {
for (k = 0; k <= 2*n+1; ++k) dp[i][j][k] = -1;
}
}
}
int main() {
FAST;
int tc = 1, ti;
cin >> tc;
for (ti = 1; ti <= tc; ++ti) {
ll i, ans;
cin >> n;
for (i = 1; i <= n; ++i) cin >> a[i];
ans = 0;
for (i = 1; i <= n; ++i) {
clear();
groups = i;
ans = (ans + solve(1, groups, groups)) % MOD;
}
cout << "Case " << ti << ": ";
cout << ans << "\n";
}
return 0;
}
LyoKICogIEQuIEFyYWdvcm4gaXMgR29uZSB8IFNSQkQgQ29kZSBDb250ZXN0IC0gMjAyNCAoUm91bmQgMSkKICogIEF1dGhvcjogU29ob20gU2FoYXVuIHwgQHNvaG9tc2FoYXVuIHwgQ0Y6IHNhaGF1bgogKi8KIAojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgRkFTVCBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTtjaW4udGllKE5VTEwpOwp1c2luZyBsbCA9IGxvbmcgbG9uZzsKCmNvbnN0IGxsIE1PRCA9IDEwMDAwMDAwMDc7CmNvbnN0IGludCBNWCA9IDEwNTsKbGwgZHBbTVhdW01YXVsyKk1YXTsKbGwgYVtNWF07CmxsIG4sIGdyb3VwczsKCmxsIHNvbHZlKGxsIGluZCwgbGwgcmVtLCBsbCBtb2QpIHsKICBpZiAoaW5kID4gbikgewogICAgaWYgKChyZW0gPT0gMCkgJiYgKG1vZCA9PSBncm91cHMpKSByZXR1cm4gMTsKICAgIHJldHVybiAwOwogIH0KCiAgbGwmIGN1cnIgPSBkcFtpbmRdW3JlbV1bbW9kXTsKICBpZiAoY3VyciAhPSAtMSkgcmV0dXJuIGN1cnI7CgogIGN1cnIgPSBzb2x2ZShpbmQrMSwgcmVtLCBtb2QpOwoKICBpZiAocmVtID4gMCkgewogICAgbGwgbSA9IChtb2QgLSBncm91cHMgKyBhW2luZF0pICUgZ3JvdXBzOwogICAgY3VyciA9IChjdXJyICsgc29sdmUoaW5kKzEsIHJlbS0xLCBtICsgZ3JvdXBzKSkgJSBNT0Q7CiAgfQoKICByZXR1cm4gY3VycjsKfQoKdm9pZCBjbGVhcigpIHsKICBsbCBpLCBqLCBrOwogIGZvciAoaSA9IDA7IGkgPD0gbisxOyArK2kpIHsKICAgIGZvciAoaiA9IDA7IGogPD0gbisxOyArK2opIHsKICAgICAgZm9yIChrID0gMDsgayA8PSAyKm4rMTsgKytrKSBkcFtpXVtqXVtrXSA9IC0xOwogICAgfQogIH0KfQoKaW50IG1haW4oKSB7CiAgRkFTVDsKICAKICBpbnQgdGMgPSAxLCB0aTsKICBjaW4gPj4gdGM7CgogIGZvciAodGkgPSAxOyB0aSA8PSB0YzsgKyt0aSkgewogICAgbGwgaSwgYW5zOwogICAgY2luID4+IG47CgogICAgZm9yIChpID0gMTsgaSA8PSBuOyArK2kpIGNpbiA+PiBhW2ldOwogICAgCiAgICBhbnMgPSAwOwogICAgZm9yIChpID0gMTsgaSA8PSBuOyArK2kpIHsKICAgICAgY2xlYXIoKTsKICAgICAgZ3JvdXBzID0gaTsKICAgICAgYW5zID0gKGFucyArIHNvbHZlKDEsIGdyb3VwcywgZ3JvdXBzKSkgJSBNT0Q7CiAgICB9CgogICAgY291dCA8PCAiQ2FzZSAiIDw8IHRpIDw8ICI6ICI7CiAgICBjb3V0IDw8IGFucyA8PCAiXG4iOwogIH0KCiAgcmV0dXJuIDA7Cn0K