code:
#include <bits/stdc++.h>
using namespace std;
const int N=5e6+5,P=1e9+7;
int n,m,p,k,w,lasp,startp,a[N],t[N];
long long b,res=1,memcnt,cnt[3],ans[N];
inline void restart(long long &seed,int base,int k,int &t1,int &a1){
int ret=seed;
seed=(seed*base+233)%P,t1=(ret&1)+1;
ret=seed;
seed=(seed*base+233)%P,a1=(ret%k)+1;
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin >> n >> m,startp=1;
if(n==1){cout << 1;return 0;}
for(int i=1;i<=m;++i){
cin >> p >> k >> b >> w;
for(int j=lasp+1;j<=p;++j) restart(b,w,k,t[j],a[j]),cnt[t[j]]+=a[j];
lasp=p;
}
if(cnt[t[1]]>cnt[3-t[1]]) for(int i=2;i<=n;++i) if(t[i]!=t[1]){startp=i,ans[1]=1,--a[i];break;}
for(int i=startp,j;i<startp+(n<<1);++i){
j=(i-1)%n+1;
if(t[j]==t[startp]){memcnt+=a[j],ans[j]+=a[j],a[j]=0;}
else if(memcnt<a[j]) a[j]-=memcnt,ans[j]+=memcnt,memcnt=0;
else ans[j]+=a[j],memcnt-=a[j],a[j]=0;
}
for(long long i=1;i<=n;++i) res*=(((ans[i]^(i*i))+1)%P),res%=P;
cout << res;
return 0;
}
WA on样例#2,但由于n太大了调不出来qwq。