#include #define LL long long using namespace std; LL mod = 1e9 + 7; LL arr[1000010], pow2[1000010]; void pre(){ pow2[0] = 1; for(int i=1; i<1000010; i++){ pow2[i] = pow2[i-1] * 2; if(pow2[i] >= mod) pow2[i] -= mod; } } int main(){ LL T, N, ans, tmp, mul, c; pre(); cin >> T; assert(1 <= T && T<= 10); while(T--){ ans = 0; mul = 0; c = 0; scanf("%Ld",&N); assert(N >= 1 && N <= 1e5); for(int i = 0; i <= N; i++){ scanf("%Ld",&arr[i]); assert(arr[i] >= 1 && arr[i] <= 1e9); if(i == N) continue; if(i==0) tmp = (2 * arr[i]) % mod; else tmp = (arr[i] * pow2[i]) % mod; mul+=tmp; if(mul >= mod) mul-=mod; } for(int i = N; i >= 1; i--){ tmp = (arr[i] * mul) % mod; ans += tmp; if(ans >= mod) ans-=mod; tmp = (arr[i-1] * pow2[i-1]) % mod; tmp = (tmp * pow2[c]) % mod; mul -= tmp; if(mul < 0) mul+=mod; mul += mul; if(mul>=mod) mul-=mod; c++; } printf("%Ld\n",ans); } return 0; }