#include<bits/stdc++.h> using namespace std; const int maxn=100010; const int mo=1e9+7; int powmod(int a,int b) { int ans=1; while (b) { if (b&1) ans=(ans*1LL*a)%mo; a=(a*1LL*a)%mo; b>>=1; } return ans; } int f[maxn]; int a[maxn]; vector<int> b[1000010]; int n; int fa(int t) { if (f[t]==t) return t; return f[t]=fa(f[t]); } void Union(int x,int y) { x=fa(x); y=fa(y); if (x!=y) f[x]=y; } int main() { int te; scanf("%d",&te); for (int ca=1;ca<=te;ca++) { scanf("%d",&n); for (int i=1;i<=1000000;i++) b[i].clear(); for (int i=1;i<=n;i++) { scanf("%d",&a[i]); for (int j=2;j*j<=a[i];j++) if (a[i]%j==0) { b[j].push_back(i); while (a[i]%j==0) a[i]/=j; } if (a[i]!=1) b[a[i]].push_back(i); } for (int i=1;i<=n;i++) f[i]=i; for (int i=2;i<=1000000;i++) { for (int j=1;j<b[i].size();j++) Union(b[i][j-1],b[i][j]); } int ans=0; for (int i=1;i<=n;i++) if (f[i]==i) ans++; ans=powmod(2,ans); ans=(ans-2+mo)%mo; printf("%d\n",ans); } return 0; }