// すべての入力は素数なので, 素数列に含まれる等差数列を調べる. // https://en.wikipedia.org/wiki/Primes_in_arithmetic_progression#Minimal_primes_in_AP // を見ると, N も素数であることから, A_{N-1} <= 10^9 を満たすためには N <= 13 でないといけないことが分かる. #include #define rep(i, n) for (int i = 0; i < (n); i++) using namespace std; using lint = long long; const lint INF = 1LL << 61; void solve() { lint n, p; cin >> n >> p; vector A(n); rep (i, n) cin >> A[i]; lint ans = 0; rep (S, 1 << n) { if (S == 0) continue; lint evenness = INF; for (int T = S;; T = (T - 1) & S) { lint tmp = 0; rep (i, n) { if (S >> i & 1) { tmp += (T >> i & 1 ? 1 : -1) * A[i]; } } evenness = min(evenness, abs(tmp)); if (T == 0) break; } ans = (ans + evenness) % p; } cout << ans << "\n"; } int main() { int t; cin >> t; rep (_, t) { solve(); } return 0; }