#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ll;
const int N=1000000007;
const int N1=1e5+2;
struct loca{
ll x;
ll y;
ll z;
}a[N1];
int main(){
ll n,m;
cin>>n>>m;
while(m--){
ll k;
cin>>k;
ll a1,b,c,k1,l,r;
// int zz=1;
if(k==1){
cin>>l>>r>>a1>>b>>c;
for(ll i=l;i<=r;i++){
a[i].x+=a1;
a[i].y+=b;
a[i].z+=c;
}
}
else if(k==2){
cin>>l>>r>>k1;
for(ll i=l;i<=r;i++){
a[i].x*=k1;
a[i].x=a[i].x%N;
a[i].y*=k1;
a[i].y=a[i].y%N;
a[i].z*=k1;
a[i].z=a[i].z%N;
}
}
else if(k==3){
cin>>l>>r;
for(int i=l;i<=r;i++){
ll z1=a[i].z;//z
ll z2=a[i].y;//y
ll z3=a[i].x;
a[i].z=z3;
a[i].x=z2;
a[i].y=z1;
}
}
else if(k==4){
cin>>l>>r;
ll x1=0,y1=0,z1=0;
for(int i=l;i<=r;i++){
x1+=a[i].x;
y1+=a[i].y;
z1+=a[i].z;
}
x1=x1%N;
y1=y1%N;z1=z1%N;
ll sum=(x1*x1%N+y1*y1%N+z1*z1%N)%N;
cout<<sum<<endl;
}
}
}