#include <bits/stdc++.h> using namespace std; typedef long long ll; const int MOD = 1e9 + 7; const int MAX = 1e5 + 10; const int MAX_A = 1e6 + 10; vector<int> vec[MAX_A]; vector<int> v[MAX]; int color[MAX]; void dfs(int pos, int cl){ color[pos] = cl; for(int a : v[pos]){ if(!color[a]){ dfs(a, cl); } } } int solve(){ int n; cin >> n; for(int i = 0; i < MAX_A; i++){ vec[i].clear(); } for(int i = 1; i <= n; i++){ int a; cin >> a; if(a == 1){ continue; } for(int j = 2; j <= 1000; j++){ if(a % j == 0){ while(a % j == 0){ a /= j; } vec[j].push_back(i); } } if(a > 1){ vec[a].push_back(i); } } for(int i = 1; i <= n; i++){ v[i].clear(); color[i] = 0; } for(int i = 0; i < MAX_A; i++){ if(vec[i].size() >= 2){ for(int j = 1; j < (int) vec[i].size(); j++){ v[vec[i][j]].push_back(vec[i][j - 1]); v[vec[i][j - 1]].push_back(vec[i][j]); } } } int ans = 1; for(int i = 1; i <= n; i++){ if(color[i] == 0){ dfs(i, i); ans *= 2; ans %= MOD; } } ans += MOD - 2; ans %= MOD; return ans; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int t; cin >> t; while(t--){ cout << solve() << endl; } return 0; }