#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef vector<int> vi;
typedef vector<ld> vld;
typedef vector<ll> vll;
typedef vector<pair<ll, ll>> vp;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
#define fr first
#define sc second
#define all(a) a.begin(),a.end()
void Hendi() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
freopen("error.txt", "w", stderr);
#endif
}
const ll INF = 1e18;
const ll MOD = 1e9 + 7;
const double EPS = 1e-7;
const int N = 2e5 + 5;
const int N1 = 1e5 + 5;
int dx[] = {0, 0, 1, -1, -1, -1, 1, 1};
int dy[] = {1, -1, 0, 0, 1, -1, 1, -1};
char di[] = {'R', 'L', 'D', 'U'};
ll mul(ll a, ll b) {
return ((a % MOD) * (b % MOD)) % MOD;
}
ll sub(ll a, ll b) {
return ((a % MOD) - (b % MOD) + MOD) % MOD;
}
ll MOD_add(ll a, ll b) {
return ((a % MOD) + (b % MOD)) % MOD;
}
int SQ = 450;
struct BIT{
int n;
vll tree;
BIT(int n){
tree.resize(n + 1,0);
this-> n = n;
}
ll get(int i){
++i;
ll sum = 0;
while(i >= 1){
sum += tree[i];
i -= (i & -i);
}
return sum;
}
void add(int i , ll val){
++i;
while(i <= n){
tree[i] += val;
i += (i & -i);
}
}
ll query(int l , int r){
return get(r) - get(l - 1);
};
};
struct query {
int l, r ,idx;
bool operator <(query &other) {
if (l / SQ != other.l / SQ) return l / SQ < other.l / SQ;
return ((l / SQ) & 1? r < other.r: r > other.r);
}
};
ll pw(ll a , ll b){
if(b == 0) return 1;
ll ans = pw(a, b / 2);
ans = mul(ans, ans);
if(b & 1) ans = mul(ans, a);
return ans;
}
void solve() {
int n , q;
cin>> n;
vll a(n);
for (int i = 0; i < n; ++i) {
cin>> a[i];
}
cin>> q;
vector<query> v(q);
for (int i = 0; i < q; ++i) {
cin>> v[i].l >> v[i].r;
v[i].l--;
v[i].r--;
v[i].idx = i;
}
sort(all(v));
BIT bit(n + 1);
ll sum = 0;
int l = 0, r = - 1;
vll ans(q);
auto add = [&](int idx, int dir) {
if(dir == 0) sum = MOD_add(sum, bit.get(a[idx] - 1));
else sum = MOD_add(sum, bit.query(a[idx] + 1 , n));
bit.add(a[idx], 1);
};
auto del = [&](int idx, int dir) {
if(dir == 0) sum = sub(sum, bit.get(a[idx] -1 ));
else sum = sub(sum, bit.query(a[idx] + 1 , n));
bit.add(a[idx], -1);
};
auto query = [&]() {
return mul(sum, pw(2, r - l - 1));
};
for (auto & [lq,rq,idx]: v) {
while (l > lq) add(--l, 0);
while (r < rq) add(++r, 1);
while (l < lq) del(l++, 0);
while (r > rq) del(r--, 1);
ans[idx] = query();
}
for (auto &i : ans) {
cout<< i << '\n';
}
}
int main() {
Hendi();
int T = 1;
cin >> T;
while (T--) {
solve();
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIGxvbmcgZG91YmxlIGxkOwp0eXBlZGVmIHZlY3RvcjxpbnQ+IHZpOwp0eXBlZGVmIHZlY3RvcjxsZD4gdmxkOwp0eXBlZGVmIHZlY3RvcjxsbD4gdmxsOwp0eXBlZGVmIHZlY3RvcjxwYWlyPGxsLCBsbD4+IHZwOwp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IHBpaTsKdHlwZWRlZiBwYWlyPGxsLCBsbD4gcGxsOwojZGVmaW5lIGZyIGZpcnN0CiNkZWZpbmUgc2Mgc2Vjb25kCiNkZWZpbmUgYWxsKGEpIGEuYmVnaW4oKSxhLmVuZCgpCgoKdm9pZCBIZW5kaSgpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOwogICAgY291dC50aWUoMCk7CiNpZm5kZWYgT05MSU5FX0pVREdFCiAgICBmcmVvcGVuKCJpbnB1dC50eHQiLCAiciIsIHN0ZGluKTsKICAgIGZyZW9wZW4oIm91dHB1dC50eHQiLCAidyIsIHN0ZG91dCk7CiAgICBmcmVvcGVuKCJlcnJvci50eHQiLCAidyIsIHN0ZGVycik7CiNlbmRpZgp9Cgpjb25zdCBsbCBJTkYgPSAxZTE4Owpjb25zdCBsbCBNT0QgPSAxZTkgKyA3Owpjb25zdCBkb3VibGUgRVBTID0gMWUtNzsKY29uc3QgaW50IE4gPSAyZTUgKyA1Owpjb25zdCBpbnQgTjEgPSAxZTUgKyA1OwppbnQgZHhbXSA9IHswLCAwLCAxLCAtMSwgLTEsIC0xLCAxLCAxfTsKaW50IGR5W10gPSB7MSwgLTEsIDAsIDAsIDEsIC0xLCAxLCAtMX07CmNoYXIgZGlbXSA9IHsnUicsICdMJywgJ0QnLCAnVSd9OwoKbGwgbXVsKGxsIGEsIGxsIGIpIHsKICAgIHJldHVybiAoKGEgJSBNT0QpICogKGIgJSBNT0QpKSAlIE1PRDsKfQoKbGwgc3ViKGxsIGEsIGxsIGIpIHsKICAgIHJldHVybiAoKGEgJSBNT0QpIC0gKGIgJSBNT0QpICsgTU9EKSAlIE1PRDsKfQoKbGwgTU9EX2FkZChsbCBhLCBsbCBiKSB7CiAgICByZXR1cm4gKChhICUgTU9EKSArIChiICUgTU9EKSkgJSBNT0Q7Cn0KCmludCBTUSA9IDQ1MDsKc3RydWN0IEJJVHsKICAgIGludCBuOwogICAgdmxsIHRyZWU7CgogICAgQklUKGludCBuKXsKICAgICAgICB0cmVlLnJlc2l6ZShuICsgMSwwKTsKICAgICAgICB0aGlzLT4gbiA9IG47CiAgICB9CiAgICBsbCBnZXQoaW50IGkpewogICAgICAgICsraTsKICAgICAgICBsbCBzdW0gPSAwOwogICAgICAgIHdoaWxlKGkgPj0gMSl7CiAgICAgICAgICAgIHN1bSArPSB0cmVlW2ldOwogICAgICAgICAgICBpIC09IChpICYgLWkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc3VtOwogICAgfQogICAgdm9pZCBhZGQoaW50IGkgLCBsbCB2YWwpewogICAgICAgICsraTsKICAgICAgICB3aGlsZShpIDw9IG4pewogICAgICAgICAgICB0cmVlW2ldICs9IHZhbDsKICAgICAgICAgICAgaSArPSAoaSAmIC1pKTsKICAgICAgICB9CiAgICB9CiAgICBsbCBxdWVyeShpbnQgbCAsIGludCByKXsKICAgICAgICByZXR1cm4gZ2V0KHIpIC0gZ2V0KGwgLSAxKTsKICAgIH07Cn07CgpzdHJ1Y3QgcXVlcnkgewogICAgaW50IGwsIHIgLGlkeDsKICAgIGJvb2wgb3BlcmF0b3IgPChxdWVyeSAmb3RoZXIpIHsKICAgICAgICBpZiAobCAvIFNRICE9IG90aGVyLmwgLyBTUSkgcmV0dXJuIGwgLyBTUSA8IG90aGVyLmwgLyBTUTsKICAgICAgICByZXR1cm4gKChsIC8gU1EpICYgMT8gciA8IG90aGVyLnI6IHIgPiBvdGhlci5yKTsKICAgIH0KfTsKCmxsIHB3KGxsIGEgLCBsbCBiKXsKICAgIGlmKGIgPT0gMCkgcmV0dXJuIDE7CiAgICBsbCBhbnMgPSBwdyhhLCBiIC8gMik7CiAgICBhbnMgPSBtdWwoYW5zLCBhbnMpOwogICAgaWYoYiAmIDEpIGFucyA9IG11bChhbnMsIGEpOwogICAgcmV0dXJuIGFuczsKfQoKdm9pZCBzb2x2ZSgpIHsKICAgIGludCBuICwgcTsKICAgIGNpbj4+IG47CiAgICB2bGwgYShuKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgY2luPj4gYVtpXTsKICAgIH0KICAgIGNpbj4+IHE7CiAgICB2ZWN0b3I8cXVlcnk+IHYocSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHE7ICsraSkgewogICAgICAgIGNpbj4+IHZbaV0ubCA+PiB2W2ldLnI7CiAgICAgICAgdltpXS5sLS07CiAgICAgICAgdltpXS5yLS07CiAgICAgICAgdltpXS5pZHggPSBpOwogICAgfQogICAgc29ydChhbGwodikpOwogICAgQklUIGJpdChuICsgMSk7CiAgICBsbCBzdW0gPSAwOwogICAgaW50IGwgPSAwLCByID0gLSAxOwogICAgdmxsIGFucyhxKTsKICAgIGF1dG8gYWRkID0gWyZdKGludCBpZHgsIGludCBkaXIpIHsKICAgICAgICBpZihkaXIgPT0gMCkgc3VtID0gTU9EX2FkZChzdW0sIGJpdC5nZXQoYVtpZHhdIC0gMSkpOwogICAgICAgIGVsc2Ugc3VtID0gTU9EX2FkZChzdW0sIGJpdC5xdWVyeShhW2lkeF0gKyAxICwgbikpOwogICAgICAgIGJpdC5hZGQoYVtpZHhdLCAxKTsKICAgIH07CgogICAgYXV0byBkZWwgPSBbJl0oaW50IGlkeCwgaW50IGRpcikgewogICAgICAgIGlmKGRpciA9PSAwKSBzdW0gPSBzdWIoc3VtLCBiaXQuZ2V0KGFbaWR4XSAtMSApKTsKICAgICAgICBlbHNlIHN1bSA9IHN1YihzdW0sIGJpdC5xdWVyeShhW2lkeF0gKyAxICwgbikpOwogICAgICAgIGJpdC5hZGQoYVtpZHhdLCAtMSk7CiAgICB9OwoKICAgIGF1dG8gcXVlcnkgPSBbJl0oKSB7CiAgICAgICAgcmV0dXJuIG11bChzdW0sIHB3KDIsIHIgLSBsIC0gMSkpOwogICAgfTsKICAgIGZvciAoYXV0byAmIFtscSxycSxpZHhdOiB2KSB7CiAgICAgICAgd2hpbGUgKGwgPiBscSkgYWRkKC0tbCwgMCk7CiAgICAgICAgd2hpbGUgKHIgPCBycSkgYWRkKCsrciwgMSk7CiAgICAgICAgd2hpbGUgKGwgPCBscSkgZGVsKGwrKywgMCk7CiAgICAgICAgd2hpbGUgKHIgPiBycSkgZGVsKHItLSwgMSk7CiAgICAgICAgYW5zW2lkeF0gPSBxdWVyeSgpOwogICAgfQogICAgZm9yIChhdXRvICZpIDogYW5zKSB7CiAgICAgICAgY291dDw8IGkgPDwgJ1xuJzsKICAgIH0KfQoKCmludCBtYWluKCkgewogICAgSGVuZGkoKTsKICAgIGludCBUID0gMTsKICAgICBjaW4gPj4gVDsKICAgIHdoaWxlIChULS0pIHsKICAgICAgICBzb2x2ZSgpOwogICAgfQp9