#include #include #include #include using namespace std; int dp[1<<17]; int x[17]; vector dist[19]; int MAIN() { int T; cin >> T; while(T--) { int n, m; cin >> n >> m; memset(dp, 0xe, sizeof(dp)); dp[0] = 0; for(int i = 0; i < n; i++) cin >> x[i]; for(int mask = 0; mask < (1< 0) { s ^= x[i]; cnt ++; } dp[s] = min(dp[s], cnt); } for(int i = 0; i < (1<<17); i++) if(dp[i] < 18) dist[dp[i]].push_back(i); for(int i = 0; i <= 17; i++) for(int j = 0; j < dist[i].size(); j++) { int node = dist[i][j]; if(dp[node] != i) continue; for(int k = 0; k < 17; k++) { int t = node ^ (1< dp[node] + 1) { dp[t] = dp[node] + 1; dist[dp[t]].push_back(t); } } } long long ret = 0; long long mod = 1000000000 + 7; for(long long i = 1; i <= m; i++) { int s, t; cin >> s >> t; ret += i * dp[s^t]; ret %= mod; } cout << ret << endl; } return 0; } int main() { #ifdef LOCAL_TEST freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout); #endif ios :: sync_with_stdio(false); int ret = MAIN(); return ret; }