#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
int n, m;
int ans;
ll a[15];
int op[15];
ll tmp[15];
// +, -, *: 0, 1, 2
void backtrack(int i) {
if (i == n) {
for (int j = 1; j <= n; j++) tmp[j] = a[j];
// Tính toán các phép nhân trước
for (int j = 1; j <= n - 1; j++) {
if (op[j] == 2) {
for (int k = j; k <= n - 1; k++) {
if (op[k] == 2) {
(tmp[j] *= tmp[k + 1]) %= m;
}
else {
j = k - 1;
break;
}
}
}
}
// Sau đó tính toán các phép cộng, trừ
ll val = tmp[1];
for (int j = 1; j <= n - 1; j++) {
if (op[j] == 0) val += tmp[j + 1];
if (op[j] == 1) val -= tmp[j + 1];
}
val %= m;
val = (val + m) % m;
ans += (val == 0);
return;
}
for (int j = 0; j <= 2; j++) {
op[i] = j;
backtrack(i + 1);
}
} // O(3^n * n)
void solve() {
cin >> n >> m;
for (int i = 1; i <= n; i++) cin >> a[i];
ans = 0;
backtrack(1);
cout << ans << '\n';
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t; cin >> t;
while (t--) {
solve();
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOyAKCnR5cGVkZWYgbG9uZyBsb25nIGxsOyAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKaW50IG4sIG07ICAgCmludCBhbnM7ICAgCmxsIGFbMTVdOyAgIAppbnQgb3BbMTVdOyAgIApsbCB0bXBbMTVdOyAgCi8vICssIC0sICo6IDAsIDEsIDIgCgp2b2lkIGJhY2t0cmFjayhpbnQgaSkgewoJaWYgKGkgPT0gbikgewoJCWZvciAoaW50IGogPSAxOyBqIDw9IG47IGorKykgdG1wW2pdID0gYVtqXTsgICAKCgkJLy8gVMOtbmggdG/DoW4gY8OhYyBwaMOpcCBuaMOibiB0csaw4bubYwoJCWZvciAoaW50IGogPSAxOyBqIDw9IG4gLSAxOyBqKyspIHsKCQkJaWYgKG9wW2pdID09IDIpIHsKCQkJCWZvciAoaW50IGsgPSBqOyBrIDw9IG4gLSAxOyBrKyspIHsKCQkJCQlpZiAob3Bba10gPT0gMikgewoJCQkJCQkodG1wW2pdICo9IHRtcFtrICsgMV0pICU9IG07IAoJCQkJCX0KCQkJCQllbHNlIHsKCQkJCQkJaiA9IGsgLSAxOyAgCgkJCQkJCWJyZWFrOyAgIAoJCQkJCX0KCQkJCX0KCQkJfQoJCX0JCgoJCS8vIFNhdSDEkcOzIHTDrW5oIHRvw6FuIGPDoWMgcGjDqXAgY+G7mW5nLCB0cuG7qwoJCWxsIHZhbCA9IHRtcFsxXTsgICAKCQlmb3IgKGludCBqID0gMTsgaiA8PSBuIC0gMTsgaisrKSB7CgkJCWlmIChvcFtqXSA9PSAwKSB2YWwgKz0gdG1wW2ogKyAxXTsgICAgCgkJCWlmIChvcFtqXSA9PSAxKSB2YWwgLT0gdG1wW2ogKyAxXTsgCgkJfQoKCQl2YWwgJT0gbTsgICAKCQl2YWwgPSAodmFsICsgbSkgJSBtOyAgIAoKCQlhbnMgKz0gKHZhbCA9PSAwKTsgCgoJCXJldHVybjsKCX0KCglmb3IgKGludCBqID0gMDsgaiA8PSAyOyBqKyspIHsKCQlvcFtpXSA9IGo7ICAgCgkJYmFja3RyYWNrKGkgKyAxKTsgICAKCX0KfSAvLyBPKDNebiAqIG4pCgp2b2lkIHNvbHZlKCkgewoJY2luID4+IG4gPj4gbTsgCglmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIGNpbiA+PiBhW2ldOyAgCgoJYW5zID0gMDsgIAoJYmFja3RyYWNrKDEpOwoKCWNvdXQgPDwgYW5zIDw8ICdcbic7IAp9CgoKaW50IG1haW4oKSB7Cglpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IAoJY2luLnRpZShudWxscHRyKTsgIAoJaW50IHQ7IGNpbiA+PiB0OyAgIAoKCXdoaWxlICh0LS0pIHsKCQlzb2x2ZSgpOyAgIAoJfQp9Cg==