#include #define int long long #define maxn 100005 using namespace std; const int mod=1e9+7; inline int ksm(int d,int z){ int res=1; while(z){ if(z&1)res=(res*d)%mod; d=(d*d)%mod;z>>=1; } return res; } int n,q,a[maxn],b[maxn],x[maxn],y[maxn],chafen[maxn]; int block,blo[maxn],blol[maxn],blor[maxn],tag[maxn]; inline int pf(int x){return (x*x%mod);} inline int lowbit(int x){return x&(-x);} inline void update(int id,int dt){ for(int i=id;i<=n;i+=lowbit(i)) chafen[i]+=dt; } inline int query(int id){ int sum=0; for(int i=id;i;i-=lowbit(i)) sum+=chafen[i]; return sum; } inline void modifyy(int id,int v){ int delta=v-y[id];delta=(delta%mod+mod)%mod; y[id]=v;int mul=delta*b[id]%mod; for(int i=id+1;i<=n;++i){ int DEL=(pf(mul)+2*b[i]*mul)%mod; chafen[i]=(chafen[i]+x[i]*((2*b[i]*DEL+pf(DEL))%mod)%mod)%mod; b[i]=(b[i]+mul)%mod;mul=(mul*y[i])%mod; } return; } inline void modifyx(int id,int v){ x[id]=v;chafen[id+1]=(v*pf(b[id]))%mod; return; } inline int ask(int id){ int s=1; for(int i=1;i<=id;++i) s+=chafen[i]; return s%mod; } signed main(){ // freopen("generator.in","r",stdin); // freopen("generator.out","w",stdout); ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); cin>>n>>q;a[0]=b[0]=1;block=sqrt(n); for(int i=1;i<=n;++i){ b[i]=(y[i-1]*b[i-1]+1)%mod; a[i]=(x[i-1]*pf(b[i-1])+a[i-1])%mod; chafen[i]=a[i]-a[i-1]; blo[i]=(i-1)/block+1; if(!blol[blo[i]])blol[blo[i]]=i; blor[blo[i]]=i; } while(q--){ char op;cin>>op; if(op=='x'){ int i,v;cin>>i>>v; modifyx(i,v); } else if(op=='y'){ int i,v;cin>>i>>v; modifyy(i,v); } else{ int k;cin>>k; cout<