/* *********************************************** Author :kuangbin Created Time :2016/3/5 19:20:45 File Name :F:\ACM\2016ACM\BestCoder\BC74\B.cpp ************************************************ */ #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; int a[20]; int bit[20]; int dp[1<<17]; const int MOD = 1e9+7; int main() { //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); bit[0] = 1; for(int i = 1;i < 20;i++) { bit[i] = 2*bit[i-1]; } int T; scanf("%d",&T); while(T--) { int n,m; scanf("%d%d",&n,&m); for(int i = 0;i < n;i++) scanf("%d",&a[i]); memset(dp,-1,sizeof(dp)); dp[0] = 0; queueq; q.push(0); while(!q.empty()) { int u = q.front(); q.pop(); for (int i = 0;i < 17;i++) { int v = u^bit[i]; if (dp[v] != -1)continue; dp[v] = dp[u] + 1; q.push(v); } for (int i = 0;i < n;i++) { int v = u^a[i]; if(dp[v] != -1)continue; dp[v] = dp[u]+1; q.push(v); } } long long ans = 0; int s,t; for(int i = 1;i <= m;i++) { scanf("%d%d",&s,&t); ans = (ans + (long long)dp[s^t]*i)%MOD; } printf("%d\n",(int)ans); } return 0; }