#pragma GCC optimize("Ofast") #pragma GCC target("avx2") #define rd(v) v=0;{long _c;while(_c=*rp++-48,_c>=0)v=v*10+_c;} #define wt(v) {ulong _z=v;do*--wp=_z%10+48;while(_z/=10);} #define rep(v,e) for(long v=0;v>=1; a=a*a%MD; } return z; } int main(){ mkfac(); long h,w; { char rbuf[64]; read(0,rbuf,sizeof rbuf); char*rp=rbuf; rd(h); rd(w); } long x=1,z=0; rep(i,h+1){ z=((long)ifac[i]*ifac[h-i]%MD*modpow(x-1,w)-z)%MD; x=x*2%MD; } z=(z+MD)*inverse(ifac[h])%MD; { char wbuf[64],*wp=wbuf+sizeof wbuf; wt(z); write(1,wp,wbuf+sizeof wbuf-wp); } _exit(0); }