#include using namespace std; typedef long long int uli; const int mx=1e5+10; const uli mod=1e9+7; const int mxt=(mx<<2); uli c[mx]; uli pwr[mx]; struct node{ uli v; }; node st[mxt]; node mrg(node x,node y,int len){ return {(x.v+y.v*pwr[len])%mod}; } void init(int u,int l,int r){ if(l==r){ st[u].v=c[l]; } else{ int mid=(l+r)>>1; init(u+u+1,l,mid); init(u+u+2,mid+1,r); st[u]=mrg(st[u+u+1],st[u+u+2],mid-l+1); } } node qry(int u,int l,int r,int f,int t){//[f t] c [l r] if(l==f && r==t)return st[u]; int mid=(l+r)>>1; if(t<=mid)return qry(u+u+1,l,mid,f,t); if(f>mid)return qry(u+u+2,mid+1,r,f,t); return mrg( qry(u+u+1,l,mid,f,mid), qry(u+u+2,mid+1,r,mid+1,t), mid-f+1 ); } void upd(int u,int l,int r,int idx,uli v){ if(idxr)return; if(l==r){ st[u].v=v; } else{ int mid=(l+r)>>1; upd(u+u+1,l,mid,idx,v); upd(u+u+2,mid+1,r,idx,v); st[u]=mrg(st[u+u+1],st[u+u+2],mid-l+1); } } uli fxp(uli b,uli x){ uli a=1; for(;x!=0;b=b*b%mod,x>>=1) if(x&1ll)a=a*b%mod; return a; } int main(){ int n; uli a,b,x; int q; scanf("%d %lld %lld %d",&n,&a,&b,&q); for(int i=0;i