#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
int memo[1000100];
int mexer(unordered_set<int>&mex)
{
int pr = 0;
while(mex.find(pr)!=mex.end())
pr++;
return pr;
}
void getdivisors(int m, vector<int>&div)
{
// div WILL HAVE ALL DIVISORS IN SORTED ORDER EXCEPT 1 AMD m
vector<int>sorted;
for(int i=2;i*i<=m;i++)
{
if(m%i==0)
{
if(i*i==m)
div.PB(i);
else
{
div.PB(i);
sorted.PB(m/i);
}
}
}
int n = sorted.size();
for(int i=n-1;i>-1;i--)
div.PB(sorted[i]);
}
void grundy(int m)
{
if(memo[m]!=-1)
return;
vector<int>div;
getdivisors(m,div);
// PRIME NUBERS GRUNDY 0 AS NO REACHABLE STATE SO MEX(PHI) = 0
if(div.size()==0)
{
memo[m]=0;
return;
}
unordered_set<int>mex;
// INTO it PILES EACH OF SIZE m/it
for(auto it:div)
{
// EVEN NUMBER OF XORS RESULTING IN 0
if(it%2==0)
{
mex.insert(0);
}
else
{
if(memo[m/it]==-1)
grundy(m/it);
mex.insert(memo[m/it]);
}
}
memo[m] = mexer(mex);
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
for(int i=0;i<1000100;i++)
memo[i] = -1;
memo[0] = 0;
memo[1] = 0;
// for(int i=0;i<1000100;i++)
// grundy(i);
// for(int i=0;i<1000100;i++)
// cout<<i<<": "<<memo[i]<<endl;
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];
if(memo[arr[i]]==-1)
grundy(arr[i]);
res ^= memo[arr[i]];
}
if(res==0)
cout<<2<<endl;
else
cout<<1<<endl;
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBQQiBwdXNoX2JhY2sKI2RlZmluZSBGSSBmaXJzdAojZGVmaW5lIFNFIHNlY29uZAojZGVmaW5lIE1QIG1ha2VfcGFpcgojZGVmaW5lIEFMTChjb250KSBjb250LmJlZ2luKCksIGNvbnQuZW5kKCkKI2RlZmluZSBNT0QgMTAwMDAwMDAwN2xsCgppbnQgbWVtb1sxMDAwMTAwXTsKCmludCBtZXhlcih1bm9yZGVyZWRfc2V0PGludD4mbWV4KQp7CiAgICBpbnQgcHIgPSAwOwogICAgd2hpbGUobWV4LmZpbmQocHIpIT1tZXguZW5kKCkpCiAgICAgICAgcHIrKzsKICAgIHJldHVybiBwcjsKfQoKdm9pZCBnZXRkaXZpc29ycyhpbnQgbSwgdmVjdG9yPGludD4mZGl2KQp7CiAgICAvLyBkaXYgV0lMTCBIQVZFIEFMTCBESVZJU09SUyBJTiBTT1JURUQgT1JERVIgRVhDRVBUIDEgQU1EIG0KICAgIHZlY3RvcjxpbnQ+c29ydGVkOwogICAgZm9yKGludCBpPTI7aSppPD1tO2krKykKICAgIHsKICAgICAgICBpZihtJWk9PTApCiAgICAgICAgewogICAgICAgICAgICBpZihpKmk9PW0pCiAgICAgICAgICAgICAgICBkaXYuUEIoaSk7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZGl2LlBCKGkpOwogICAgICAgICAgICAgICAgc29ydGVkLlBCKG0vaSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBpbnQgbiA9IHNvcnRlZC5zaXplKCk7CiAgICBmb3IoaW50IGk9bi0xO2k+LTE7aS0tKQogICAgICAgIGRpdi5QQihzb3J0ZWRbaV0pOwp9Cgp2b2lkIGdydW5keShpbnQgbSkKewogICAgaWYobWVtb1ttXSE9LTEpCiAgICAgICAgcmV0dXJuOwogICAgCiAgICB2ZWN0b3I8aW50PmRpdjsKICAgIGdldGRpdmlzb3JzKG0sZGl2KTsKICAgCiAgICAvLyBQUklNRSBOVUJFUlMgR1JVTkRZIDAgQVMgTk8gUkVBQ0hBQkxFIFNUQVRFIFNPIE1FWChQSEkpID0gMAogICAgaWYoZGl2LnNpemUoKT09MCkKICAgIHsKICAgICAgICBtZW1vW21dPTA7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgCiAgICB1bm9yZGVyZWRfc2V0PGludD5tZXg7CgogICAgLy8gSU5UTyBpdCBQSUxFUyBFQUNIIE9GIFNJWkUgbS9pdAogICAgZm9yKGF1dG8gaXQ6ZGl2KQogICAgewogICAgICAgIAogICAgICAgIC8vIEVWRU4gTlVNQkVSIE9GIFhPUlMgUkVTVUxUSU5HIElOIDAKICAgICAgICBpZihpdCUyPT0wKQogICAgICAgIHsKICAgICAgICAgICAgbWV4Lmluc2VydCgwKTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgaWYobWVtb1ttL2l0XT09LTEpCiAgICAgICAgICAgICAgICBncnVuZHkobS9pdCk7CiAgICAgICAgICAgIG1leC5pbnNlcnQobWVtb1ttL2l0XSk7CiAgICAgICAgfQogICAgfQogICAgbWVtb1ttXSA9IG1leGVyKG1leCk7Cn0KCmludCBtYWluKCkKewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOwojaWZuZGVmIE9OTElORV9KVURHRQogICAgZnJlb3BlbigiaW5wdXQudHh0IiwgInIiLCBzdGRpbik7CiAgICBmcmVvcGVuKCJvdXRwdXQudHh0IiwgInciLCBzdGRvdXQpOwojZW5kaWYKCgogICAgZm9yKGludCBpPTA7aTwxMDAwMTAwO2krKykKICAgICAgICBtZW1vW2ldID0gLTE7CiAgICBtZW1vWzBdID0gMDsKICAgIG1lbW9bMV0gPSAwOwoKICAgIC8vIGZvcihpbnQgaT0wO2k8MTAwMDEwMDtpKyspCiAgICAvLyAgICAgZ3J1bmR5KGkpOwoKICAgIC8vIGZvcihpbnQgaT0wO2k8MTAwMDEwMDtpKyspCiAgICAvLyAgICAgY291dDw8aTw8IjogIjw8bWVtb1tpXTw8ZW5kbDsKCiAgICBpbnQgdCxuLG07CiAgICBjaW4+PnQ7CiAgICB3aGlsZSh0LS0pCiAgICB7CiAgICAgICAgY2luPj5uOwogICAgICAgIGludCBhcnJbbl07CiAgICAgICAgaW50IHJlcyA9IDA7CiAgICAgICAgZm9yKGludCBpPTA7aTxuO2krKykKICAgICAgICB7CiAgICAgICAgICAgIGNpbj4+YXJyW2ldOwogICAgICAgICAgICBpZihtZW1vW2FycltpXV09PS0xKQogICAgICAgICAgICAgICAgZ3J1bmR5KGFycltpXSk7CiAgICAgICAgICAgIHJlcyBePSBtZW1vW2FycltpXV07CiAgICAgICAgfQogICAgICAgIGlmKHJlcz09MCkKICAgICAgICAgICAgY291dDw8Mjw8ZW5kbDsKICAgICAgICBlbHNlCiAgICAgICAgICAgIGNvdXQ8PDE8PGVuZGw7CiAgICB9CgoKCiAgICByZXR1cm4gMDsKCgp9