#include <bits/stdc++.h> using namespace std; const int N = 1e6 + 5; const int mod = 1e9 + 7; bool np[N]; vector<int> dvs[N]; vector<int> mul[N]; vector<int> prime; int par[N]; int anc(int u) { return par[u] == u ? u : par[u] = anc(par[u]); } void join(int u,int v) { par[anc(v)] = anc(u); } int main() { ios_base::sync_with_stdio(false); np[0] = np[1] = 1; for (int i = 2; i < N; ++i) if (!np[i]) { dvs[i].push_back(i); prime.push_back(i); for (int j = i + i; j < N; j += i) { np[j] = 1; dvs[j].push_back(i); } } int t; cin >> t; while (t--) { int n; cin >> n; for (int i = 1; i <= n; ++i) { par[i] = i; } for (int p : prime) mul[p].clear(); for (int i = 1; i <= n; ++i) { int x; cin >> x; for (int p : dvs[x]) mul[p].push_back(i); } for (int p : prime) { for (int i = 1; i < mul[p].size(); ++i) { join(mul[p][i], mul[p][i - 1]); } } int ret = 1; for (int i = 1; i <= n; ++i) if (anc(i) == i) { ret += ret; if (ret >= mod) ret -= mod; } ret -= 2; if (ret < 0) ret += mod; cout << ret << '\n'; } }