#pragma once
// mod (2^61-1)structModInt261{usingmint=ModInt261;usingll=longlong;usingull=unsignedlonglong;staticconstintb=61;staticconstullm=(1ull<<b)-1;public:staticconstexprullget_mod(){returnm;}staticmintraw(intv){mintx;x._v=v;returnx;}ModInt261():_v(0){}ModInt261(intv):_v(v<0?m+v:v){}ModInt261(llv):_v(calc_mod(ull(v<0?m+v:v))){}ModInt261(ullv):_v(calc_mod(v)){}ullval()const{return_v;}mint&operator++(){_v++;if(_v==m)_v=0;return*this;}mint&operator--(){if(_v==0)_v=m;_v--;return*this;}mintoperator++(int){mintresult=*this;++*this;returnresult;}mintoperator--(int){mintresult=*this;--*this;returnresult;}mint&operator+=(constmint&rhs){_v+=rhs._v;if(_v>=m)_v-=m;return*this;}mint&operator-=(constmint&rhs){_v-=rhs._v;if(_v>=m)_v+=m;return*this;}mint&operator*=(constmint&rhs){__uint128_tz=_v;z*=rhs._v;_v=ull(z%m);return*this;}mint&operator/=(constmint&rhs){return*this=*this*rhs.inv();}mintoperator+()const{return*this;}mintoperator-()const{returnmint()-*this;}mintpow(longlongn)const{assert(0<=n);mintx=*this,r=1;while(n){if(n&1)r*=x;x*=x;n>>=1;}returnr;}mintinv()const{assert(_v);returnpow(m-2);}friendmintoperator+(constmint&lhs,constmint&rhs){returnmint(lhs)+=rhs;}friendmintoperator-(constmint&lhs,constmint&rhs){returnmint(lhs)-=rhs;}friendmintoperator*(constmint&lhs,constmint&rhs){returnmint(lhs)*=rhs;}friendmintoperator/(constmint&lhs,constmint&rhs){returnmint(lhs)/=rhs;}friendbooloperator==(constmint&lhs,constmint&rhs){returnlhs._v==rhs._v;}friendbooloperator!=(constmint&lhs,constmint&rhs){returnlhs._v!=rhs._v;}friendistream&operator>>(istream&is,mint&x){returnis>>x._v;}friendostream&operator<<(ostream&os,constmint&x){returnos<<x.val();}private:ull_v;ullcalc_mod(ullv){ullx=(v&m)+(v>>b);if(x>=m)x-=m;returnx;}};
#line 2 "modint/modint261.hpp"
// mod (2^61-1)structModInt261{usingmint=ModInt261;usingll=longlong;usingull=unsignedlonglong;staticconstintb=61;staticconstullm=(1ull<<b)-1;public:staticconstexprullget_mod(){returnm;}staticmintraw(intv){mintx;x._v=v;returnx;}ModInt261():_v(0){}ModInt261(intv):_v(v<0?m+v:v){}ModInt261(llv):_v(calc_mod(ull(v<0?m+v:v))){}ModInt261(ullv):_v(calc_mod(v)){}ullval()const{return_v;}mint&operator++(){_v++;if(_v==m)_v=0;return*this;}mint&operator--(){if(_v==0)_v=m;_v--;return*this;}mintoperator++(int){mintresult=*this;++*this;returnresult;}mintoperator--(int){mintresult=*this;--*this;returnresult;}mint&operator+=(constmint&rhs){_v+=rhs._v;if(_v>=m)_v-=m;return*this;}mint&operator-=(constmint&rhs){_v-=rhs._v;if(_v>=m)_v+=m;return*this;}mint&operator*=(constmint&rhs){__uint128_tz=_v;z*=rhs._v;_v=ull(z%m);return*this;}mint&operator/=(constmint&rhs){return*this=*this*rhs.inv();}mintoperator+()const{return*this;}mintoperator-()const{returnmint()-*this;}mintpow(longlongn)const{assert(0<=n);mintx=*this,r=1;while(n){if(n&1)r*=x;x*=x;n>>=1;}returnr;}mintinv()const{assert(_v);returnpow(m-2);}friendmintoperator+(constmint&lhs,constmint&rhs){returnmint(lhs)+=rhs;}friendmintoperator-(constmint&lhs,constmint&rhs){returnmint(lhs)-=rhs;}friendmintoperator*(constmint&lhs,constmint&rhs){returnmint(lhs)*=rhs;}friendmintoperator/(constmint&lhs,constmint&rhs){returnmint(lhs)/=rhs;}friendbooloperator==(constmint&lhs,constmint&rhs){returnlhs._v==rhs._v;}friendbooloperator!=(constmint&lhs,constmint&rhs){returnlhs._v!=rhs._v;}friendistream&operator>>(istream&is,mint&x){returnis>>x._v;}friendostream&operator<<(ostream&os,constmint&x){returnos<<x.val();}private:ull_v;ullcalc_mod(ullv){ullx=(v&m)+(v>>b);if(x>=m)x-=m;returnx;}};