#include <bits/stdc++.h>
using namespace std;
const int MOD = 1000000007;
// Precompute powers of 2 up to maxN
vector<long long> pow2;
void precompute_pow2(int maxN) {
pow2.resize(maxN + 1);
pow2[0] = 1;
for (int i = 1; i <= maxN; i++) {
pow2[i] = (pow2[i - 1] * 2) % MOD;
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T;
cin >> T;
int maxN = 200000;
precompute_pow2(maxN);
while (T--) {
int N;
cin >> N;
vector<int> A(N);
for (int i = 0; i < N; i++) cin >> A[i];
// prefix counts of elements less than current value
// We'll need to compute counts quickly, so we use two passes
long long answer = 0;
// Step 1: For each element, find how many smaller elements are on the left
vector<int> leftCount(N), rightCount(N);
// Left side
vector<int> freq(N + 1, 0);
for (int i = 0; i < N; i++) {
int val = A[i];
long long smaller = 0;
// count of numbers < val seen so far
for (int x = 1; x < val; x++) smaller += freq[x];
leftCount[i] = smaller;
freq[val]++;
}
// Right side
fill(freq.begin(), freq.end(), 0);
for (int i = N - 1; i >= 0; i--) {
int val = A[i];
long long smaller = 0;
for (int x = 1; x < val; x++) smaller += freq[x];
rightCount[i] = smaller;
freq[val]++;
}
// Step 2: Calculate contribution for each element as max
for (int i = 1; i < N - 1; i++) {
long long L = leftCount[i];
long long R = rightCount[i];
if (L > 0 && R > 0) {
long long waysLeft = (pow2[L] - 1 + MOD) % MOD;
long long waysRight = (pow2[R] - 1 + MOD) % MOD;
long long contrib = (waysLeft * waysRight) % MOD;
answer = (answer + contrib) % MOD;
}
}
cout << answer % MOD << "\n";
}
return 0;
}