#include using namespace std; #define mod 1000000007 const int MAX=1e5+7; long long tree[MAX*10],c[MAX]; long long n,a,b,q; long long expo(long long a,long long b) { long long x=1,y=a; while(b>0) { if(b%2==1) { x=(x*y); if(x>=mod) x=x%mod; } y=(y*y); if(y>=mod) y=y%mod; b=b/2; } return x; } void maketree(int beg,int last,int si) { if(beg==last) { tree[si]=c[beg]*(expo(b,beg)); tree[si]=tree[si]%mod; tree[si]=tree[si]*expo(expo(a,beg),mod-2); tree[si]=tree[si]%mod; if(beg%2==1) tree[si]=-tree[si]; if(tree[si]<0) tree[si]=(tree[si]+mod)%mod; return; } maketree(beg,(beg+last)/2,2*si+1); maketree((beg+last)/2+1,last,2*si+2); tree[si]=(tree[2*si+1]+tree[2*si+2])%mod; } void update(int beg,int last,int p,int q,int val,int si) { if(beg>q||lastq||last=last) return tree[si]; return (query(beg,(beg+last)/2,p,q,2*si+1)+query((beg+last)/2+1,last,p,q,2*si+2))%mod; } void gen() { maketree(0,n-1,0); } bool func(int l,int r) { long long temp=query(0,n-1,l,r,0); temp=temp*expo(a,l); temp=temp%mod; temp=temp*expo(expo(b,l),mod-2); temp=temp%mod; if(temp%mod==0) return true; return false; } int main() { //freopen("in.txt","r",stdin); scanf("%lld%lld%lld%lld",&n,&a,&b,&q); for(int i=0;i