神はこの質問はオフラインで強制的であると言います(スモッグ
我々は、それぞれの数として表され、問い合わせの一点に対処するために、単独で指摘し、ポイント修飾にシートをKE \(MUL * X +プラス\ )
初期状態で\(MUL = 1、プラス= 0 \)
操作1:合計を差し引い(ヴァル[POS [X]が\)\(\ (POS \)別個の位置を表し、\(ヴァル\)は、特定のポイントの値を表す);および\(ヴァル[POS [X]] \)になる)\(\ \ {新規新しいFRAC val_ {} {} -Plus MUL} ;場合\(POS [X] \)スタック位置がゼロでない、\(POS [X]は\)スタックに、プラス和\(val_ {新規} \)
操作2:\(PLUS \)プラス\(ヴァル\) 、更新の合計
操作3:乗算値がされていない(0 \)\ \(MUL \)、\ (PLUS \)と値との和を乗じ、値を乗じ\(0 \) 、全て番号割り当て\(0 \)、操作4を参照
操作4:値がされていない\(0 \)は、空のシェルをスタック、および\(ヴァル[STAは[トップ] ] \) となる\(0 \) 、および\(MUL \)は、となる(1 \します\) 、\は(PLUS \)となり\(ヴァル\) 、更新の合計を
操作5/6ます。val [POS [X]]または合計
逆に対処するための部門があり、
#include <bits/stdc++.h>
#define N 100005
#define mod 10000019
#define getchar nc
using namespace std;
inline char nc(){
static char buf[100000],*p1=buf,*p2=buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}
inline int read()
{
register int x=0,f=1;register char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
return x*f;
}
inline void write(register int x)
{
if(!x)putchar('0');if(x<0)x=-x,putchar('-');
static int sta[20];register int tot=0;
while(x)sta[tot++]=x%10,x/=10;
while(tot)putchar(sta[--tot]+48);
}
inline int fastpow(register int a,register int b)
{
int res=1;
while(b)
{
if(b&1)
res=1ll*res*a%mod;
a=1ll*a*a%mod;
b>>=1;
}
return res;
}
int n,m,t,ans,b[N*100],tot,sum,mul=1,pls,inv=1,f[N],in[N];
inline void modify(register int x,register int y)
{
sum=(sum+1ll*(mod-f[x])*mul+mod-pls)%mod;
f[x]=1ll*(y-pls+mod)*inv%mod;
if(!in[x])
b[++tot]=x,in[x]=1;
sum=(sum+y)%mod;
}
inline void plu(register int y)
{
sum=(sum+1ll*n*y)%mod;
pls=(pls+y)%mod;
}
inline void cover(register int y)
{
while(tot)
f[b[tot]]=0,in[b[tot--]]=0;
mul=inv=1,pls=y;
sum=1ll*n*y%mod;
}
inline void mult(register int y,register int z)
{
if(y)
{
sum=1ll*sum*y%mod;
mul=1ll*mul*y%mod;
pls=1ll*pls*y%mod;
inv=1ll*inv*z%mod;
}
else
cover(0);
}
inline int query(register int x)
{
return (1ll*f[x]*mul+pls)%mod;
}
int opt[N],x[N],y[N],z[N];
int main()
{
n=read()%mod,m=read();
for(register int i=0;i<m;++i)
{
opt[i]=read();
if(opt[i]==1||opt[i]==5)
x[i]=b[++tot]=read();
if(opt[i]<=4)
y[i]=(read()%mod+mod)%mod,z[i]=fastpow(y[i],mod-2);
}
sort(b+1,b+1+tot);
tot=unique(b+1,b+1+tot)-b-1;
for(register int i=0;i<m;++i)
if(opt[i]==1||opt[i]==5)
x[i]=lower_bound(b+1,b+1+tot,x[i])-b;
t=read();
for(register int i=tot=0;i<t;++i)
{
int a=read()%m,b=read()%m;
for(register int j=0,k=(a+b)%m;j<m;++j,k=(k+b)%m)
{
int o=opt[k];
if(o==1)
modify(x[k],y[k]);
else if(o==2)
plu(y[k]);
else if(o==3)
mult(y[k],z[k]);
else if(o==4)
cover(y[k]);
else if(o==5)
ans=(ans+query(x[k]))%mod;
else
ans=(ans+sum)%mod;
}
}
write(ans);
return 0;
}