#include <iostream>
#define int long long
using namespace std;
const int N=1e5+7,mod=1e9+7;
int fa[N*25],n,m,cnt,idx,id[N][25],rev[N*25];
int qpow(int a,int b) {
int res=1;
while(b) {
if(b&1)res=res%mod*a%mod;
a=a%mod*a%mod;
b>>=1;
}
return res;
}
int find(int x) {
if(fa[x]==x)return x;
else return fa[x]=find(fa[x]);
}
signed main() {
cin>>n>>m;
for(int i=1;i<=n;i++) {
for(int j=0;j<=20;j++) {
if(i+(1<<j)-1>n)break;
id[i][j]=++idx;
rev[idx]=i;
fa[idx]=idx;
}
}
for(int i=1;i<=m;i++) {
int l1,l2,r1,r2;
cin>>l1>>r1>>l2>>r2;
int len=r1-l1+1;
int w=__lg(len);
int x1=id[l1][w],x2=id[r1-(1<<w)+1][w],y1=id[l2][w],y2=id[r2-(1<<w)+1][w];
x1=find(x1),x2=find(x2),y1=find(y1),y2=find(y2);
if(x1!=y1)fa[x1]=y1;
if(x2!=y2)fa[x2]=y2;
}
for(int k=20;k>=1;k--) {
for(int i=1;i<=n;i++) {
if(i+(1<<k)-1>n)break;
int x=find(id[i][k]);
x=rev[x];
int x1=id[i][k-1],x2=id[i+(1<<(k-1))][k-1],y1=id[x][k-1],y2=id[x+(1<<(k-1))][k-1];
x1=find(x1),x2=find(x2),y1=find(y1),y2=find(y2);
if(x1!=y1)fa[x1]=y1;
if(x2!=y2)fa[x2]=y2;
}
}
for(int i=1;i<=n;i++) {
if(find(id[i][0])==id[i][0])cnt++;
}
cout<<9*qpow(10,cnt-1)%mod;
}
详情见此处