#include using namespace std; using ll = long long; using ull = unsigned long long; int f(ll n) { if (n == 0) return 1; return bit_width((ull)n) - popcount((ull)n); } ll solve(const vector &A) { int N = A.size(); if (*min_element(A.begin(), A.end()) < 0) { return -1; } if (N == 1) { if (A[0] == 1) return 0; return 1LL << A[0]; } if (N == 2) { if (A[0] > A[1] + 1) { return -1; } if (A[0] == 0) { if (A[1] >= 1) { return (1LL << A[1]) - 1; } else { return -1; } } if (A[0] == 1 && A[1] == 0) { return 0; } return (1LL << (A[1] + 1)) + (1LL << (A[1] - A[0] + 1)) - 1; } { // L = 0? bool ok = true; for (int i = 0; i < N; i++) { if (A[i] != f(i)) { ok = false; break; } } if (ok) return 0; } { // L = 1? bool ok = true; for (int i = 0; i < N; i++) { if (A[i] != f(i + 1)) { ok = false; break; } } if (ok) return 1; } ll res = -1; { // L is even bool ok = true; for (int i = 0; i < N - 1; i += 2) { if (A[i + 1] != A[i] - 1) { ok = false; } } if (ok) { vector B; for (int i = 0; i < N; i += 2) { B.push_back(A[i] - 1); } ll r = solve(B); if (r > 0) { res = 2 * r; } if (r == 0 && N <= 4) { res = 4; } } } { // L is odd bool ok = true; for (int i = 1; i < N - 1; i += 2) { if (A[i + 1] != A[i] - 1) { ok = false; } } if (ok) { vector B; B.push_back(A[0]); for (int i = 1; i < N; i += 2) { B.push_back(A[i] - 1); } ll r = solve(B); if (r > 0) { res = 2 * r + 1; } if (r == 0 && N <= 3) { res = 5; } } } return res; } int main() { int T; cin >> T; while (T--) { int N; cin >> N; vector A(N); for (int i = 0; i < N; i++) { cin >> A[i]; } cout << solve(A) << '\n'; } }