#include<iostream>
#include<cstdio>
#include<cmath>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long LL;
const double eps=1e-8;
const int MAXN=505;
const int MAXP=105;
int vis[MAXN];
int prime[MAXP];
int a[MAXP][MAXN];
void sieve(int n)
{
int m=(int)sqrt(n+0.5);
memset(vis,0,sizeof(vis));
for(int i=2;i<=m;++i)
{
if(!vis[i])
{
for(int j=i*i;j<=n;j+=i)
{
vis[j]=1;
}
}
}
}
int gen_primes(int n)
{
sieve(n);
int c=0;
for(int i=2;i<=n;++i)
{
if(!vis[i]) prime[c++]=i;
}
return c;
}
void Gauss(int m,int n)
{
int i=0,j=0,k,r,u;
while(i<m&&j<n)
{
r=i;
for(k=i;k<m;++k) if(a[k][j]) {r=k;break;}
if(a[r][j])
{
if(r!=i) for(k=0;k<=n;++k) swap(a[r][k],a[i][k]);
for(u=i+1;u<m;++u)
{
if(a[u][j])
{
for(k=i;k<=n;++k) a[u][k]^=a[i][k];
}
}
++i;
}
++j;
}
}
int solve(int m,int n)
{
Gauss(m,n);
int r=0;
bool flag;
for(int i=0;i<m;++i)
{
flag=false;
for(int j=0;j<n;++j)
{
if(a[i][j])
{
r++;
flag=true;
break;
}
}
if(!flag) break;
}
return r;
}
int main()
{
int m=gen_primes(500);
int T;
scanf("%d",&T);
while(T--)
{
int n,maxp=0;
LL x;
scanf("%d",&n);
memset(a,0,sizeof(a));
for(int i=0;i<n;++i)
{
scanf("%lld",&x);
for(int j=0;j<m;++j)
{
while(x%prime[j]==0)
{
maxp=max(maxp,j);
x/=prime[j];
a[j][i]^=1;
}
}
}
int r=solve(maxp+1,n);
printf("%lld\n",(1LL<<(n-r))-1);
}
return 0;
}
#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std;
const double eps=1e-8;
const int MAXN=50;
int a[MAXN][MAXN];
int x[MAXN];
char s[15];
void Gauss(int m,int n)
{
for(int i=0;i<m;++i)
{
int r=i;
for(int j=i;j<m;++j)
{
if(a[j][i]) {r=j;break;}
}
if(a[r][i])
{
if(r!=i) for(int j=0;j<=n;++j) swap(a[r][j],a[i][j]);
for(int k=i+1;k<m;++k)
{
if(a[k][i])
{
for(int j=i;j<=n;++j)
a[k][j]^=a[i][j];
}
}
}
}
for(int i=n-1;i>=0;--i)
{
for(int j=i+1;j<n;++j)
{
a[i][n]^=a[j][n]*a[i][j];
}
}
}
int main()
{
for(int i=0;i<5;++i)
{
for(int j=0;j<6;++j)
{
int pos=6*i+j;
a[pos][pos]=1;
if(i>0) a[pos][6*(i-1)+j]=1;
if(i<4) a[pos][6*(i+1)+j]=1;
if(j>0) a[pos][6*i+j-1]=1;
if(j<5) a[pos][6*i+j+1]=1;
}
}
for(int i=0;i<5;++i)
{
scanf("%s",s);
for(int j=0;j<6;++j)
{
a[i*6+j][30]=(int)(s[j]-'0');
a[i*6+j][30]^=1;
}
}
Gauss(30,30);
int cnt=0;
for(int i=0;i<30;++i)
{
if(a[i][30]) cnt++;
}
printf("%d\n",cnt);
for(int i=0;i<30;++i)
{
if(a[i][30])
printf("%d %d\n",i/6+1,i%6+1);
}
return 0;
}