#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL MOD=1000000007;
const int maxn=100001;
LL mi2[maxn],inv2[maxn];

LL pm(LL a,LL n,LL p) {
	LL ret=1;
	for (a%=p;n;n>>=1,a=a*a%p)
		if (n&1) ret=ret*a%p;
	return ret;
}
LL inv(LL a,LL p) { return pm(a,p-2,p); }


struct VEC {
	LL x,y;
};

int n;
VEC pot[maxn];
LL sum[maxn];
void init() {
	for (int i=1;i<=n;i++)
		sum[i]=((sum[i-1]+mi2[i-1]*pot[i].y)%MOD+MOD)%MOD;  //最好是用mi2[i-1]，这样可以省掉cal里i==n时计算[1...-1]答案的特判
}
LL cal(int i) {
	LL ret=0;
	ret=((sum[n]-sum[i])+MOD)*inv2[i]%MOD;
	(ret+=sum[i-1]*mi2[n-i])%=MOD;
	ret=ret*pot[i].x%MOD;
	return ret;
}
int main() {
	mi2[0]=1;
	for (int i=1;i<=100000;i++) {
		mi2[i]=mi2[i-1]*2%MOD;
		inv2[i]=inv(mi2[i],MOD);
	}

	int T; scanf("%d",&T);
	for (LL ans;T--;) {
		scanf("%d",&n);
		for (int i=1;i<=n;i++) scanf("%lld %lld",&pot[i].x,&pot[i].y);
		ans=0;
		init(); for (int i=1;i<=n;i++) (ans=ans-cal(i)+MOD)%=MOD;
		for (int i=1;i<=n;i++) swap(pot[i].x,pot[i].y);
		init(); for (int i=1;i<=n;i++) (ans=ans+cal(i)+MOD)%=MOD;
		printf("%lld\n",ans);
	}
    return 0;
}

/*

   正负的问题其实很好处理。^_^

*/

