#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
const ll N = 10000001;
ll p = 998244353;
ll factorialNumInverse[N + 1];
ll naturalNumInverse[N + 1];
ll fact[N + 1];
void InverseofNumber(ll p)
{
naturalNumInverse[0] = naturalNumInverse[1] = 1;
for (ll i = 2; i <= N; i++)
naturalNumInverse[i] = naturalNumInverse[p % i] * (p - p / i) % p;
}
void InverseofFactorial(ll p)
{
factorialNumInverse[0] = factorialNumInverse[1] = 1;
for (ll i = 2; i <= N; i++)
factorialNumInverse[i] = (naturalNumInverse[i] * factorialNumInverse[i - 1]) % p;
}
void factorial(ll p)
{
fact[0] = 1;
for (int i = 1; i <= N; i++) {
fact[i] = (fact[i - 1] * i) % p;
}
}
ll nCr(ll N, ll R, ll p)
{
ll ans = ((fact[N] * factorialNumInverse[R])
% p * factorialNumInverse[N - R])
% p;
return ans;
}
void init()
{
InverseofNumber(p);
InverseofFactorial(p);
factorial(p);
}
ll go(vector<ll>&arr, ll n, ll xo)
{
// cout<<"9090"<<xorArr<<endl;
if (xo == 0)
return 0;
ll ans = 0;
for (ll i = 0; i < n; i++)
{
ll c_left = xo ^ arr[i];
// cout<<"----"<<xorArr<<" "<<arr[i]<<endl;
if (c_left < arr[i])
{
ans+=nCr(arr[i], (arr[i] - c_left), p);
}
}
return ans;
}
int main()
{
init();
ll t;
cin>>t;
while(t--)
{
ll n;
ll v = 0;
cin>>n;
vector<ll>A(n+1, 0);
for(ll i=1; i<=n; i++)
{
cin>>A[i];
}
ll q;
cin>>q;
while(q--)
{
ll l, r;
cin>>l>>r;
// cout<<"--000-"<<l<<" "<<r<<endl;
unordered_map<ll, ll>u_map;
for(ll i=l; i<=r; i++)
{
// cout<<A[i]<<endl;
u_map[A[i]]++;
}
vector<ll>sub_s;
for(auto u:u_map)
{
// cout<<"---"<<u.second<<endl;
sub_s.push_back(u.second);
}
ll v =0;
for(ll u:sub_s)
{
// cout<<u<<" ";
v = v ^ u;
}
// cout<<endl<<l<<"---"<<r<<endl;
// cout<<endl<<"-----"<<v<<endl;
// cout<<"----"<<(r-l)+1<<endl;
// cout<<"000"<<v<<endl;
cout<<go(sub_s, sub_s.size(), v)<<endl;
// cout<<v<<endl;
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnR5cGVkZWYgbG9uZyBsb25nIGxsOwp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjb25zdCBsbCBOID0gMTAwMDAwMDE7CgpsbCBwID0gOTk4MjQ0MzUzOwoKbGwgZmFjdG9yaWFsTnVtSW52ZXJzZVtOICsgMV07IAogCmxsIG5hdHVyYWxOdW1JbnZlcnNlW04gKyAxXTsgCiAKbGwgZmFjdFtOICsgMV07IAoKdm9pZCBJbnZlcnNlb2ZOdW1iZXIobGwgcCkgCnsgCgluYXR1cmFsTnVtSW52ZXJzZVswXSA9IG5hdHVyYWxOdW1JbnZlcnNlWzFdID0gMTsgCglmb3IgKGxsIGkgPSAyOyBpIDw9IE47IGkrKykgCgkJbmF0dXJhbE51bUludmVyc2VbaV0gPSBuYXR1cmFsTnVtSW52ZXJzZVtwICUgaV0gKiAocCAtIHAgLyBpKSAlIHA7Cn0gCgp2b2lkIEludmVyc2VvZkZhY3RvcmlhbChsbCBwKSAKeyAKCWZhY3RvcmlhbE51bUludmVyc2VbMF0gPSBmYWN0b3JpYWxOdW1JbnZlcnNlWzFdID0gMTsgCiAKCWZvciAobGwgaSA9IDI7IGkgPD0gTjsgaSsrKSAKCQlmYWN0b3JpYWxOdW1JbnZlcnNlW2ldID0gKG5hdHVyYWxOdW1JbnZlcnNlW2ldICogZmFjdG9yaWFsTnVtSW52ZXJzZVtpIC0gMV0pICUgcDsgCn0gCgogCnZvaWQgZmFjdG9yaWFsKGxsIHApIAp7IAoJZmFjdFswXSA9IDE7IAoKCWZvciAoaW50IGkgPSAxOyBpIDw9IE47IGkrKykgeyAKCQlmYWN0W2ldID0gKGZhY3RbaSAtIDFdICogaSkgJSBwOyAKCX0gCn0gCgoKbGwgbkNyKGxsIE4sIGxsIFIsIGxsIHApIAp7IAoJCWxsIGFucyA9ICgoZmFjdFtOXSAqIGZhY3RvcmlhbE51bUludmVyc2VbUl0pIAoJCQklIHAgKiBmYWN0b3JpYWxOdW1JbnZlcnNlW04gLSBSXSkgCgkJCSUgcDsgCgkJcmV0dXJuIGFuczsKfSAKCnZvaWQgaW5pdCgpCnsKCUludmVyc2VvZk51bWJlcihwKTsgCglJbnZlcnNlb2ZGYWN0b3JpYWwocCk7IAoJZmFjdG9yaWFsKHApOwp9CgpsbCBnbyh2ZWN0b3I8bGw+JmFyciwgbGwgbiwgbGwgeG8pIAp7CgkKCS8vIGNvdXQ8PCI5MDkwIjw8eG9yQXJyPDxlbmRsOwoJaWYgKHhvID09IDApIAoJCXJldHVybiAwOyAKIAoJbGwgYW5zID0gMDsgCgoJZm9yIChsbCBpID0gMDsgaSA8IG47IGkrKykgCgl7IAogCgkJbGwgY19sZWZ0ID0geG8gXiBhcnJbaV07IAoJCS8vIGNvdXQ8PCItLS0tIjw8eG9yQXJyPDwiICI8PGFycltpXTw8ZW5kbDsgCgkJaWYgKGNfbGVmdCA8IGFycltpXSkgCiAgICAgICAgewoJCQlhbnMrPW5DcihhcnJbaV0sIChhcnJbaV0gLSBjX2xlZnQpLCBwKTsgCiAgICAgICAgfQoJfSAKCglyZXR1cm4gYW5zOyAKfSAKCgppbnQgbWFpbigpIAp7Cglpbml0KCk7CglsbCB0OwoJY2luPj50OwoJd2hpbGUodC0tKQoJewoJCWxsIG47CgkJbGwgdiA9IDA7CgkJY2luPj5uOwoJCXZlY3RvcjxsbD5BKG4rMSwgMCk7CgkJZm9yKGxsIGk9MTsgaTw9bjsgaSsrKQoJCXsKCQkJY2luPj5BW2ldOwoJCX0KCQkKCQlsbCBxOwoJCWNpbj4+cTsKCQl3aGlsZShxLS0pCgkJewoJCQlsbCBsLCByOwoJCQljaW4+Pmw+PnI7CgkJCS8vIGNvdXQ8PCItLTAwMC0iPDxsPDwiICI8PHI8PGVuZGw7CgkJCXVub3JkZXJlZF9tYXA8bGwsIGxsPnVfbWFwOwoJCQlmb3IobGwgaT1sOyBpPD1yOyBpKyspCgkJCXsKCQkJCS8vIGNvdXQ8PEFbaV08PGVuZGw7CgkJCQl1X21hcFtBW2ldXSsrOwoJCQl9CgkJCXZlY3RvcjxsbD5zdWJfczsKCQkJZm9yKGF1dG8gdTp1X21hcCkKCQkJewoJCQkJLy8gY291dDw8Ii0tLSI8PHUuc2Vjb25kPDxlbmRsOwoJCQkJc3ViX3MucHVzaF9iYWNrKHUuc2Vjb25kKTsKCQkJfQoJCQkKCQkJbGwgdiA9MDsKCQkJCgkJCWZvcihsbCB1OnN1Yl9zKQoJCQl7CgkJCQkvLyBjb3V0PDx1PDwiICI7CgkJCQl2ID0gdiBeIHU7CgkJCX0KCQkJCgkJCS8vIGNvdXQ8PGVuZGw8PGw8PCItLS0iPDxyPDxlbmRsOwoJCQkvLyBjb3V0PDxlbmRsPDwiLS0tLS0iPDx2PDxlbmRsOwoJCQkvLyBjb3V0PDwiLS0tLSI8PChyLWwpKzE8PGVuZGw7CgkJCS8vIGNvdXQ8PCIwMDAiPDx2PDxlbmRsOwoJCQljb3V0PDxnbyhzdWJfcywgc3ViX3Muc2l6ZSgpLCB2KTw8ZW5kbDsKCQkJLy8gY291dDw8djw8ZW5kbDsKCQl9Cgl9CglyZXR1cm4gMDsKfQ==