using O=void;using R=long long;using ab=long double;using af=bool;using ap=double;using az=unsigned;using aA=unsigned char;using aK=char;using aO=unsigned long long;using aP=__uint128_t;using aS=__int128_t; #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define aT const #define aU return #define aX constexpr #define aZ template #define bd operator #define bh int #define bi static_cast #define bp reinterpret_cast #define bq class #define br static #define by auto #define bC noexcept #define bD namespace #define bE using #define bH for #define bI while #define bP inline #define ca struct #define cb this #define cd friend #define cg unsigned #define ch typename #define ci false #define cj continue #define cp requires #define cq else #define cw true #define cI sizeof #define cJ decltype #define cK delete #define dp private #define dq explicit #define dr public #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include aZbE aB=std::pair; #include #include #include aZbE F=std::vector; #include #include #include #include #if defined(__GNUC__) && !defined(__clang__) #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #endif #define dump(...) #define CPP_DUMP_SET_OPTION(...) #define CPP_DUMP_DEFINE_EXPORT_OBJECT(...) #define CPP_DUMP_DEFINE_EXPORT_ENUM(...) #define CPP_DUMP_DEFINE_DANGEROUS_EXPORT_OBJECT(...) bD bc{bD ew{bD au{aZca iI:std::false_type{};aZca iI())),cJ(std::end(std::declval()))>>:std::true_type{};aZbP aX af ev=iI::value;aZbE jS=cJ(*std::begin(std::declval()));aZbE kl=std::remove_cv_t>>;aZca hK{bE type=kl;};aZca hK>::value_type>>{bE type=ch std::remove_cv_t>::value_type;};aZbE hE=ch hK::type;aZca hX:std::false_type{};aZca hX:std::bool_constant,aK>>{};aZca kc:std::bool_constant,std::string>||std::is_same_v,aT aK*>||std::is_same_v,aK*>||hX>::value>{};aZbP aX af fs=kc::value;aZca hT:std::false_type{};aZca hT().val())>>:std::true_type{};aZbP aX af hO=hT::value;aZca hI:std::false_type{};aZca hI()))>>:std::true_type{};aZbP aX af jN=hI::value;aZbP aX af fB=std::is_integral_v||std::is_same_v,aS>||std::is_same_v,aP>;aZbP aX af gq=std::is_signed_v||std::is_same_v,aS>;aZca gl{bE type=std::make_unsigned_t;};aZ<>ca gl{bE type=aP;};aZ<>ca gl{bE type=aP;};aZbE ka=ch gl>::type;}ca dx{br aX bh cz=1<<20;dp:std::FILE*dZ;aK ba[cz];bh am;bh bJ;bh fr;af gr;af iY(){am=0;if(gr){ssize_t ae;do{ae=::read(fr,ba,cz);}bI(ae<0&&errno==EINTR);if(ae<=0){bJ=0;aU ci;}bJ=bh(ae);}cq{bJ=bh(std::fread(ba,1,cz,dZ));}aU bJ!=0;}aZaf jJ(T&w){if(!fE())aU ci;bh c=bR();af cC=ci;if(c=='-'){cC=cw;c=bR();}if aX(au::gq){T o=0;bI('0'<=c&&c<='9'){o=cC?o*10-(c-'0'):o*10+(c-'0');c=bR();}w=o;}cq{T o=0;bI('0'<=c&&c<='9'){o=o*10+T(c-'0');c=bR();}w=cC?T(0)-o:o;}aU cw;}af kf(){if(bJ-am>=64)aU cw;aT bh dz=bJ-am;if(dz>0)std::memmove(ba,ba+am,dz);aT bh kN=bh(std::fread(ba+dz,1,cz-dz,dZ));am=0;bJ=dz+kN;if(bJ=0&&::fstat(fr,&jb)==0&&!S_ISREG(jb.st_mode);}()){}dx(aT dx&)=cK;dx&bd=(aT dx&)=cK;bh bR(){if(am==bJ&&!iY())aU EOF;aU ba[am++];}af fE(){bh c=bR();bI(c!=EOF&&c<=' ')c=bR();if(c==EOF)aU ci;--am;aU cw;}af read(aK&w){if(!fE())aU ci;w=aK(bR());aU cw;}af read(std::string&w){if(!fE())aU ci;w.clear();bI(cw){aT bh begin=am;bI(am(ba[am])>' '){++am;}w.append(ba+begin,am-begin);if(amstd::enable_if_t&&!std::is_same_v,af>&&!std::is_same_v,aK>,af>read(T&w){if(gr)aU jJ(w);if(!kf())aU ci;bh c=bi(ba[am++]);bI(c<=' ')c=bi(ba[am++]);af cC=ci;if(c=='-'){cC=cw;c=bi(ba[am++]);}if aX(au::gq){T o=0;bI('0'<=c&&c<='9'){aT bh ad=c-'0';aT bh al=bi(ba[am])-'0';if(0<=al&&al<=9){o=cC?o*100-(ad*10+al):o*100+(ad*10+al);++am;}cq{o=cC?o*10-ad:o*10+ad;}c=bi(ba[am++]);}w=o;}cq{T o=0;bI('0'<=c&&c<='9'){aT az ad=az(c-'0');aT bh al=bi(ba[am])-'0';if(0<=al&&al<=9){o=o*100+T(ad*10+az(al));++am;}cq{o=o*10+T(ad);}c=bi(ba[am++]);}w=cC?T(0)-o:o;}if(am>bJ)am=bJ;aU cw;}aZstd::enable_if_t,af>read(T&w){if(!fE())aU ci;bh c=bR();af cC=ci;if(c=='-'||c=='+'){cC=c=='-';c=bR();}ab o=0;bI('0'<=c&&c<='9'){o=o*10+(c-'0');c=bR();}if(c=='.'){ab je=0.1L;c=bR();bI('0'<=c&&c<='9'){o+=(c-'0')*je;je*=0.1L;c=bR();}}if(c=='e'||c=='E'){c=bR();af hM=ci;if(c=='-'||c=='+'){hM=c=='-';c=bR();}bh bk=0;bI('0'<=c&&c<='9'){bk=bk*10+(c-'0');c=bR();}ab gZ=1;ab gV=10;bI(bk>0){if(bk&1)gZ*=gV;gV*=gV;bk>>=1;}o=hM?o/gZ:o*gZ;}w=bi(cC?-o:o);aU cw;}aZstd::enable_if_t&&!au::fB&&!au::ev,af>read(T&w){R x;if(!read(x))aU ci;if aX(au::jN){if(x>=0&&uint64_t(x)af read(aB&w){if(!read(w.first))aU ci;aU read(w.second);}aZstd::enable_if_t&&!au::fs,af>read(dh&gY){bE dR=au::hE;aX af fO=au::ev&&!au::fs;bH(by&&w:gY){if aX(std::is_same_v&&!fO){af x;if(!read(x))aU ci;w=x;}cq{if(!read(w))aU ci;}}aU cw;}aZaf read(eb&ad,eW&al,hc&...rest){if(!read(ad))aU ci;aU read(al,rest...);}aZdx&bd>>(T&w){if(!read(w))std::abort();aU*cb;}};ca cY{br aX bh cz=1<<20;dp:bP br aT by eQ=[]{std::arrayo{};bH(bh i=0;i<10000;i++){bh w=i;bH(bh j=3;j>=0;j--){o[4*i+j]=aK('0'+w%10);w/=10;}}aU o;}();std::FILE*dZ;aK ba[cz];bh am;bh eR;std::chars_format fA;aK gg;dr:dq cY(std::FILE*fP=stdout):dZ(fP),am(0),eR(6),fA(std::chars_format::general),gg(' '){}cY(aT cY&)=cK;cY&bd=(aT cY&)=cK;~cY(){fR();}O fR(){if(am!=0){std::fwrite(ba,1,am,dZ);am=0;}std::fflush(dZ);}O cA(aK c){if(am==cz)fR();ba[am++]=c;}O bL(aT aK*s){bI(*s!='\0')cA(*s++);}O bL(aT std::string&s){std::size_t bt=0;bI(bt(cz-am,s.size()-bt);std::memcpy(ba+am,s.data()+bt,ez);am+=bh(ez);bt+=ez;}}O bL(aK c){cA(c);}O bL(af w){cA(w?'1':'0');}aZstd::enable_if_t>bL(T w){aK df[128];by[end,kP]=std::to_chars(df,df+cI(df),w,fA,eR);if(kP!=std::errc())std::abort();bH(aT aK*gI=df;gI!=end;gI++){cA(*gI);}}aZstd::enable_if_t&&!std::is_same_v,af>&&!std::is_same_v,aK> >bL(T w){bE jj=std::remove_cv_t;bE eU=au::ka;eU aV;if aX(au::gq){if(w<0){cA('-');aV=eU(0)-eU(w);}cq{aV=eU(w);}}cq{aV=w;}if(aV==0){cA('0');aU;}az iS[16];bh ce=0;bI(aV>=10000){aT eU ay=aV/10000;iS[ce++]=az(aV-ay*10000);aV=ay;}if(am>cz-64)fR();aT az cE=az(aV);aT aK*ad=eQ.data()+4*cE;bh hj=cE<10?3:cE<100?2:cE<1000?1:0;bH(;hj<4;hj++)ba[am++]=ad[hj];bI(ce--){aT aK*df=eQ.data()+4*iS[ce];std::memcpy(ba+am,df,4);am+=4;}}aZstd::enable_if_t&&!au::fB&&!au::ev >bL(aT T&w){bL(w.val());}aZO bL(aT aB&w){bL(w.first);cA(' ');bL(w.second);}aZstd::enable_if_t&&!au::fs >bL(aT dh&gY){bE dR=au::hE;aX af fO=au::ev&&!au::fs;af ad=cw;bH(aT by&w:gY){if(!ad)cA(fO?'\n':gg);ad=ci;if aX(std::is_same_v&&!fO){bL(bi(w));}cq{bL(w);}}}aZO gW(aT eb&ad,aT hc&...rest){bL(ad);((cA(' '),bL(rest)),...);}O println(){cA('\n');}O lz(bh bT){eR=bT;}O lJ(bh bT=6){fA=std::chars_format::fixed;eR=bT;}O lD(bh bT=6){fA=std::chars_format::general;eR=bT;}O lu(aK kE){gg=kE;}aZO println(aT Args&...args){gW(args...);cA('\n');}aZcY&bd<<(aT T&w){bL(w);aU*cb;}};}}bE bD std;bD bc{bD cN{bP ew::dx&cu(){br ew::dx gy;aU gy;}bP ew::cY&bV(){br ew::cY gy;aU gy;}}}bE ll=R;bE Y=cg bh;bE cv=aO;bE hg=__int128;bE md=cg __int128; #ifdef __SIZEOF_FLOAT128__ bE mb=__float128; #endif aZaX T bX=0;aZ<>aX bh bX =1'000'000'000;aZ<>aX ll bX =ll(bX)*bX*2;aZ<>aX Y bX =bX;aZ<>aX cv bX =bX;aZ<>aX hg bX =hg(bX)*bX;aZ<>aX ap bX =bX;aZ<>aX ab bX =bX;bE pi=pair;bE pl=pair;bE vi=vector;bE vl=vector;aZbE vc=vector;aZbE ht=vector>;bE mk=ht;bE ml=ht;aZbE la=vector>;aZbE kX=vector>;aZbE lS=vector>;aZbE mj=std::priority_queue,greater>;aZbE me=unordered_map; #define vv(type, name, h, ...) vector> name(h, vector(__VA_ARGS__)) #define vvv(type, name, h, w, ...) vector>> name(h, vector>(w, vector(__VA_ARGS__))) #define vvvv(type, name, a, b, c, ...) vector>>> name( a, vector>>(b, vector>(c, vector(__VA_ARGS__)))) #define overload4(a, b, c, d, e, ...) e #define overload3(a, b, c, d, ...) d #define FOR1(a) for (ll _ = 0; _ < (ll)a; ++_) #define FOR2(i, a) for (ll i = 0; i < (ll)a; ++i) #define FOR3(i, a, b) for (ll i = a; i < (ll)b; ++i) #define FOR4(i, a, b, c) for (ll i = a; i < (ll)b; i += (c)) #define FOR1_R(a) for (ll i = (a) - 1; i >= 0; --i) #define FOR2_R(i, a) for (ll i = (a) - 1; i >= 0; --i) #define FOR3_R(i, a, b) for (ll i = (b) - 1; i >= (ll)a; --i) #define FOR(...) overload4(__VA_ARGS__, FOR4, FOR3, FOR2, FOR1)(__VA_ARGS__) #define FOR_R(...) overload3(__VA_ARGS__, FOR3_R, FOR2_R, FOR1_R)(__VA_ARGS__) #define FORI1(a) for (int _ = 0; _ < (int)a; ++_) #define FORI2(i, a) for (int i = 0; i < (int)a; ++i) #define FORI3(i, a, b) for (int i = a; i < (int)b; ++i) #define FORI4(i, a, b, c) for (int i = a; i < (int)b; i += (c)) #define FORI1_R(a) for (int i = (a) - 1; i >= 0; --i) #define FORI2_R(i, a) for (int i = (a) - 1; i >= 0; --i) #define FORI3_R(i, a, b) for (int i = (b) - 1; i >= (int)a; --i) #define FORI(...) overload4(__VA_ARGS__, FORI4, FORI3, FORI2, FORI1)(__VA_ARGS__) #define FORI_R(...) overload3(__VA_ARGS__, FORI3_R, FORI2_R, FORI1_R)(__VA_ARGS__) #define FOR_subset(t, s) for (int t = (s); t >= 0; t = (t == 0 ? -1 : (t - 1) & (s))) #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() bh gQ(bh x){aU __builtin_popcount(x);}bh gQ(Y x){aU __builtin_popcount(x);}bh gQ(ll x){aU __builtin_popcountll(x);}bh gQ(cv x){aU __builtin_popcountll(x);}bh go(bh x){aU __builtin_parity(x);}bh go(Y x){aU __builtin_parity(x);}bh go(ll x){aU __builtin_parityll(x);}bh go(cv x){aU __builtin_parityll(x);}bh gS(bh x){aU(x==0?-1:31-__builtin_clz(x));}bh gS(Y x){aU(x==0?-1:31-__builtin_clz(x));}bh gS(ll x){aU(x==0?-1:63-__builtin_clzll(x));}bh gS(cv x){aU(x==0?-1:63-__builtin_clzll(x));}bh gO(bh x){aU(x==0?-1:__builtin_ctz(x));}bh gO(Y x){aU(x==0?-1:__builtin_ctz(x));}bh gO(ll x){aU(x==0?-1:__builtin_ctzll(x));}bh gO(cv x){aU(x==0?-1:__builtin_ctzll(x));}aZT fQ(T a,T b){aU a/b-(a%b&&(a^b)<0);}aZT kY(T x,T y){aU fQ(x+y-1,y);}aZT lZ(T x,T y){aU x-y*fQ(x,y);}aZpairgM(T x,T y){T q=fQ(x,y);aU{q,x-q*y};}aZT mf(U x_,bh n){T x=x_;T js=1;bI(n>0){if(n&1)js*=x;x*=x;n>>=1;}aU js;}aZT mg(aT vector&A){T sm=0;bH(by&&a:A)sm+=a;aU sm;} #define LB(c, x) distance((c).begin(), lower_bound(all(c), (x))) #define UB(c, x) distance((c).begin(), upper_bound(all(c), (x))) #define UNIQUE(x) sort(all(x)), x.erase(unique(all(x)), x.end()), x.shrink_to_fit() aZbP af lV(T&a,aT S&b){aU(abP af lW(T&a,aT S&b){aU(a>b?a=b,1:0);}vclO(aT string&S,aK ku){vcA(S.size());FOR(i,S.size()){A[i]=(S[i]!='?'?S[i]-ku:-1);}aU A;}aZvectorlQ(vector&A,bh lh=1){bh N=A.size();vectorB(N+1);FOR(i,N){B[i+1]=B[i]+A[i];}if(lh==0)B.erase(B.begin());aU B;}aZvectorlL(aT vector&A){vectorhm(A.size());iota(all(hm),0);sort(all(hm),[&](bh i,bh j){aU(A[i]==A[j]?ivclI(aT vc&A,aT vc&I){vcB(I.size());FOR(i,I.size())B[i]=A[I[i]];aU B;}aZaX by lf(T...a){aU lf(initializer_list>{a...});}aZaX by le(T...a){aU le(initializer_list>{a...});}aZaf ji(Ts&...ac){aU bc::cN::cu().read(ac...);}aZO gW(aT Ts&...ac){bc::cN::bV().println(ac...);}O lT(af b){bc::cN::bV().println(b?"YES":"NO");}O lU(af b){bc::cN::bV().println(b?"Yes":"No");}O mh(){bc::cN::bV().println("YES");}O NO(){bc::cN::bV().println("NO");}O mi(){bc::cN::bV().println("Yes");}O No(){bc::cN::bV().println("No");}by&lR=bc::cN::cu();by&lM=bc::cN::bV(); #if (defined(__GNUC__) || defined(__clang__)) && (defined(__x86_64__) || defined(__i386__)) #define M1UNE_BIGINT_HAS_X86_SIMD 1 #endif #if defined(__GNUC__) && !defined(__clang__) && (defined(__x86_64__) || defined(__i386__)) && !defined(M1UNE_FPS_DISABLE_X86_SIMD) #define M1UNE_FPS_HAS_X86_SIMD 1 #pragma GCC push_options #pragma GCC target("avx2,bmi") #endif #ifdef M1UNE_FPS_HAS_X86_SIMD bD bc{bD hl{bD au{bD cZ{bE Y=az;bE cv=aO;bE aJ=std::size_t;bE G=__m256i;bP O ar(O*p,G x){_mm256_store_si256((G*)p,x);}bP G ai(aT O*p){aU _mm256_load_si256((aT G*)p);}aX Y eE(Y x,Y M){aU std::min(x,x-M);}aX Y ma(Y x,Y M){aU std::min(x,x+M);}aX Y eA(cv x,Y H,Y M){aU(x+cv(Y(x)*H)*M)>>32;}aX Y co(Y x,Y y,Y H,Y M){aU eA(cv(x)*y,H,M);}aX Y bm(Y x,Y y,Y H,Y M){aU eE(eA(cv(x)*y,H,M),M);}aX Y hq(Y a,Y b,Y H,Y M,Y r){bH(;b;b>>=1,a=co(a,a,H,M)){if(b&1){r=co(r,a,H,M);}}aU r;}aX Y jf(Y a,Y b,Y H,Y M,Y r){aU eE(hq(a,b,H,M,r),M);}bP G bv(G x,G M){aU _mm256_min_epu32(x,_mm256_sub_epi32(x,M));}bP G kL(G x,G M){aU _mm256_min_epu32(x,_mm256_add_epi32(x,M));}bP G cF(G x,G y,G){aU _mm256_add_epi32(x,y);}bP G bK(G x,G y,G M){aU _mm256_add_epi32(_mm256_sub_epi32(x,y),M);}bP G bl(G x,G y,G M){aU bv(_mm256_add_epi32(x,y),M);}bP G cf(G x,G y,G M){aU kL(_mm256_sub_epi32(x,y),M);}aZbP G lN(G x,G M){aU _mm256_blend_epi32(x,_mm256_sub_epi32(M,x),lg);}bP G eA(G a,G b,G H,G M){G c=_mm256_mul_epu32(a,H),d=_mm256_mul_epu32(b,H);c=_mm256_mul_epu32(c,M),d=_mm256_mul_epu32(d,M);aU _mm256_blend_epi32(_mm256_srli_epi64(_mm256_add_epi64(a,c),32),_mm256_add_epi64(b,d),0xaa);}bP G co(G a,G b,G H,G M){aU eA(_mm256_mul_epu32(a,b),_mm256_mul_epu32(_mm256_srli_epi64(a,32),_mm256_srli_epi64(b,32)),H,M);}bP G bm(G a,G b,G H,G M){aU bv(co(a,b,H,M),M);}bP G dC(G a,G b,G H,G M){aU eA(_mm256_mul_epu32(a,b),_mm256_mul_epu32(_mm256_srli_epi64(a,32),b),H,M);}bP G cm(G a,G b,G ff,G M){G cc=_mm256_mul_epu32(a,ff),dd=_mm256_mul_epu32(_mm256_srli_epi64(a,32),ff);G c=_mm256_mul_epu32(a,b),d=_mm256_mul_epu32(_mm256_srli_epi64(a,32),b);cc=_mm256_mul_epu32(cc,M),dd=_mm256_mul_epu32(dd,M);aU _mm256_blend_epi32(_mm256_srli_epi64(_mm256_add_epi64(c,cc),32),_mm256_add_epi64(d,dd),0xaa);}bP G lK(G a,G b,G ff,G M){G cc=_mm256_mul_epu32(a,ff),dd=_mm256_mul_epu32(_mm256_srli_epi64(a,32),_mm256_srli_epi64(ff,32));G c=_mm256_mul_epu32(a,b),d=_mm256_mul_epu32(_mm256_srli_epi64(a,32),_mm256_srli_epi64(b,32));cc=_mm256_mul_epu32(cc,M),dd=_mm256_mul_epu32(dd,M);aU _mm256_blend_epi32(_mm256_srli_epi64(_mm256_add_epi64(c,cc),32),_mm256_add_epi64(d,dd),0xaa);}bP G fG(G a,G bu,G M){G cc=_mm256_mul_epu32(a,bu),c=_mm256_mul_epu32(a,_mm256_srli_epi64(bu,32));cc=_mm256_mul_epu32(cc,M);aU bv(_mm256_srli_epi64(_mm256_add_epi64(c,cc),32),M);}aX by ct=26,ex=6;aX by dE=aJ(1)<fT[ct-2],fS[ct-2],hf,hk,he,fm[ct-3],iZ[ct-3],fg[ct-3],iO[ct-3],ho,hp,iW,iX,hh,iM,hi,iN;aX dQ(aT Y m):D(m),cQ(m*2),H([&]{Y n=2+m;bH(bh i=0;i<4;++i){n*=2+m*n;}aU n;}()),aE((-m)%m),r2((-cv(m))%m),r3(bm(r2,r2,H,m)),cS{},fN{},eg{},fT{},fS{},hf{},hk{},he{},fm{},iZ{},fg{},iO{},ho{},hp{},iW{},iX{},hh{},iM{},hi{},iN{}{aT bh k=__builtin_ctz(m-1);Y _g=co(3,r2,H,D);bH(;;++_g){if(jf(_g,D>>1,H,D,aE)!=aE){break;}}_g=hq(_g,D>>k,H,D,aE);Y bZ[ct-1],bO[ct-1];bZ[k-2]=_g,bO[k-2]=hq(_g,D-2,H,D,aE);bH(bh i=k-2;i>0;--i){bZ[i-1]=co(bZ[i],bZ[i],H,D);bO[i-1]=co(bO[i],bO[i],H,D);}eg[k-1]=jf(_g,3,H,D,aE);bH(bh i=k-1;i>0;--i){eg[i-1]=bm(eg[i],eg[i],H,D);}cS=bZ[0],fN=cS*H;hf={aE,0,aE,0,aE};hk={bZ[1],0,bZ[0],0,D-bm(bZ[0],bZ[1],H,D)};he={bO[1],0,bO[0],0,bm(bO[0],bO[1],H,D)};Y pr=aE,ei=aE;bH(bh i=0;ibY[ct>>1];aT G ao=_mm256_set1_epi32(aC->D),J=_mm256_set1_epi32(aC->cQ),bG=_mm256_set1_epi32(aC->H);aT G dH=_mm256_set1_epi32(aC->cS),dD=_mm256_set1_epi32(aC->fN),id=_mm256_setr_epi32(0,2,0,4,0,2,0,4);aT bh eG=__builtin_ctzll(n);std::fill(bY,bY+(eG>>1),aC->hk);aT aJ nn=n>>(eG&1),m=std::min(n,dE),mm=std::min(nn,dE);if(nn!=n){bH(aJ i=0;i>2;L>0;L>>=2){bH(aJ i=0;i>1;bH(aJ L=(aJ(1)<>2;L>=dE;L>>=2,t-=2,--p){by rt=ai(bY+p);aT by r1=_mm256_permutevar8x32_epi32(rt,id);aT by ed=_mm256_permutevar8x32_epi32(_mm256_mul_epu32(rt,bG),id);rt=fG(rt,ai(aC->fT+__builtin_ctzll(~j>>t)),ao);aT by r2=_mm256_shuffle_epi32(r1,_MM_PERM_BBBB),hn=_mm256_shuffle_epi32(r1,_MM_PERM_DDDD);aT by gX=_mm256_shuffle_epi32(ed,_MM_PERM_BBBB),kM=_mm256_shuffle_epi32(ed,_MM_PERM_DDDD);ar(bY+p,rt);bH(aJ i=0;i>2;L;l=L,L>>=2,t-=2,--p){by rt=ai(bY+p);bH(aJ i=(j==0?l:0),k=(j+i)>>t;ifT+__builtin_ctzll(~k)),ao);}ar(bY+p,rt);}}}aZbP O iy(G*aT f,aJ n,aT dQ*aT aC){alignas(32)std::arraybY[ct>>1];aT G ao=_mm256_set1_epi32(aC->D),J=_mm256_set1_epi32(aC->cQ),bG=_mm256_set1_epi32(aC->H);aT G dH=_mm256_set1_epi32(aC->cS),dD=_mm256_set1_epi32(aC->fN),id=_mm256_setr_epi32(0,2,0,4,0,2,0,4);aT bh eG=__builtin_ctzll(n);std::fill(bY,bY+(ex>>1),aC->hf);std::fill(bY+(ex>>1),bY+(ct>>1),aC->he);aT aJ nn=n>>(eG&1),mm=std::min(nn,dE);bH(aJ j=0;j>t;ifS+__builtin_ctzll(~k)),ao);}ar(bY+p,rt);}bh tt=std::min(__builtin_ctzll(~(j>>ex))+ex,eG);bH(aJ L=dE,l=L<<2;t<=tt;L=l,l<<=2,t+=2,++p){if((j+dE)==l){if(eE&&l==n){bH(aJ i=0;ifS+__builtin_ctzll(~j>>t)),ao);aT by r2=_mm256_shuffle_epi32(r1,_MM_PERM_BBBB),r3=_mm256_shuffle_epi32(r1,_MM_PERM_DDDD);aT by gX=_mm256_shuffle_epi32(ed,_MM_PERM_BBBB),kR=_mm256_shuffle_epi32(ed,_MM_PERM_DDDD);ar(bY+p,rt);bH(aJ i=0;iaE;aT by D=aC->D,H=aC->H;aT by Fx=_mm256_set1_epi32(bm((D-((D-1)>>(__builtin_ctzll(lm)))),aC->r3,H,D));aT by bG=_mm256_set1_epi32(H),ao=_mm256_set1_epi32(D),J=_mm256_set1_epi32(aC->cQ);bH(aJ i=0;ieg[__builtin_ctzll(~i)],H,D);}}bP O jE(G*aT o,aT G*aT f,aT G*aT g,aJ lm,aT dQ*aT aC){Y RR=aC->aE;aT by D=aC->D,H=aC->H;aT by Fx=_mm256_set1_epi32(bm((D-((D-1)>>(__builtin_ctzll(lm)))),aC->r3,H,D));aT by bG=_mm256_set1_epi32(H),ao=_mm256_set1_epi32(D),J=_mm256_set1_epi32(aC->cQ);bH(aJ i=0;ieg[__builtin_ctzll(~i)],H,D);}}}}}} #endif #ifdef M1UNE_FPS_HAS_X86_SIMD #pragma GCC pop_options #endif bD bc{bD cP{aZca ag{dp:uint32_t W;dr:br aX uint32_t D(){aU bU;}br aX ag cT(uint32_t v)bC{ag x;x.W=v;aU x;}aX ag()bC:W(0){}aZ,bh> =0>aX ag(dY v)bC{if aX(std::is_signed_v){int64_t x=bi(v)%bi(bU);if(x<0)x+=bU;W=bi(x);}cq{W=bi(bi(v)%bU);}}aX uint32_t val()aT bC{aU W;}aX ag&bd++()bC{W++;if(W==bU)W=0;aU*cb;}aX ag&bd--()bC{if(W==0)W=bU;W--;aU*cb;}aX ag bd++(bh)bC{ag bg=*cb;++*cb;aU bg;}aX ag bd--(bh)bC{ag bg=*cb;--*cb;aU bg;}aX ag&bd+=(aT ag&E)bC{W+=E.W;if(W>=bU)W-=bU;aU*cb;}aX ag&bd-=(aT ag&E)bC{W-=E.W;if(W>=bU)W+=bU;aU*cb;}aX ag&bd*=(aT ag&E)bC{uint64_t z=W;z*=E.W;W=bi(z%bU);aU*cb;}aX ag&bd/=(aT ag&E)bC{aU*cb*=E.inv();}aX ag bd+(aT ag&E)aT bC{aU ag(*cb)+=E;}aX ag bd-(aT ag&E)aT bC{aU ag(*cb)-=E;}aX ag bd*(aT ag&E)aT bC{aU ag(*cb)*=E;}aX ag bd/(aT ag&E)aT bC{aU ag(*cb)/=E;}aX af bd==(aT ag&E)aT bC{aU W==E.W;}aX af bd!=(aT ag&E)aT bC{aU W!=E.W;}aX ag pow(R n)aT bC{ag bg=cT(1%bU);ag x=n<0?inv():*cb;uint64_t bk=n<0?uint64_t(-(n+1))+1:uint64_t(n);bI(bk>0){if(bk&1)bg*=x;x*=x;bk>>=1;}aU bg;}aX ag inv()aT bC{int64_t a=W,b=bU,u=1,v=0;bI(b){int64_t t=a/b;a-=t*b;std::swap(a,b);u-=t*v;std::swap(u,v);}(O)0;u%=bU;if(u<0)u+=bU;aU cT(bi(u));}cd std::ostream&bd<<(std::ostream&os,aT ag&E){aU os<>(std::istream&is,ag&E){R v;is>>v;E=ag(v);aU is;}};bE lx=ag<998244353>;bE lw=ag<1000000007>;aZca as{dp:uint32_t W;bP br uint32_t bM=1;dr:br uint32_t D()bC{aU bM;}br O lP(uint32_t kI)bC{(O)0;(O)0;bM=kI;}br as cT(uint32_t v)bC{(O)0;as x;x.W=v;aU x;}as()bC:W(0){}aZ,bh> =0>as(dY v)bC{if aX(std::is_signed_v){int64_t x=bi(v)%bi(bM);if(x<0)x+=bM;W=bi(x);}cq{W=bi(bi(v)%bM);}}uint32_t val()aT bC{aU W;}as&bd++()bC{W++;if(W==bM)W=0;aU*cb;}as&bd--()bC{if(W==0)W=bM;W--;aU*cb;}as bd++(bh)bC{as o=*cb;++*cb;aU o;}as bd--(bh)bC{as o=*cb;--*cb;aU o;}as&bd+=(aT as&E)bC{W+=E.W;if(W>=bM)W-=bM;aU*cb;}as&bd-=(aT as&E)bC{W-=E.W;if(W>=bM)W+=bM;aU*cb;}as&bd*=(aT as&E)bC{W=bi(uint64_t(W)*E.W%bM);aU*cb;}as&bd/=(aT as&E)bC{aU*cb*=E.inv();}as bd+(aT as&E)aT bC{aU as(*cb)+=E;}as bd-(aT as&E)aT bC{aU as(*cb)-=E;}as bd*(aT as&E)aT bC{aU as(*cb)*=E;}as bd/(aT as&E)aT bC{aU as(*cb)/=E;}af bd==(aT as&E)aT bC{aU W==E.W;}af bd!=(aT as&E)aT bC{aU W!=E.W;}as pow(R bk)aT bC{as o=cT(1%bM);as dG=bk<0?inv():*cb;uint64_t aV=bk<0?uint64_t(-(bk+1))+1:uint64_t(bk);bI(aV>0){if(aV&1)o*=dG;dG*=dG;aV>>=1;}aU o;}as inv()aT bC{int64_t a=W,b=bM,u=1,v=0;bI(b){int64_t ay=a/b;a-=ay*b;std::swap(a,b);u-=ay*v;std::swap(u,v);}(O)0;u%=bM;if(u<0)u+=bM;aU cT(bi(u));}cd std::ostream&bd<<(std::ostream&os,aT as&E){aU os<>(std::istream&is,as&E){R w;is>>w;E=as(w);aU is;}};}}bD bc{bD hl{bD au{aZca hJ:std::false_type{};aZca hJ{})>>:std::true_type{};aX uint32_t jI(uint32_t D){if(D==2)aU 1;if(D==167772161)aU 3;if(D==469762049)aU 3;if(D==754974721)aU 11;if(D==998244353)aU 3;if(D==1224736769)aU 3;uint32_t gx[32]={};bh ce=0;uint32_t x=D-1;bH(uint32_t p=2;uint64_t(p)*p<=x;p++){if(x%p!=0)cj;gx[ce++]=p;bI(x%p==0)x/=p;}if(x>1)gx[ce++]=x;bH(uint32_t g=2;;g++){af ok=cw;bH(bh i=0;i0){if(bk&1)w=w*dG%D;dG=dG*dG%D;bk>>=1;}if(w==1){ok=ci;break;}}if(ok)aU g;}}aX bh hW(uint32_t x){bh o=0;bI((x&1)==0){x>>=1;o++;}aU o;}aZca gv{br aX bh db=hW(C::D()-1);std::arrayaN;std::arrayeu;std::arrayjh;std::arrayie;std::arrayiq;std::arrayhF;gv(){aX uint32_t kg=jI(C::D());bH(bh eC=1;eC<=db;eC++){aN[eC]=C(kg).pow((C::D()-1)>>eC);eu[eC]=aN[eC].inv();}C aj=1;C eO=1;bH(bh i=0;i+1aT gv&kz(){br aT gvaI;aU aI;}aZO fk(F&a,af bf,af ky=cw){aT bh n=bh(a.size());(O)0;(O)0;aT by&aI=kz();aT bh cG=hW(uint32_t(n));if(!bf){bh aR=0;bI(aR0){if(aR==1){aT bh aY=1<<(cG-aR);C bF=1;bH(bh av=0;av<(1<<(aR-1));av++){aT bh K=av<<(cG-aR+1);bH(bh i=0;i__attribute__((target("avx2,bmi"),hot))FjF(aT F&a,aT F&b){aT bh aQ=bh(a.size()+b.size()-1);bh n=1;bI(n(::bd new[](cI(uint32_t)*n,std::align_val_t(32)));by*cM=cD?ck:bi(::bd new[](cI(uint32_t)*n,std::align_val_t(32)));if aX(std::is_same_v>){std::memcpy(ck,a.data(),cI(uint32_t)*a.size());if(!cD)std::memcpy(cM,b.data(),cI(uint32_t)*b.size());}cq{bH(bh i=0;i>3;cZ::gs(bp<__m256i*>(ck),dv,&dA);if(!cD)cZ::gs(bp<__m256i*>(cM),dv,&dA);cZ::jG(bp<__m256i*>(ck),bp(cM),dv,&dA);cZ::iy(bp<__m256i*>(ck),dv,&dA);Fo(aQ);bH(bh j=0;jFjQ(aT F&a,aT F&b){if(a.empty()||b.empty())aU{};Fo(a.size()+b.size()-1);if(a.size()FhQ(aT F&a,aT F&b){aT bh aQ=bh(a.size()+b.size()-1);bh n=1;bI(n=64&&__builtin_cpu_supports("avx2"))aU au::jF(a,b);} #endif aT af cD=&a==&b;Ffa(n);std::copy(a.begin(),a.end(),fa.begin());au::fk(fa,ci);aT C fJ=C(n).inv();if(cD){bH(bh i=0;ifb(n);std::copy(b.begin(),b.end(),fb.begin());au::fk(fb,ci);bH(bh i=0;iFjB(aT F&a,aT F&b,bh aF){(O)0;(O)0;(O)0;aT bh be=aF/2;aT bh dV=bh((a.size()+be-1)/be);aT bh dW=bh((b.size()+be-1)/be);by eN=[&](aT F&ac,bh dS){F>ea;ea.reserve(dS);bH(bh av=0;avcX(aF);std::copy_n(ac.begin()+begin,ce,cX.begin());fk(cX,ci);ea.emplace_back(std::move(cX));}aU ea;};F>ck=eN(a,dV);F>cM=eN(b,dW);aT bh aQ=bh(a.size()+b.size()-1);Fo(aQ);FcL(aF);bH(bh bA=0;bA(::bd new[](cI(uint32_t)*size,std::align_val_t(32)))){}bQ(aT bQ&)=cK;bQ&bd=(aT bQ&)=cK;bQ(bQ&&X)bC:cH(X.cH){X.cH=nullptr;}bQ&bd=(bQ&&X)bC{if(cb==&X)aU*cb;::bd cK[](cH,std::align_val_t(32));cH=X.cH;X.cH=nullptr;aU*cb;}~bQ(){::bd cK[](cH,std::align_val_t(32));}uint32_t*data(){aU cH;}aT uint32_t*data()aT{aU cH;}};aZ__attribute__((target("avx2,bmi"),hot))FjC(aT F&a,aT F&b,bh aF){(O)0;(O)0;(O)0;aT bh be=aF/2;aT bh dV=bh((a.size()+be-1)/be);aT bh dW=bh((b.size()+be-1)/be);br aX cZ::dQ dA(998244353);aT std::size_t dv=std::size_t(aF)/8;by eN=[&](aT F&ac,bh dS){Fea;ea.reserve(dS);bH(bh av=0;av>){std::memcpy(cX.data(),ac.data()+begin,cI(uint32_t)*ce);}cq{bH(bh i=0;i(cX.data()),dv,&dA);ea.emplace_back(std::move(cX));}aU ea;};Fck=eN(a,dV);FcM=eN(b,dW);aT bh aQ=bh(a.size()+b.size()-1);Fo(aQ);bQ cL(aF);bH(bh bA=0;bA(cL.data()),bp(ck[dc].data()),bp(cM[gD].data()),dv,&dA);}cZ::iy(bp<__m256i*>(cL.data()),dv,&dA);aT bh et=bA*be;aT bh gn=std::min(aF,aQ-et);bH(bh i=0;i=C::D())w-=C::D();o[et+i]=C::cT(w);}}aU o;} #endif aZFjD(aT F&a,aT F&b,bh aF=1<<23){ #ifdef M1UNE_FPS_HAS_X86_SIMD if(aF>=64&&__builtin_cpu_supports("avx2"))aU jC(a,b,aF); #endif aU jB(a,b,aF);}}aZFil(aT F&a,aT F&b){if(a.empty()||b.empty())aU{};if(std::min(a.size(),b.size())<=32)aU jQ(a,b);aT bh aQ=bh(a.size()+b.size()-1);bh n=1;bI(n::value){if aX(C::D()==998244353){if(n>(1<<23))aU au::jD(a,b);}if((C::D()-1)%uint32_t(n)==0)aU hQ(a,b);}bE cO=cP::ag<167772161>;bE bW=cP::ag<469762049>;bE bB=cP::ag<754974721>;(O)0;[[maybe_unused]]aT cg __int128 gc=bi(std::min(a.size(),b.size()))*(C::D()-1)*(C::D()-1);[[maybe_unused]]aT cg __int128 lB=bi(cO::D())*bW::D()*bB::D();(O)0;by fW=[&](){Fij(a.size());Fik(b.size());bH(bh i=0;ic1=fW.aZ bd()();Fc2=fW.aZ bd()();Fc3=fW.aZ bd()();br aT uint64_t gd=bW(cO::D()).inv().val();br aT uint64_t iE=cO::D()%bB::D();br aT uint64_t kd=iE*(bW::D()%bB::D())%bB::D();br aT uint64_t jK=bB(uint32_t(kd)).inv().val();aT uint64_t dw=C::D();aT uint64_t in=cO::D()%dw;aT uint64_t jZ=in*(bW::D()%dw)%dw;Fo(aQ);bH(bh i=0;ia;bh ah;V():ah(1){}V(R v){*cb=v;}V(aT std::string&s){read(s);}V&bd=(R v){ah=1;aO aV=bi(v);if(v<0){ah=-1;aV=0-aV;}a.clear();bH(;aV>0;aV/=Z){a.push_back(bh(aV%Z));}aU*cb;}V&bd=(aT std::string&s){read(s);aU*cb;}O trim(){bI(!a.empty()&&a.back()==0){a.pop_back();}if(a.empty())ah=1;}O read(aT std::string&s){ah=1;a.clear();bh dJ=0;bI(dJ<(bh)s.size()&&(s[dJ]=='-'||s[dJ]=='+')){if(s[dJ]=='-')ah=-1;++dJ;}a.reserve((bh(s.size())-dJ+du-1)/du);bH(bh i=bh(s.size())-1;i>=dJ;i-=du){bh x=0;bH(bh j=std::max(dJ,i-du+1);j<=i;++j){x=x*10+(s[j]-'0');}a.push_back(x);}trim();}std::string to_string()aT{if(a.empty())aU"0";br aT by eQ=[]{std::arraydf{};bH(bh w=0;w<10000;++w){bh ak=w;bH(bh dj=3;dj>=0;--dj){df[4*w+dj]=aK('0'+ak%10);ak/=10;}}aU df;}();aK cE[du];aT std::to_chars_result iz=std::to_chars(cE,cE+du,a.back());(O)0;aT bh ig=bh(iz.ptr-cE);std::string bg((ah==-1)+ig+(a.size()-1)*du,'0');bh K=0;if(ah==-1)bg[K++]='-';std::copy(cE,iz.ptr,bg.begin()+K);K+=ig;bH(bh i=(bh)a.size()-2;i>=0;--i){aT az w=az(a[i]);aT az hY=w/100000000;aT az dz=w-hY*100000000;aT az iU=dz/10000;aT az kG=dz-iU*10000;bg[K]=aK('0'+hY);std::memcpy(bg.data()+K+1,eQ.data()+4*iU,4);std::memcpy(bg.data()+K+5,eQ.data()+4*kG,4);K+=du;}aU bg;}af is_zero()aT{aU a.empty()||(a.size()==1&&a[0]==0);}V bd-()aT{V bg=*cb;if(!is_zero())bg.ah=-ah;aU bg;}V abs()aT{V bg=*cb;bg.ah=1;aU bg;}cd af bd<(aT V&x,aT V&y){if(x.ah!=y.ah)aU x.ahy.a.size());}bH(bh i=(bh)x.a.size()-1;i>=0;--i){if(x.a[i]!=y.a[i]){aU(x.ah==1)?(x.a[i]y.a[i]);}}aU ci;}cd af bd>(aT V&x,aT V&y){aU y=(aT V&x,aT V&y){aU!(x0){fq(a,X.a);}cq{Fo=X.a;fq(o,a);a=std::move(o);ah=X.ah;}aU*cb;}hC(a,X.a);aU*cb;}V&bd-=(aT V&X){if(X.is_zero())aU*cb;if(is_zero())aU*cb=-X;if(ah!=X.ah){hC(a,X.a);aU*cb;}aT bh eS=ge(a,X.a);if(eS==0){a.clear();ah=1;}cq if(eS>0){fq(a,X.a);}cq{Fo=X.a;fq(o,a);a=std::move(o);ah=-ah;}aU*cb;}V&bd*=(bh v){if(v==0||is_zero())aU*cb=0;R dT=v;if(dT<0){ah=-ah;dT=-dT;}a.reserve(a.size()+2);R an=0;bH(bh i=0;i<(bh)a.size()||an;++i){if(i==(bh)a.size())a.push_back(0);aT R jp=a[i]*dT+an;an=jp/Z;a[i]=(bh)(jp%Z);}trim();aU*cb;}dp:br aX bh jH=128;br aX bh jT=224;br aX bh fY=64;br aX bh da=1<<15;ca P{ap aD;ap ax;P bd+(aT P&X)aT{aU{aD+X.aD,ax+X.ax};}P bd-(aT P&X)aT{aU{aD-X.aD,ax-X.ax};}P bd*(aT P&X)aT{aU{aD*X.aD-ax*X.ax,aD*X.ax+ax*X.aD};}P bd*(ap ja)aT{aU{aD*ja,ax*ja};}P conjugate()aT{aU{aD,-ax};}};ca gp{P bA;P ec;};br aT F

&eT(bh size){br F

aI(2,P{1,0});if(bh(aI.size())/ae;aT ab iG=std::cos(jc);aT ab hV=std::sin(jc);bH(bh i=ae;i<2*ae;++i){aI[i]=aI[i/2];if(i&1){aT ab aD=aI[i].aD;aT ab ax=aI[i].ax;aI[i]={ap(aD*iG-ax*hV),ap(aD*hV+ax*iG)};}}ae*=2;}}aU aI;} #ifdef M1UNE_BIGINT_HAS_X86_SIMD __attribute__((target("avx2,fma"),always_inline))br bP __m256d multiply_complex(__m256d w,__m256d aN){aT __m256d aD=_mm256_movedup_pd(w);aT __m256d ax=_mm256_permute_pd(w,0xf);aT __m256d swapped_root=_mm256_permute_pd(aN,0x5);aU _mm256_fmaddsub_pd(aD,aN,_mm256_mul_pd(ax,swapped_root));}__attribute__((target("avx2,fma"),hot))br O kF(P*ac,bh size){aT F

&aI=eT(size);bH(bh ae=size/2;ae>0;ae/=2){bH(bh K=0;K(ac+K+i));aT __m256d bo=_mm256_loadu_pd(bp(ac+K+i+ae));aT __m256d aN=_mm256_loadu_pd(bp(aI.data()+ae+i));_mm256_storeu_pd(bp(ac+K+i),_mm256_add_pd(bn,bo));_mm256_storeu_pd(bp(ac+K+i+ae),multiply_complex(_mm256_sub_pd(bn,bo),aN));}bH(;i&aI=eT(size);aT __m256d conjugate_mask=_mm256_setr_pd(0.0,-0.0,0.0,-0.0);bH(bh ae=1;ae(ac+K+i));aT __m256d w=_mm256_loadu_pd(bp(ac+K+i+ae));__m256d aN=_mm256_loadu_pd(bp(aI.data()+ae+i));aN=_mm256_xor_pd(aN,conjugate_mask);aT __m256d bo=multiply_complex(w,aN);_mm256_storeu_pd(bp(ac+K+i),_mm256_add_pd(bn,bo));_mm256_storeu_pd(bp(ac+K+i+ae),_mm256_sub_pd(bn,bo));}bH(;i(ac+i));_mm256_storeu_pd(bp(ac+i),_mm256_mul_pd(w,fC));}bH(;i&aI=eT(size);bH(bh ae=size/2;ae>0;ae/=2){bH(bh K=0;K&aI=eT(size);bH(bh ae=1;ae&aI=eT(size);br F

fZ;br bh ii=0;if(ii!=size){fZ.resize(dy);FfK(dy);aT bh kS=std::countr_zero(az(dy));bH(bh i=1;i>1)|((i&1)<<(kS-1));}bH(bh i=0;i&w){bI(!w.empty()&&w.back()==0)w.pop_back();}br af fz(aT F&Q,aT F&E){aU ge(Q,E)<0;}br bh ge(aT F&Q,aT F&E){if(Q.size()!=E.size())aU Q.size()=0;--i){if(Q[i]!=E[i])aU Q[i]&Q,aT F&E){aT bh iJ=bh(Q.size());aT bh fL=bh(E.size());aT bh size=std::max(iJ,fL);if(iJ=Z?ak-Z:ak);an=ak>=Z;}bI(i&Q,aT F&E){(O)0;bh cn=0;bH(bh i=0;i&Q,aT F&E){aU!fz(E,Q);}br Fgk(aT F&Q,aT F&E){Fo(std::max(Q.size(),E.size())+1);bH(bh i=0;i=Z){o[i]-=Z;o[i+1]++;}}bz(o);aU o;}br FcV(aT F&Q,aT F&E){(O)0;Fo=Q;bh cn=0;bH(bh i=0;ike(aT F&Q,aT F&E){if(Q.empty()||E.empty())aU F();Faj(Q.size()+E.size());aX R dU=4LL*Z*Z;bH(bh i=0;i=dU){aj[i+j]-=dU;aj[i+j+1]+=4LL*Z;}}}Fo;o.reserve(aj.size()+1);R an=0;bH(bh i=0;i0;++i){if(ikp(aT F&w){if(w.empty())aU F();Faj(2*w.size());aX R dU=4LL*Z*Z;bH(bh i=0;i=dU){aj[2*i]-=dU;aj[2*i+1]+=4LL*Z;}bH(bh j=i+1;j=dU){aj[i+j]-=dU;aj[i+j+1]+=4LL*Z;}}}Fo;o.reserve(aj.size()+1);R an=0;bH(bh i=0;i0;++i){if(ift(aT F&w,bh dT){(O)0;if(w.empty()||dT==0)aU F();Fo;o.reserve(w.size()+1);uint64_t an=0;bH(bh kZ:w){aT uint64_t ak=uint64_t(kZ)*dT+an;o.push_back(bh(ak%Z));an=ak/Z;}if(an)o.push_back(bh(an));aU o;}br Fgm(aT F&Q,aT F&E){bE cO=cP::ag<998244353>;bE bW=cP::ag<754974721>;bE bB=cP::ag<469762049>;aT bh aQ=bh(Q.size()+E.size()-1);(O)0;by gw=[&](){Fx(Q.begin(),Q.end());if(&Q==&E)aU hl::il(x,x);Fy(E.begin(),E.end());aU hl::il(x,y);};aT FkB=gw.aZ bd()();aT FkC=gw.aZ bd()();aT FkD=gw.aZ bd()();aX uint64_t hb=cO::D();aX uint64_t fd=bW::D();aX uint64_t eD=bB::D();aX uint64_t gU=hb*fd;aT br uint64_t gd=bW(hb).inv().val();aT br uint64_t jO=bB(gU%eD).inv().val();[[maybe_unused]]aT cg __int128 gc=bi(std::min(Q.size(),E.size()))*(Z-1)*(Z-1);[[maybe_unused]]aX cg __int128 lA=bi(gU)*eD;(O)0;Fo;o.reserve(aQ+2);cg __int128 an=0;bH(bh i=0;i0;++i){if(i(gU)*kA;}o.push_back(bh(an%Z));an/=Z;}bz(o);aU o;}ca eL{uint32_t eY;uint32_t eX;};aZbr uint32_t fw(uint64_t w){aX uint64_t fM=(uint64_t(1)<>hd);w=(w&fM)+(w>>hd);if(w>=fM)w-=fM;aU uint32_t(w);}br eL fX(aT F&w){eL o{0,0};bH(bh i=bh(w.size())-1;i>=0;--i){o.eY=fw<31>(uint64_t(o.eY)*Z+w[i]);o.eX=fw<29>(uint64_t(o.eX)*Z+w[i]);}aU o;}br af kb(aT F&Q,aT F&E,aT F&aj){aT eL iD=fX(Q);aT eL iF=fX(E);aT eL iR=fX(aj);aU iR.eY==fw<31>(uint64_t(iD.eY)*iF.eY)&&iR.eX==fw<29>(uint64_t(iD.eX)*iF.eX);}br Fko(aT F&Q,aT F&E){aT bh aQ=bh(Q.size()+E.size()-1);aT bh aF=bh(std::bit_ceil(az(aQ)));aT cg __int128 gc=bi(std::min(Q.size(),E.size()))*2*(da-1)*((Z-1)/da);if(aF>(1<<20)||gc>=(uint64_t(1)<<50)){aU gm(Q,E);}std::unique_ptrcr(new P[aF]);bH(bh i=0;icx(new P[aF]);if(!cD){bH(bh i=0;ier;if(bh(er.size())dB)cj;aT gp gA=hG(i);gp gf=gA;if(i!=dB)gf=hG(dB);cr[i]=gA.bA;cr[dB]=gf.bA;cx[i]=gA.ec;cx[dB]=gf.ec;}im(cr.get(),aF);jY(cx.get(),aF);Fo;o.reserve(aQ+2);cg __int128 an=0;bH(bh i=0;i0;++i){if(i(ec)*da+bi(jg)*da*da;}o.push_back(bh(an%Z));an/=Z;}bz(o);if(o.empty()||!kb(Q,E,o)){aU gm(Q,E);}aU o;}br FcU(aT F&Q,aT F&E){if(Q.empty()||E.empty())aU F();if(Q.size()==1)aU ft(E,Q[0]);if(E.size()==1)aU ft(Q,E[0]);if(&Q==&E&&Q.size()<=jT){aU kp(Q);}if(std::min(Q.size(),E.size())<=jH){aU ke(Q,E);}aU ko(Q,E);}br aB,F>fy(aT F&aW,bh aM){(O)0;if(aM==1){aU std::make_pair(aW,F());}Fay(aW.size());R aL=0;bH(bh i=bh(aW.size())-1;i>=0;--i){aT R ak=aL*Z+aW[i];ay[i]=bh(ak/aM);aL=ak%aM;}bz(ay);FhP;if(aL!=0)hP.push_back(bh(aL));aU std::make_pair(std::move(ay),std::move(hP));}br aB,F>hN(aT F&aW,aT F&aM){(O)0;if(aM.size()==1)aU fy(aW,aM[0]);if(fz(aW,aM)){aU std::make_pair(F(),aW);}aT bh cy=Z/(aM.back()+1);Fbs(aM.size());uint64_t an=0;bH(bh i=0;ibj(aW.size()+1);an=0;bH(bh i=0;iay(ia);bH(bh bt=ia-1;bt>=0;--bt){aT uint64_t gh=uint64_t(bj[bt+cl])*Z+bj[bt+cl-1];uint64_t dF=gh/fv;uint64_t aL=gh%fv;if(dF>=Z){dF=Z-1;aL=gh-dF*fv;}bI(aLaL*Z+bj[bt+cl-2]){--dF;aL+=fv;}uint64_t cn=0;bH(bh i=0;i(cn);if(hs<0){--dF;uint64_t gt=0;bH(bh i=0;iaL(bj.begin(),bj.begin()+cl);bz(aL);aB,F>eP=fy(aL,cy);(O)0;aU std::make_pair(std::move(ay),std::move(eP.first));}br Freciprocal(aT F&w,bh de){(O)0;(O)0;(O)0;bh bT=de;aT bh ix=bh(w.size());bI(bT>fY)bT=(bT+1)/2;Fbf(ix+bT+1);bf.back()=1;bf=hN(bf,w).first;bI(bTgR=cU(bf,bf);gR.insert(gR.begin(),0);aT bh ez=std::min(ix,2*bT+1);aT FcE(w.end()-ez,w.end());FfF=cU(gR,cE);(O)0;fF.erase(fF.begin(),fF.begin()+ez);FgK(bT+1);aT FiK=gk(bf,bf);gK.insert(gK.end(),iK.begin(),iK.end());bf=cV(gK,fF);(O)0;bf.erase(bf.begin());bT*=2;}(O)0;bf.erase(bf.begin(),bf.begin()+bT-de);bz(bf);aU bf;}br aB,F>jV(aT F&aW,aT F&aM){(O)0;if(aM.size()<=fY||bh(aW.size())-bh(aM.size())<=fY){aU hN(aW,aM);}if(aW.size()>2*aM.size()){aT bh iw=bh(aW.size()/aM.size());aT bh jU=iw>=16?3:iw>=7?2:1;aT bh be=jU*bh(aM.size());aT bh dS=(bh(aW.size())+be-1)/be;aT bh cy=Z/(aM.back()+1);aT Fbs=ft(aM,cy);aT bh de=be+3;aT Fbf=reciprocal(bs,de);aT bh fI=bh(aM.size())+de;by kn=[&](aT F&ak){aT Fga=ft(ak,cy);Fgi=cU(ga,bf);Fdt;if(bh(gi.size())>fI){dt.assign(gi.begin()+fI,gi.end());}Faj=cU(bs,dt);bI(fz(ga,aj)){dt=cV(dt,F(1,1));aj=cV(aj,bs);}FeM=cV(ga,aj);bI(hD(bs,eM)){dt=gk(dt,F(1,1));eM=cV(eM,bs);}bz(dt);bz(eM);aB,F>eP=fy(eM,cy);(O)0;aU std::make_pair(std::move(dt),std::move(eP.first));};Fay(aW.size());FaL;bH(bh av=dS-1;av>=0;--av){aT bh begin=av*be;aT bh end=std::min(begin+be,bh(aW.size()));Fak(aW.begin()+begin,aW.begin()+end);ak.insert(ak.end(),aL.begin(),aL.end());bz(ak);aB,F>gH=kn(ak);(O)0;std::copy(gH.first.begin(),gH.first.end(),ay.begin()+begin);aL=std::move(gH.second);}bz(ay);bz(aL);aU std::make_pair(std::move(ay),std::move(aL));}aT bh cy=Z/(aM.back()+1);aT Fbj=cU(aW,F(1,cy));aT Fbs=cU(aM,F(1,cy));aT bh kj=bh(bj.size());aT bh cl=bh(bs.size());aT bh de=kj-cl+2;aT Fbf=reciprocal(bs,de);Fay=cU(bj,bf);aT bh fI=cl+de;(O)0;ay.erase(ay.begin(),ay.begin()+fI);Faj=cU(bs,ay);bI(fz(bj,aj)){ay=cV(ay,F(1,1));aj=cV(aj,bs);}FaL=cV(bj,aj);bI(hD(bs,aL)){ay=gk(ay,F(1,1));aL=cV(aL,bs);}bz(ay);bz(aL);aB,F>eP=fy(aL,cy);(O)0;aU std::make_pair(std::move(ay),std::move(eP.first));}dr:V&bd*=(aT V&X){if(is_zero()||X.is_zero())aU*cb=0;aT bh ks=ah*X.ah;a=cU(a,X.a);ah=ks;trim();aU*cb;}cd aBgM(aT V&a1,aT V&b1){if(b1.is_zero()){throw std::domain_error("BigInt division by zero");}aB,F>o=jV(a1.a,b1.a);V q,r;q.a=std::move(o.first);r.a=std::move(o.second);q.ah=a1.ah*b1.ah;r.ah=a1.ah;q.trim();r.trim();aU{q,r};}cd V fi(V ad,V al){ad.ah=1;al.ah=1;bI(!al.is_zero()){ad%=al;std::swap(ad,al);}aU ad;}V&bd/=(aT V&X){aU*cb=gM(*cb,X).first;}V&bd%=(aT V&X){aU*cb=gM(*cb,X).second;}cd V bd+(V x,aT V&y){aU x+=y;}cd V bd-(V x,aT V&y){aU x-=y;}cd V bd*(V x,aT V&y){aU x*=y;}cd V bd/(V x,aT V&y){aU x/=y;}cd V bd%(V x,aT V&y){aU x%=y;}cd std::ostream&bd<<(std::ostream&os,aT V&b){aU os<>(std::istream&is,V&b){std::string s;if(is>>s)b.read(s);aU is;}};}} #ifdef M1UNE_BIGINT_HAS_X86_SIMD #undef M1UNE_BIGINT_HAS_X86_SIMD #endif bD bc{bD cP{bD hS{aZconcept IntegerLike=std::signed_integral||(!std::integral&&std::copyable&&cp(T ad,T al){T(0);T(1);{-ad}->std::same_as;{ad+al}->std::same_as;{ad-al}->std::same_as;{ad*al}->std::same_as;{ad/al}->std::same_as;{ad%al}->std::same_as;{ad+=al}->std::same_as;{ad-=al}->std::same_as;{ad/=al}->std::same_as;{ad==al}->std::convertible_to;{adstd::convertible_to;});}aZca aq{dp:br aX af fu=std::signed_integral;bE at=std::conditional_t;bE bS=std::conditional_t;T aH;T aG;br aX bS aV(at w){if aX(fu){if(w<0){aU bi(-(w+1))+1;}aU bi(w);}cq{aU w<0?-w:w;}}br aX bS fi(bS ad,bS al){bI(al!=0){bS aL=ad%al;ad=al;al=aL;}aU ad;}br aX T iV(at w){if aX(fu){(O)0;(O)0;aU bi(w);}cq{aU w;}}aX O assign_normalized(at numerator,at denominator){(O)0;if(numerator==0){aH=0;aG=1;aU;}bS aM=fi(aV(numerator),aV(denominator));numerator/=bi(aM);denominator/=bi(aM);if(denominator<0){numerator=-numerator;denominator=-denominator;}aH=iV(numerator);aG=iV(denominator);}br aX aq iC(at numerator,at denominator){aq o;o.assign_normalized(numerator,denominator);aU o;}br aBhH(aT T&w){std::ostringstream bV;bV<::digits10+1;aT std::size_t fh=std::min(kJ,cR.size()-begin);ab fD=0;bH(std::size_t i=0;i(cR.size()-begin-1);aU std::make_pair(ah*fD,bk);}dr:aX aq():aH(0),aG(1){}aX aq(T gF):aH(gF),aG(1){}aZcp std::constructible_from&&(!std::same_as,T>)aX aq(U gF):aq(T(gF)){}aX aq(T numerator,T denominator){assign_normalized(at(numerator),at(denominator));}aX T numerator()aT{aU aH;}aX T denominator()aT{aU aG;}aX af lH()aT{aU aG==1;}aX bh ah()aT{aU(aH>0)-(aH<0);}aX aq reciprocal()aT{(O)0;aU iC(at(aG),at(aH));}aX aq abs()aT{aU aH<0?-*cb:*cb;}aX ab gj()aT cp cp(aT T&w){bi(w);}{aU bi(aH)/bi(aG);}ab gj()aT cp(!cp(aT T&w){bi(w);}){aT by[numerator,jP]=hH(aH);aT by[denominator,jM]=hH(aG);aU numerator/denominator*std::pow(10.0L,jP-jM);}dq aX bd ab()aT cp cp(aT T&w){bi(w);}{aU gj();}dq bd ab()aT cp(!cp(aT T&w){bi(w);}){aU gj();}aX T lY()aT{aU aH/aG;}aX T fQ()aT{T ay=aH/aG;if(aH<0&&aH%aG!=0)ay-=T(1);aU ay;}aX T kY()aT{T ay=aH/aG;if(0(aG),bi(X.aG));at iu=at(X.aG)/bi(iT);at kt=at(aG)/bi(iT);assign_normalized(at(aH)*iu+at(X.aH)*kt,at(aG)*iu);aU*cb;}aX aq&bd-=(aT aq&X){aU*cb+=-X;}aX aq&bd*=(aT aq&X){bS iB=fi(aV(at(aH)),bi(X.aG));bS iv=fi(aV(at(X.aH)),bi(aG));assign_normalized((at(aH)/bi(iB))*(at(X.aH)/bi(iv)),(at(aG)/bi(iv))*(at(X.aG)/bi(iB)));aU*cb;}aX aq&bd/=(aT aq&X){aU*cb*=X.reciprocal();}cd aX aq bd+(aq bx,aT aq&bw){aU bx+=bw;}cd aX aq bd-(aq bx,aT aq&bw){aU bx-=bw;}cd aX aq bd*(aq bx,aT aq&bw){aU bx*=bw;}cd aX aq bd/(aq bx,aT aq&bw){aU bx/=bw;}cd aX af bd==(aT aq&bx,aT aq&bw){aU bx.aH==bw.aH&&bx.aG==bw.aG;}cd aX std::strong_ordering bd<=>(aT aq&bx,aT aq&bw){at ad=at(bx.aH)*at(bw.aG);at al=at(bw.aH)*at(bx.aG);if(ad>(std::istream&cu,aq&w){std::string fc;if(!(cu>>fc))aU cu;std::size_t eZ=fc.find('/');if(eZ!=std::string::npos&&fc.find('/',eZ+1)!=std::string::npos){cu.setstate(std::ios::failbit);aU cu;}T numerator=0;T denominator=1;std::istringstream hR(fc.substr(0,eZ));if(!(hR>>numerator)||hR.peek()!=std::char_traits::eof()){cu.setstate(std::ios::failbit);aU cu;}if(eZ!=std::string::npos){std::istringstream hL(fc.substr(eZ+1));if(!(hL>>denominator)||hL.peek()!=std::char_traits::eof()){cu.setstate(std::ios::failbit);aU cu;}}w=aq(numerator,denominator);aU cu;}};aZaX aqabs(aT aq&w){aU w.abs();}}}bD bc{bD eB{aZca ha{bE kx=T;bh dn;bh to;T dm;bh id;af di;ha():dn(-1),to(-1),dm(T()),id(-1),di(cw){}ha(bh kQ,bh lk,T kO=T(1),bh ld=-1,af kK=cw):dn(kQ),to(lk),dm(kO),id(ld),di(kK){}bh X(bh v)aT{(O)0;aU dn^to^v;}};aZca dg{bE cB=ha;bE kx=T;dp:bh _n;bh cs;F>_g;F>>cW;dr:dg():_n(0),cs(0){}dq dg(bh n):_n(n),cs(0),_g(n){(O)0;}bh size()aT{aU _n;}af empty()aT{aU _n==0;}bh lF()aT{aU cs;}bh lE(){_g.emplace_back();aU _n++;}bh lv(bh dn,bh to,T dm=T(1)){(O)0;(O)0;bh id=cs++;bh eh=bh(_g[dn].size());_g[dn].push_back(cB(dn,to,dm,id));cW.emplace_back();cW.back().push_back({dn,eh});aU id;}bh add_edge(bh u,bh v,T dm=T(1)){(O)0;(O)0;bh id=cs++;bh kV=bh(_g[u].size());_g[u].push_back(cB(u,v,dm,id));bh kW=bh(_g[v].size());_g[v].push_back(cB(v,u,dm,id));cW.emplace_back();cW.back().push_back({u,kV});cW.back().push_back({v,kW});aU id;}O hU(bh id,af di){(O)0;bH(by[v,eh]:cW[id]){_g[v][eh].di=di;}}O lG(bh id){hU(id,ci);}O lC(bh id){hU(id,cw);}af ly(bh id)aT{(O)0;(O)0;by[v,eh]=cW[id][0];aU _g[v][eh].di;}aT F&bd[](bh v)aT{(O)0;aU _g[v];}F&bd[](bh v){(O)0;aU _g[v];}aT F>&kw()aT{aU _g;}F>&kw(){aU _g;}FlX(af jW=ci)aT{Fo;o.reserve(cs);Ffh(cs,ci);bH(bh v=0;v<_n;v++){bH(aT by&e:_g[v]){if(!jW&&!e.di)cj;if(0<=e.id&&e.idca es{FbN;Fey;FgP;Fip;T eF=T();af reachable(bh v)aT{(O)0;aU ey[v];}Fmc(bh t)aT{(O)0;Fo;bH(bh v=t;v!=-1;v=gP[v])o.push_back(v);std::reverse(o.begin(),o.end());aU o;}};bD au{aZca gb{T bN;bh gT;};aZca jL{af bd()(aT gb&ad,aT gb&al)aT{aU al.bNesdX(aT dg&g,aT F&gL){bh n=g.size();eso;o.bN.resize(n);o.ey.assign(n,ci);o.gP.assign(n,-1);o.ip.assign(n,-1);bE fe=au::gb;bE kH=au::jL;std::priority_queue,kH>fl;bH(bh s:gL){(O)0;if(o.ey[s])cj;o.ey[s]=cw;o.bN[s]=T();fl.push(fe{T(),s});}bI(!fl.empty()){fe ak=fl.top();fl.pop();if(o.bN[ak.gT]esdX(aT dg&g,bh s){aU dX(g,F{s});}aZesdX(aT dg&g,aT F&gL,aT T&eF){eso=dX(g,gL);o.eF=eF;bH(bh v=0;vesdX(aT dg&g,bh s,aT T&eF){aU dX(g,F{s},eF);}}}bE lb=bc::cP::aq;O kT(){bh N,M;ji(N,M);bc::eB::dgeB(N);FOR(M){bh u,v,a,b;ji(u,v,a,b);--u,--v;eB.add_edge(u,v,{a,b});}by bg=bc::eB::dX(eB,0);by&bN=bg.bN;FOR(i,1,N){gW(bN[i].numerator().to_string(),bN[i].denominator().to_string());}}bh main(){CPP_DUMP_SET_OPTION(max_line_width,80);CPP_DUMP_SET_OPTION(log_label_func,cpp_dump::log_label::filename());CPP_DUMP_SET_OPTION(enable_asterisk,cw);bh T=1;bI(T--)kT();aU 0;}