#include<bits/stdc++.h>
using namespace std;
//#include <ext/pb_ds/assoc_container.hpp> // Common file
//#include <ext/pb_ds/tree_policy.hpp> // Including tree_order_statistics_node_update
//using namespace __gnu_pbds; // order of key(keys strictly less than) // find_by_order
//typedef tree<long long,null_type,less<>,rb_tree_tag,tree_order_statistics_node_update> ordered_set;
//typedef tree<long long, null_type, less_equal<>, rb_tree_tag, tree_order_statistics_node_update> indexed_multiset;
//IF WA CHECK FOR : -
// 1 > EDGE CASES LIKE N=1 , N=0
// 2 > SIGNED INTEGER OVERFLOW IN MOD
// 3 > CHECK THE CODE FOR LOGICAL ERRORS AND SEG FAULTS
// 4 > READ THE PS ONCE AGAIN , if having double diff less than 1e-8 is same.
// 5 > You Have got AC .
#define ll long long
#define NUM (ll)1000000007
#define inf (long long)(1e12)
#define ff first
#define ss second
#define f(i,a,b) for(ll i=a;(i)<long(b);(i)++)
#define fr(i,a,b) for(ll i=a;(i)>=(long long)(b);(i)--)
#define it(b) for(auto &it:(b))
#define ff first
#define ss second
#define pb push_back
#define mp make_pair
typedef vector<ll> vll;
typedef pair<ll,ll> pll;
ll binpow( ll base , ll ex,ll mod=NUM) {
ll ans = 1;base = base % mod;
if(base==0){
return 0;
}
while (ex > 0) {
if (ex % 2 == 1) {
ans = (ans * base) % mod;
}
base = (base * base) % mod;
ex = ex / 2;
}
return ans;
}
void read(vll &arr,ll n) {
if (arr.size() != n) { arr.assign(n, 0); }for (int i = 0; i < n; i++)cin >> arr[i];
}
inline ll min(ll a,ll b){
if(a>b)return b;return a;
}
inline ll max(ll a, ll b){
if(a>b)return a;return b;
}
inline ll dif(ll a,ll b) {
if (a > b)return a - b;return b - a;
}
long long gcd(long long a,long long b) {
if (b == 0)return a;return gcd(b, a % b);
}
long long lcm(long long a,long long b) {
long long k = gcd(a, b);
return (a * b) / k;
}
vll fun(ll z){
vll res;f(i,0,21){
res.pb(z%2);z/=2;
}
reverse(res.begin(),res.end());
return res;
}
ll fun2(vector<vector<ll>>&dp,ll l,ll x)
{
if(l<0){
return 0;
}
//from 0 to l and i|x;
if(x<=l) {
return dp[x][20];
}
else{
// string of x and l+1
vll a = fun(x);vll b = fun(l+1);
ll res=0;
ll p = 1<<20;
ll pref=x;
for(int i=0;i<=20;i++){
if(b[i]!=a[i]){
if(b[i]==1){
res+=dp[pref][20-i];
break;
}
pref^=(1<<(20-i));a[i]=0;
}
if(a[i]){
// that means we can set it to 0.
res+=dp[pref^(1<<(20-i))][20-i];
}
p/=2;
}
return res;
}
}
void solve() {
int n;cin>>n;
ll z = 1;
while(z<n){
z*=2;
}
vector<ll>arr;read(arr,n);
// l to r sum of elements which have i|x = x
vector<vector<ll>>dp(n,vector<ll>(21));
for(int i=0;i<n;i++){
dp[i][0]=arr[i];
for(int k=1;k<=20;k++){
ll p = (1<<(k-1));
if((i^p)<i){
// it's here dude .
dp[i][k]=dp[i^p][k-1]+dp[i][k-1];
}
else{
dp[i][k]=dp[i][k-1];
}
}
}
int q;cin>>q;
ll prev=0;
while(q--){
ll l,x,r;cin>>l>>r>>x;
x += prev;x%=z;
//from 0 to l and i|x;
ll k = fun2(dp,r,x)-fun2(dp,l-1,x);
cout<<k<<endl;prev=k;
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);cout.tie(NULL);
cout << fixed << showpoint;
cout << setprecision(12);
long long test_m = 1;
cin >> test_m;
//I WILL WIN .
while (test_m--) {
solve();
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLy8jaW5jbHVkZSA8ZXh0L3BiX2RzL2Fzc29jX2NvbnRhaW5lci5ocHA+IC8vIENvbW1vbiBmaWxlCi8vI2luY2x1ZGUgPGV4dC9wYl9kcy90cmVlX3BvbGljeS5ocHA+IC8vIEluY2x1ZGluZyB0cmVlX29yZGVyX3N0YXRpc3RpY3Nfbm9kZV91cGRhdGUKLy91c2luZyBuYW1lc3BhY2UgX19nbnVfcGJkczsgLy8gIG9yZGVyIG9mIGtleShrZXlzIHN0cmljdGx5IGxlc3MgdGhhbikgIC8vIGZpbmRfYnlfb3JkZXIKLy90eXBlZGVmIHRyZWU8bG9uZyBsb25nLG51bGxfdHlwZSxsZXNzPD4scmJfdHJlZV90YWcsdHJlZV9vcmRlcl9zdGF0aXN0aWNzX25vZGVfdXBkYXRlPiBvcmRlcmVkX3NldDsKLy90eXBlZGVmIHRyZWU8bG9uZyBsb25nLCBudWxsX3R5cGUsIGxlc3NfZXF1YWw8PiwgcmJfdHJlZV90YWcsIHRyZWVfb3JkZXJfc3RhdGlzdGljc19ub2RlX3VwZGF0ZT4gaW5kZXhlZF9tdWx0aXNldDsKLy9JRiBXQSBDSEVDSyBGT1IgOiAtCi8vIDEgPiBFREdFIENBU0VTIExJS0UgTj0xICwgTj0wCi8vIDIgPiBTSUdORUQgSU5URUdFUiBPVkVSRkxPVyBJTiBNT0QKLy8gMyA+IENIRUNLIFRIRSBDT0RFIEZPUiBMT0dJQ0FMIEVSUk9SUyBBTkQgU0VHIEZBVUxUUwovLyA0ID4gUkVBRCBUSEUgUFMgT05DRSBBR0FJTiAsIGlmIGhhdmluZyBkb3VibGUgZGlmZiBsZXNzIHRoYW4gMWUtOCBpcyBzYW1lLgovLyA1ID4gWW91IEhhdmUgZ290IEFDIC4KI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBOVU0gKGxsKTEwMDAwMDAwMDcKI2RlZmluZSBpbmYgKGxvbmcgbG9uZykoMWUxMikKI2RlZmluZSBmZiBmaXJzdAojZGVmaW5lIHNzIHNlY29uZAojZGVmaW5lIGYoaSxhLGIpIGZvcihsbCBpPWE7KGkpPGxvbmcoYik7KGkpKyspCiNkZWZpbmUgZnIoaSxhLGIpIGZvcihsbCBpPWE7KGkpPj0obG9uZyBsb25nKShiKTsoaSktLSkKI2RlZmluZSBpdChiKSAgZm9yKGF1dG8gJml0OihiKSkKI2RlZmluZSBmZiBmaXJzdAojZGVmaW5lIHNzIHNlY29uZAojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIG1wIG1ha2VfcGFpcgp0eXBlZGVmIHZlY3RvcjxsbD4gdmxsOwp0eXBlZGVmIHBhaXI8bGwsbGw+IHBsbDsKbGwgYmlucG93KCBsbCBiYXNlICwgbGwgZXgsbGwgbW9kPU5VTSkgewogICAgbGwgYW5zID0gMTtiYXNlID0gYmFzZSAlIG1vZDsKICAgIGlmKGJhc2U9PTApewogICAgICAgIHJldHVybiAwOwogICAgfQogICAgd2hpbGUgKGV4ID4gMCkgewogICAgICAgIGlmIChleCAlIDIgPT0gMSkgewogICAgICAgICAgICBhbnMgPSAoYW5zICogYmFzZSkgJSBtb2Q7CiAgICAgICAgfQogICAgICAgIGJhc2UgPSAoYmFzZSAqIGJhc2UpICUgbW9kOwogICAgICAgIGV4ID0gZXggLyAyOwogICAgfQogICAgcmV0dXJuIGFuczsKfQp2b2lkIHJlYWQodmxsICZhcnIsbGwgbikgewogICAgaWYgKGFyci5zaXplKCkgIT0gbikgeyBhcnIuYXNzaWduKG4sIDApOyB9Zm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspY2luID4+IGFycltpXTsKfQppbmxpbmUgbGwgbWluKGxsIGEsbGwgYil7CiAgICBpZihhPmIpcmV0dXJuIGI7cmV0dXJuIGE7Cn0KaW5saW5lIGxsIG1heChsbCBhLCBsbCBiKXsKICAgIGlmKGE+YilyZXR1cm4gYTtyZXR1cm4gYjsKfQppbmxpbmUgbGwgZGlmKGxsIGEsbGwgYikgewogICAgaWYgKGEgPiBiKXJldHVybiBhIC0gYjtyZXR1cm4gYiAtIGE7Cn0KbG9uZyBsb25nIGdjZChsb25nIGxvbmcgYSxsb25nIGxvbmcgYikgewogICAgaWYgKGIgPT0gMClyZXR1cm4gYTtyZXR1cm4gZ2NkKGIsIGEgJSBiKTsKfQpsb25nIGxvbmcgbGNtKGxvbmcgbG9uZyBhLGxvbmcgbG9uZyBiKSB7CiAgICBsb25nIGxvbmcgayA9IGdjZChhLCBiKTsKICAgIHJldHVybiAoYSAqIGIpIC8gazsKfQp2bGwgZnVuKGxsIHopewogICAgdmxsIHJlcztmKGksMCwyMSl7CiAgICAgICAgcmVzLnBiKHolMik7ei89MjsKICAgIH0KICAgIHJldmVyc2UocmVzLmJlZ2luKCkscmVzLmVuZCgpKTsKICAgIHJldHVybiByZXM7Cn0KbGwgZnVuMih2ZWN0b3I8dmVjdG9yPGxsPj4mZHAsbGwgbCxsbCB4KQp7CiAgICBpZihsPDApewogICAgICAgIHJldHVybiAwOwogICAgfQogICAgLy9mcm9tIDAgdG8gbCBhbmQgaXx4OwogICAgaWYoeDw9bCkgewogICAgICAgIHJldHVybiBkcFt4XVsyMF07CiAgICB9CiAgICBlbHNlewogICAgICAgIC8vIHN0cmluZyBvZiB4IGFuZCBsKzEKICAgICAgICB2bGwgYSA9IGZ1bih4KTt2bGwgYiA9IGZ1bihsKzEpOwogICAgICAgIGxsIHJlcz0wOwogICAgICAgIGxsIHAgPSAxPDwyMDsKICAgICAgICBsbCBwcmVmPXg7CiAgICAgICAgZm9yKGludCBpPTA7aTw9MjA7aSsrKXsKICAgICAgICAgICAgaWYoYltpXSE9YVtpXSl7CiAgICAgICAgICAgICAgICBpZihiW2ldPT0xKXsKICAgICAgICAgICAgICAgICAgICByZXMrPWRwW3ByZWZdWzIwLWldOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcHJlZl49KDE8PCgyMC1pKSk7YVtpXT0wOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKGFbaV0pewogICAgICAgICAgICAgICAgLy8gdGhhdCBtZWFucyB3ZSBjYW4gc2V0IGl0IHRvIDAuCiAgICAgICAgICAgICAgICByZXMrPWRwW3ByZWZeKDE8PCgyMC1pKSldWzIwLWldOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHAvPTI7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXM7CiAgICB9Cn0Kdm9pZCBzb2x2ZSgpIHsKICAgIGludCBuO2Npbj4+bjsKICAgIGxsIHogPSAxOwogICAgd2hpbGUoejxuKXsKICAgICAgICB6Kj0yOwogICAgfQogICAgdmVjdG9yPGxsPmFycjtyZWFkKGFycixuKTsKICAgIC8vIGwgdG8gciBzdW0gb2YgZWxlbWVudHMgd2hpY2ggaGF2ZSBpfHggPSB4CiAgICB2ZWN0b3I8dmVjdG9yPGxsPj5kcChuLHZlY3RvcjxsbD4oMjEpKTsKICAgIGZvcihpbnQgaT0wO2k8bjtpKyspewogICAgICAgIGRwW2ldWzBdPWFycltpXTsKICAgICAgICBmb3IoaW50IGs9MTtrPD0yMDtrKyspewogICAgICAgICAgICBsbCBwID0gKDE8PChrLTEpKTsKICAgICAgICAgICAgaWYoKGlecCk8aSl7CiAgICAgICAgICAgICAgICAvLyBpdCdzIGhlcmUgZHVkZSAuCiAgICAgICAgICAgICAgICBkcFtpXVtrXT1kcFtpXnBdW2stMV0rZHBbaV1bay0xXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlewogICAgICAgICAgICAgICAgZHBbaV1ba109ZHBbaV1bay0xXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGludCBxO2Npbj4+cTsKICAgIGxsIHByZXY9MDsKICAgIHdoaWxlKHEtLSl7CiAgICAgICAgbGwgbCx4LHI7Y2luPj5sPj5yPj54OwogICAgICAgIHggKz0gcHJldjt4JT16OwogICAgICAgIC8vZnJvbSAwIHRvIGwgYW5kIGl8eDsKICAgICAgICBsbCBrID0gZnVuMihkcCxyLHgpLWZ1bjIoZHAsbC0xLHgpOwogICAgICAgIGNvdXQ8PGs8PGVuZGw7cHJldj1rOwogICAgfQp9CmludCBtYWluKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKE5VTEwpO2NvdXQudGllKE5VTEwpOwogICAgY291dCA8PCBmaXhlZCA8PCBzaG93cG9pbnQ7CiAgICBjb3V0IDw8IHNldHByZWNpc2lvbigxMik7CiAgICBsb25nIGxvbmcgdGVzdF9tID0gMTsKICAgIGNpbiA+PiB0ZXN0X207CiAgICAvL0kgV0lMTCBXSU4gLgogICAgd2hpbGUgKHRlc3RfbS0tKSB7CiAgICAgICAgc29sdmUoKTsKICAgIH0KfQ==