#include #define ALL(v) std::begin(v),std::end(v) using lint=long long; using lubl=long double; struct mint{ lint value; mint()=default; mint(lint x):value(x){} }; std::ostream&operator<<(std::ostream&os,mint x){return os<>n>>k; std::vectorfact(n+1); fact.at(0)=1; for(lint i=1;i<=n;i++)fact.at(i)=fact.at(i-1)*i; mint ans=1; for(lint i=0,prv=0;i<=k;i++){ lint x; if(i==k)x=(1ll<>x; if(prv&~x){ std::cout<<0<<'\n'; return 0; } ans*=fact.at(__builtin_popcountll(x)-__builtin_popcountll(prv)); prv=x; } std::cout<