#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::vectora(k+2); for(lint i=1;i<=k;i++)std::cin>>a.at(i); a.at(k+1)=((1ll<fact(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=1;i<=k+1;i++){ if(a.at(i-1)&~a.at(i)){ std::cout<<0<<'\n'; return 0; } ans*=fact.at(__builtin_popcountll(a.at(i))-__builtin_popcountll(a.at(i-1))); } std::cout<