#include #define fi first #define se second #define pb push_back #define mp make_pair #define SZ(x) ((int)x.size()) #define ALL(x) x.begin(),x.end() #define L(i,u) for (register int i=head[u]; i; i=nxt[i]) #define rep(i,a,b) for (register int i=(a); i<=(b); i++) #define per(i,a,b) for (register int i=(a); i>=(b); i--) using namespace std; typedef long double ld; typedef long long ll; typedef unsigned int ui; typedef pair Pii; typedef pair Pll; typedef vector Vi; template inline void read(T &x){ x=0; char c=getchar(); int f=1; while (!isdigit(c)) {if (c=='-') f=-1; c=getchar();} while (isdigit(c)) {x=x*10+c-'0'; c=getchar();} x*=f; } template T gcd(T a, T b){return !b?a:gcd(b,a%b);} template inline void umin(T &x, T y){x=x inline void umax(T &x, T y){x=x>y?x:y;} mt19937 R(chrono::system_clock().now().time_since_epoch().count()); const int N = 1<<18|3, mo = 1e9+7, inv2 =(mo+1)/2; const ll MOD=7LL*mo*mo; inline void add(int &x, int y){x=x+y=0?x-y:x-y+mo;} inline int power(int a, int n) { int res=1; while (n) { if (n&1) res=1LL*res*a%mo; a=1LL*a*a%mo; n>>=1; } return res; } int n,a[N]; int main() { int t;read(t);while(t--){ read(n);rep(i,1,n)read(a[i]),a[i]>>=1; int res=a[1]; rep(i,2,n)res=(res+1ll*a[i]*(a[i]-a[i-1])%mo*power(2*a[i],mo-2))%mo; cout<