#include <bits/stdc++.h> using namespace std; #define ull unsigned long long #define ll long long #define mod 1000000007 #define fi first #define se second #define pb push_back #define mkp make_pair #define PI acos(-1.0) const int N=1e5 + 5; const int M=1e6 + 5; ll mod_exp(ll cur,ll power) { ll res=1; while(power>0){ if(power%2==0){ cur=(cur*cur)%mod; } else{ res=(res*cur)%mod; cur=(cur*cur)%mod; } power/=2; } return res; } ll fun(ll a , ll b) { if(a>=0) return a%b; a=-a; a=a%b; return (b-a)%b; } bool vis[N]; vector <int> g[N]; void dfs(int s) { vis[s]=true; for(int i=0;i<g[s].size();i++){ if(!vis[g[s][i]]) dfs(g[s][i]); } } int main() { ios_base::sync_with_stdio(false); int tt; cin>>tt; int i,j; bool is[M]; for(i=0;i<M;i++){ is[i]=true; } is[0]=is[1]=false; for(i=2;i*i<M;i++){ if(!is[i]) continue; for(j=2*i;j<M;j+=i){ is[j]=false; } } vector <int> v[M]; for(i=2;i<M;i++){ if(!is[i]) continue; for(j=i;j<M;j+=i){ v[j].pb(i); } } while(tt--){ int n,s[N],id[M]; cin>>n; for(i=0;i<n;i++){ cin>>s[i]; } ll cnt=0; bool dn[M]; for(i=0;i<M;i++){ dn[i]=false; id[i]=-1; } for(i=0;i<n;i++){ bool ok=true; for(j=0;j<v[s[i]].size();j++){ // cout << v[s[i]][j] << " "; if(dn[v[s[i]][j]]){ // cout << id[v[s[i]][j]] << " " << i << endl; ok=false; g[id[v[s[i]][j]]].pb(i); g[i].pb(id[v[s[i]][j]]); } else{ dn[v[s[i]][j]]=true; id[v[s[i]][j]]=i; } } // cout << endl; //if(ok) cnt++; } for(i=0;i<n;i++) vis[i]=false; for(i=0;i<n;i++){ if(!vis[i]){ cnt++; dfs(i); } } //cout << cnt << endl; ll ans = mod_exp(2,cnt); ans=fun(ans-2,mod); cout << ans << endl; for(i=0;i<n;i++) g[i].clear(); } return 0; }