#include <bits/stdc++.h>
using namespace std;
int md = 998244353;
int ma = 5e6 + 10;
vector<int> s(ma);
long long power( long long a, long long b){
a %= md;
long long res = 1;
while( b > 0 ){
if (b%2==1) res =(res *a)%md;
a = (a*a)%md;
b/=2;
}
return res;
}
void seive(){
for (int i = 0; i<=ma;i++) s[i] =i;
for (int i = 2; i*i <=ma;i++) {
if ( s[i] == i){
for (int j = i*i; j<=ma;j+=i) {
if (s[j] ==j) s[j]=i;
}
}
}
}
vector<int> factor(int n){
vector<int> res;
while (n > 1){
int p = s[n];
res.push_back(p);
while(n%p==0) n/=p;
}
return res;
}
void solve(){
int n;
cin >> n;
vector<int> a(n);
map<int, vector<int>> mp;
vector<vector<int>> adj(n);
for (int i =0; i<n;i++){
cin >> a[i];
vector<int> f = factor(a[i]);
for (int j : f){
mp[j].push_back(i);
}
}
for (auto& [p, v]: mp){
if (v.size() >2 ){
cout << 0 << endl;
return;
}
if (v.size() ==2) {
adj[v[0]].push_back(v[1]);
adj[v[1]].push_back(v[0]);
}
}
int k =0;
//BFS to find connected components and check if they are bipartite
vector<int> color(n,0);
for (int i =0; i<n;i++){
if (color[i] ==0) {
color[i] = 1;
k++;
stack<int> st;
st.push(i);
while( !st.empty()) {
int u = st.top();
st.pop();
for (int v : adj[u]){
if (color[v]==0){
color[v]= 3 - color[u];
st.push(v);
}
else if (color[v] == color[u]) {
cout << 0 << endl;
return;
}
}
}
}
}
if ( k== n) {
long long d = power(2,n) -2;
cout << d << endl;
return;
}
else cout << power(2, k) << endl;
return;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
seive();
while(t--) {
solve();
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmludCBtZCA9IDk5ODI0NDM1MzsKaW50IG1hID0gNWU2ICsgMTA7CnZlY3RvcjxpbnQ+IHMobWEpOwpsb25nIGxvbmcgcG93ZXIoIGxvbmcgbG9uZyBhLCBsb25nIGxvbmcgYil7CiAgICBhICU9IG1kOwogICAgbG9uZyBsb25nIHJlcyA9IDE7CiAgICB3aGlsZSggYiA+IDAgKXsKICAgICAgICBpZiAoYiUyPT0xKSByZXMgPShyZXMgKmEpJW1kOwogICAgICAgIGEgPSAoYSphKSVtZDsKICAgICAgICBiLz0yOwogICAgfQogICAgcmV0dXJuIHJlczsKfQp2b2lkIHNlaXZlKCl7CiAgICBmb3IgKGludCBpID0gMDsgaTw9bWE7aSsrKSBzW2ldID1pOwogICAgZm9yIChpbnQgaSA9IDI7IGkqaSA8PW1hO2krKykgewogICAgICAgIGlmICggc1tpXSA9PSBpKXsKICAgICAgICAgICAgZm9yIChpbnQgaiA9IGkqaTsgajw9bWE7ais9aSkgewogICAgICAgICAgICAgICAgaWYgKHNbal0gPT1qKSBzW2pdPWk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KdmVjdG9yPGludD4gZmFjdG9yKGludCBuKXsKICAgIHZlY3RvcjxpbnQ+IHJlczsKICAgIHdoaWxlIChuID4gMSl7CiAgICAgICAgaW50IHAgPSBzW25dOwogICAgICAgIHJlcy5wdXNoX2JhY2socCk7CiAgICAgICAgd2hpbGUobiVwPT0wKSBuLz1wOwoKICAgIH0KICAgIHJldHVybiByZXM7Cn0Kdm9pZCBzb2x2ZSgpewogICAgaW50IG47CiAgICBjaW4gPj4gbjsKICAgIHZlY3RvcjxpbnQ+IGEobik7CiAgICBtYXA8aW50LCB2ZWN0b3I8aW50Pj4gbXA7CiAgICB2ZWN0b3I8dmVjdG9yPGludD4+IGFkaihuKTsKICAgIGZvciAoaW50IGkgPTA7IGk8bjtpKyspewogICAgICAgIGNpbiA+PiBhW2ldOwogICAgICAgIHZlY3RvcjxpbnQ+IGYgPSBmYWN0b3IoYVtpXSk7CiAgICAgICAgZm9yIChpbnQgaiA6IGYpewogICAgICAgICAgICBtcFtqXS5wdXNoX2JhY2soaSk7CiAgICAgICAgfQogICAgfQogICAgZm9yIChhdXRvJiBbcCwgdl06IG1wKXsKICAgICAgICBpZiAodi5zaXplKCkgPjIgKXsKICAgICAgICAgICAgY291dCA8PCAwIDw8IGVuZGw7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKHYuc2l6ZSgpID09MikgewogICAgICAgICAgICBhZGpbdlswXV0ucHVzaF9iYWNrKHZbMV0pOwogICAgICAgICAgICBhZGpbdlsxXV0ucHVzaF9iYWNrKHZbMF0pOwogICAgICAgIH0KICAgIH0KICAgIGludCBrID0wOwogICAgLy9CRlMgdG8gZmluZCBjb25uZWN0ZWQgY29tcG9uZW50cyBhbmQgY2hlY2sgaWYgdGhleSBhcmUgYmlwYXJ0aXRlCiAgICB2ZWN0b3I8aW50PiBjb2xvcihuLDApOwogICAgZm9yIChpbnQgaSA9MDsgaTxuO2krKyl7CiAgICAgICAgaWYgKGNvbG9yW2ldID09MCkgewogICAgICAgICAgICBjb2xvcltpXSA9IDE7CiAgICAgICAgICAgIGsrKzsKICAgICAgICAgICAgc3RhY2s8aW50PiBzdDsKICAgICAgICAgICAgc3QucHVzaChpKTsKICAgICAgICAgICAgd2hpbGUoICFzdC5lbXB0eSgpKSB7CiAgICAgICAgICAgICAgICBpbnQgdSA9IHN0LnRvcCgpOwogICAgICAgICAgICAgICAgc3QucG9wKCk7CiAgICAgICAgICAgICAgICBmb3IgKGludCB2IDogYWRqW3VdKXsKICAgICAgICAgICAgICAgICAgICBpZiAoY29sb3Jbdl09PTApewogICAgICAgICAgICAgICAgICAgICAgICBjb2xvclt2XT0gMyAtIGNvbG9yW3VdOwogICAgICAgICAgICAgICAgICAgICAgICBzdC5wdXNoKHYpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb2xvclt2XSA9PSBjb2xvclt1XSkgewogICAgICAgICAgICAgICAgICAgICAgICBjb3V0IDw8IDAgPDwgZW5kbDsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGlmICggaz09IG4pIHsKICAgICAgICBsb25nIGxvbmcgZCA9IHBvd2VyKDIsbikgLTI7CiAgICAgICAgY291dCA8PCBkIDw8IGVuZGw7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgZWxzZSBjb3V0IDw8IHBvd2VyKDIsIGspIDw8IGVuZGw7CiAgICByZXR1cm47Cn0KCgppbnQgbWFpbigpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShudWxscHRyKTsKICAgIGludCB0OwogICAgY2luID4+IHQ7CiAgICBzZWl2ZSgpOwogICAgd2hpbGUodC0tKSB7CiAgICAgICAgc29sdmUoKTsKICAgIH0KfQ==