#include <bits/stdc++.h>
using namespace std;
const int N = 1e3 + 5;
const int MAX = 1e6 + 5;
const long long M = 1e9 + 7;
int tc;
int n, k[N];
long long pre[N];
long long fac[MAX], inv[MAX];
long long modpow(long long x, long long y, long long p) {
long long ret = 1;
while (y > 0) {
if (y % 2 == 1) {
ret = (ret * x) % M;
}
y /= 2;
x = (x * x) % M;
}
return ret;
}
long long C(long long a, long long b) {
if (a < b) return 0;
long long ret = (fac[a] * inv[b]) % M;
ret = (ret * inv[a - b]) % M;
return ret;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
fac[0] = inv[0] = 1;
for (int i = 1; i < MAX; i++) {
fac[i] = (i * fac[i - 1]) % M;
inv[i] = modpow(fac[i], M - 2, M);
}
cin >> tc;
for (int tt = 1; tt <= tc; tt++) {
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> k[i];
pre[i] = k[i] + pre[i - 1];
}
long long res = 1;
for (int i = n; i >= 1; i--) {
res = (res * C(pre[i] - 1, k[i] - 1)) % M;
}
cout << "Case " << tt << ": ";
cout << res << '\n';
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IE4gPSAxZTMgKyA1Owpjb25zdCBpbnQgTUFYID0gMWU2ICsgNTsKY29uc3QgbG9uZyBsb25nIE0gPSAxZTkgKyA3OwoKaW50IHRjOwppbnQgbiwga1tOXTsKbG9uZyBsb25nIHByZVtOXTsKbG9uZyBsb25nIGZhY1tNQVhdLCBpbnZbTUFYXTsKCmxvbmcgbG9uZyBtb2Rwb3cobG9uZyBsb25nIHgsIGxvbmcgbG9uZyB5LCBsb25nIGxvbmcgcCkgewogICAgbG9uZyBsb25nIHJldCA9IDE7CiAgICB3aGlsZSAoeSA+IDApIHsKICAgICAgICBpZiAoeSAlIDIgPT0gMSkgewogICAgICAgICAgICByZXQgPSAocmV0ICogeCkgJSBNOwogICAgICAgIH0KICAgICAgICB5IC89IDI7CiAgICAgICAgeCA9ICh4ICogeCkgJSBNOwogICAgfQogICAgcmV0dXJuIHJldDsKfQoKbG9uZyBsb25nIEMobG9uZyBsb25nIGEsIGxvbmcgbG9uZyBiKSB7CiAgICBpZiAoYSA8IGIpIHJldHVybiAwOwogICAgbG9uZyBsb25nIHJldCA9IChmYWNbYV0gKiBpbnZbYl0pICUgTTsKICAgIHJldCA9IChyZXQgKiBpbnZbYSAtIGJdKSAlIE07CiAgICByZXR1cm4gcmV0Owp9CgppbnQgbWFpbigpIHsgCiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsKICAgIGNvdXQudGllKDApOwoKICAgIGZhY1swXSA9IGludlswXSA9IDE7CiAgICBmb3IgKGludCBpID0gMTsgaSA8IE1BWDsgaSsrKSB7CiAgICAgICAgZmFjW2ldID0gKGkgKiBmYWNbaSAtIDFdKSAlIE07CiAgICAgICAgaW52W2ldID0gbW9kcG93KGZhY1tpXSwgTSAtIDIsIE0pOwogICAgfQogICAgY2luID4+IHRjOwogICAgZm9yIChpbnQgdHQgPSAxOyB0dCA8PSB0YzsgdHQrKykgewogICAgICAgIGNpbiA+PiBuOwogICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewogICAgICAgICAgICBjaW4gPj4ga1tpXTsKICAgICAgICAgICAgcHJlW2ldID0ga1tpXSArIHByZVtpIC0gMV07CiAgICAgICAgfQogICAgICAgIGxvbmcgbG9uZyByZXMgPSAxOwogICAgICAgIGZvciAoaW50IGkgPSBuOyBpID49IDE7IGktLSkgewogICAgICAgICAgICByZXMgPSAocmVzICogQyhwcmVbaV0gLSAxLCBrW2ldIC0gMSkpICUgTTsKICAgICAgICB9CiAgICAgICAgY291dCA8PCAiQ2FzZSAiIDw8IHR0IDw8ICI6ICI7CiAgICAgICAgY291dCA8PCByZXMgPDwgJ1xuJzsKICAgIH0KCiAgICByZXR1cm4gMDsKfQ==