#include #include #include #include #include using namespace std; typedef long long LL; const int MOD = 1e9+7; int a[100010], last[100010]; LL f[100010], d[100010]; map m; int main() { memset(f, 0, sizeof(f)); f[0] = 1; for (int i = 1; i <= 100000; i++) f[i] = (f[i-1] << 1) % MOD; int t; scanf("%d", &t); while (t--) { memset(a, 0, sizeof(a)); memset(d, 0, sizeof(d)); memset(last, -1, sizeof(last)); m.clear(); int n; scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d", &a[i]); if (m[a[i]] != 0) last[i] = m[a[i]] - 1; m[a[i]] = i + 1; } LL ans = 0; for (int i = 0; i < n; i++) { if (last[i] == -1) d[i] = f[i]; else d[i] = ((f[i-last[i]-1] - 1) * f[last[i]+1] + d[last[i]]) % MOD; ans = (ans + (d[i] * f[n-i-1]) % MOD * a[i]) % MOD; } printf("%I64d\n", ans); } return 0; }