#include <bits/stdc++.h> using namespace std; #define int long #define ii pair<int, int> #define iii pair<int, ii> #define vi vector<int> #define pb push_back #define sz(x) (int)x.size() #define all(v) v.begin(), v.end() #define F first #define S second #define rep(i, j, k) for(i=j; i<k; i++) #define sep(i, j, k) for(i=j; i>k; i--) #define ios ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); #define fre freopen("input.txt", "r", stdin);freopen("output.txt", "w", stdout); const int inf = 1e9+7; const int N = 1e6+5; int n, k; int A[N], p[N], vis[N], done[N]; vi v[N], f[N]; void dfs(int i, int is){ if(is==0){ vis[i] = 1; for(auto j: v[A[i]] ) if(!done[j]) dfs(j, 1); } else{ done[i] = 1; for(auto j: f[i]) if(!vis[j]) dfs(j, 0); } } void solve() { int i, j, x=0, y, q, last = 0; cin>>n; rep(i, 0, N) f[i].clear(); memset(done, 0, sizeof done); rep(i, 0, n) cin>>A[i]; memset(vis, 0, sizeof vis); rep(i, 0, n){ for(auto j:v[A[i]]) f[j].pb(i); } int c = 0; rep(i, 0, n){ if(!vis[i]){ dfs(i, 0); c++; } } int ans = 1; rep(i, 1, c) ans = ans*2%inf; ans--; ans = ans*2%inf; cout<<ans<<"\n"; } signed main() { ios int t=1, i, j; rep(i, 2, N){ if(!p[i]){ for(j=i; j<N; j+= i) p[j] = 1, v[j].pb(i); } } cin>>t; while(t--){ solve(); } }