#include #define REP(i,n) for(int i=0,i##_len=(n);i> 1; } return ans; } ll inv_mod(ll a){return mpow(a,mod-2);} class Factorial{//階乗とその逆元を求めて計算に利用するクラス private: vector fac; vector ifac; public: Factorial(ll N){ fac.push_back(1); REP(i,N) fac.push_back(fac[i]*(i+1)%mod); ifac.resize(N+1); ifac[N]=inv_mod(fac[N]); REP(i,N) ifac[N-1-i]=(ifac[N-i]*(N-i))%mod; } ll fact(ll a){return fac[a];} ll ifact(ll a){return ifac[a];} ll cmb(ll a,ll b){ if(a==0&&b==0) return 1; if(a>d>>l>>r>>k; ll Ld,Rd; ll tmp=1; REP(i,d){ if(tmp<=l&&l<2*tmp) Ld=i; if(tmp<=r&&r<2*tmp) Rd=i; tmp*=2; } ll p=(Ld+Rd-k); if(p&1||p<0||d<=p/2){ cout<<0<