由于各位的贡献是独立的 ,可以分别考虑该位的贡献:
若数组中某数第j位不为0,假设有k个数为1,则有n-k个数为0.设要从整个数组中取i个数组成集合,该集合第j位贡献为sum(C[k][p]*C[n-k][i-p],C[i][i-1]*2^(n-k),...,c[i][0]*2^(n-k))==2^(i)*2^(n-k)==
#include<bits/stdc++.h>
using namespace std;
const int M = 1e9 + 7;
typedef long long ll;
int n,m;
ll solve(int ans){
ll a=2,b=n-1,res=1;
while(b){
if(b&1) res=res%M*a%M;
a=a%M*a%M;
b>>=1;
}
return ans*res%M;
}
int main(){
int t;
scanf("%d",&t);
while(t--){
int ans=0;
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
int l,r,x;
scanf("%d%d%d",&l,&r,&x);
ans=ans|x;
}
printf("%lld\n",solve(ans)%M);
}
return 0;
}