6ll
Garner(vector<ll> a, vector<ll> m, ll mod=
INFL+3) {
9 vector<ll> kp(n+1), rm(n+1,1ll);
10 for(
int i=0; i<n; i++) {
11 ll x=((a[i]-kp[i]+m[i])%m[i])*ModInv(rm[i],m[i]);
13 for(
int j=i+1; j<=n; j++) {
14 (kp[j]+=rm[j]*x)%=m[j];
28 constexpr const ll MOD1=1224736769, P1=3;
29 constexpr const ll MOD2=469762049, P2=3;
30 constexpr const ll MOD3=167772161, P3=3;
31 static NTT<MOD1,P1> ntt1;
static NTT<MOD2,P2> ntt2;
static NTT<MOD3,P3> ntt3;
34 auto c=ntt1.convolve(a,b);
35 vector<ll> ret(c.size());
36 for(
int i=0; i<ret.size(); i++) ret[i]=c[i]%mod;
41 auto c1=ntt1.convolve(a,b);
42 auto c2=ntt2.convolve(a,b);
44 vector<ll> ret(c1.size());
45 for(
int i=0; i<ret.size(); i++) ret[i]=Garner({c1[i],c2[i]}, {MOD1,MOD2}, mod);
49 auto c1=ntt1.convolve(a,b);
50 auto c2=ntt2.convolve(a,b);
51 auto c3=ntt3.convolve(a,b);
53 vector<ll> ret(c1.size());
54 for(
int i=0; i<ret.size(); i++) ret[i]=Garner({c1[i],c2[i],c3[i]}, {MOD1,MOD2,MOD3}, mod);