#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define PB push_back
#define FI first
#define SE second
#define MP make_pair
#define ALL(cont) cont.begin(), cont.end()
#define MOD 1000000007ll
#define SIZE 100100ll
vector<ll>divisors[SIZE];
void divisorscalc()
{
for (ll i = 2; i < SIZE; i++)
{
for (ll j = i; j < SIZE; j += i)
divisors[j].PB(i);
}
}
ll mexer(unordered_set<ll>&s)
{
ll x = 0;
while (s.find(x) != s.end())
x++;
return x;
}
ll memo[SIZE];
void grundy(ll m)
{
if (memo[m] != -1)
return;
unordered_set<ll>mex;
for (auto it : divisors[m])
{
if (memo[m / it] == -1)
grundy(m / it);
if (it % 2 == 0)
mex.insert(0);
else
mex.insert(memo[m / it]);
}
memo[m] = mexer(mex);
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
divisorscalc();
for (ll i = 0; i < SIZE; i++)
memo[i] = -1;
memo[0] = 0;
memo[1] = 0;
for (ll i = 2; i < SIZE; i++)
{
if (memo[i] == -1)
grundy(i);
}
int t, n, m;
cin >> t;
while (t--)
{
cin >> n;
int arr[n];
int res = 0;
for (int i = 0; i < n; i++)
{
cin >> arr[i];
res ^= memo[arr[i]];
}
if (res == 0)
cout << 2 << endl;
else
cout << 1 << endl;
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBQQiBwdXNoX2JhY2sKI2RlZmluZSBGSSBmaXJzdAojZGVmaW5lIFNFIHNlY29uZAojZGVmaW5lIE1QIG1ha2VfcGFpcgojZGVmaW5lIEFMTChjb250KSBjb250LmJlZ2luKCksIGNvbnQuZW5kKCkKI2RlZmluZSBNT0QgMTAwMDAwMDAwN2xsCiNkZWZpbmUgU0laRSAxMDAxMDBsbAoKdmVjdG9yPGxsPmRpdmlzb3JzW1NJWkVdOwoKdm9pZCBkaXZpc29yc2NhbGMoKQp7CiAgICBmb3IgKGxsIGkgPSAyOyBpIDwgU0laRTsgaSsrKQogICAgewogICAgICAgIGZvciAobGwgaiA9IGk7IGogPCBTSVpFOyBqICs9IGkpCiAgICAgICAgICAgIGRpdmlzb3JzW2pdLlBCKGkpOwogICAgfQp9CgpsbCBtZXhlcih1bm9yZGVyZWRfc2V0PGxsPiZzKQp7CiAgICBsbCB4ID0gMDsKICAgIHdoaWxlIChzLmZpbmQoeCkgIT0gcy5lbmQoKSkKICAgICAgICB4Kys7CiAgICByZXR1cm4geDsKfQoKbGwgbWVtb1tTSVpFXTsKdm9pZCBncnVuZHkobGwgbSkKewogICAgaWYgKG1lbW9bbV0gIT0gLTEpCiAgICAgICAgcmV0dXJuOwogICAgdW5vcmRlcmVkX3NldDxsbD5tZXg7CiAgICBmb3IgKGF1dG8gaXQgOiBkaXZpc29yc1ttXSkKICAgIHsKICAgICAgICBpZiAobWVtb1ttIC8gaXRdID09IC0xKQogICAgICAgICAgICBncnVuZHkobSAvIGl0KTsKICAgICAgICBpZiAoaXQgJSAyID09IDApCiAgICAgICAgICAgIG1leC5pbnNlcnQoMCk7CiAgICAgICAgZWxzZQogICAgICAgICAgICBtZXguaW5zZXJ0KG1lbW9bbSAvIGl0XSk7CiAgICB9CiAgICBtZW1vW21dID0gbWV4ZXIobWV4KTsKfQoKCmludCBtYWluKCkKewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKI2lmbmRlZiBPTkxJTkVfSlVER0UKICAgIGZyZW9wZW4oImlucHV0LnR4dCIsICJyIiwgc3RkaW4pOwogICAgZnJlb3Blbigib3V0cHV0LnR4dCIsICJ3Iiwgc3Rkb3V0KTsKI2VuZGlmCgoKCgogICAgZGl2aXNvcnNjYWxjKCk7CiAgICBmb3IgKGxsIGkgPSAwOyBpIDwgU0laRTsgaSsrKQogICAgICAgIG1lbW9baV0gPSAtMTsKICAgIG1lbW9bMF0gPSAwOwogICAgbWVtb1sxXSA9IDA7CiAgICBmb3IgKGxsIGkgPSAyOyBpIDwgU0laRTsgaSsrKQogICAgewogICAgICAgIGlmIChtZW1vW2ldID09IC0xKQogICAgICAgICAgICBncnVuZHkoaSk7CiAgICB9CgogICAgaW50IHQsIG4sIG07CiAgICBjaW4gPj4gdDsKICAgIHdoaWxlICh0LS0pCiAgICB7CiAgICAgICAgY2luID4+IG47CiAgICAgICAgaW50IGFycltuXTsKICAgICAgICBpbnQgcmVzID0gMDsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIGNpbiA+PiBhcnJbaV07CiAgICAgICAgICAgIHJlcyBePSBtZW1vW2FycltpXV07CiAgICAgICAgfQogICAgICAgIGlmIChyZXMgPT0gMCkKICAgICAgICAgICAgY291dCA8PCAyIDw8IGVuZGw7CiAgICAgICAgZWxzZQogICAgICAgICAgICBjb3V0IDw8IDEgPDwgZW5kbDsKICAgIH0KCgoKICAgIHJldHVybiAwOwoKCn0=