rt。虽然感觉这种东西不会有人帮忙qwq
但是我真的找不到错哪了。问了机房的人也没人找到。
WA on 9.
#include <bits/stdc++.h>
#define int long long
//#define double long double
#define p1(x) x.first
#define p2(x) x.second
#define i128 __int128_t
#define pii pair<int,int>
using namespace std;
const int M=167772161,g=3,ig=(M+1)/g;
const int MXN=4e5+10;
inline int rd(){
int x=0;
char w=getchar();
while(w>'9'||w<'0')
w=getchar();
while(w<='9'&&w>='0')
x=x*10+(w^48),w=getchar();
return x;
}
inline int trs(string s,int M){
int x=0;
for(char w:s)
x=(x*10+(w^48))%M;
return x;
}
inline int qp(int a,int x){
int res=1;
while(x){
if(x&1)res=res*a%M;
a=a*a%M;
x>>=1;
}
return res;
}
inline void add(int &x,int y){
if((x+=y)>=M)x-=M;
}
inline int addv(int x,int y){
if((x+=y)>=M)x-=M;
return x;
}
inline int inv(int a){return qp(a,M-2);}
int rev[MXN];
int F[MXN],G[MXN];
int tf[MXN],tg[MXN];
int T=-1;
inline void upd(int n){
int N=1,lim=-1;
while(N<n)lim++,N<<=1;
if(N==T)return ;
for(int i=1;i<T;i++)
rev[i]=0;
T=N;
for(int i=1;i<N;i++)
rev[i]=(rev[i>>1]>>1)|((i&1)<<lim);
}
inline void NTT(int *f,int n,bool tp=0){
int N=1;
while(N<n)N<<=1;
upd(N);
for(int i=0;i<N;i++)
if(rev[i]>i)swap(f[rev[i]],f[i]);
for(int m=2;m<=N;m<<=1){
int len=m>>1;
int buf=qp(tp?ig:g,(M-1)/m);
for(int i=0;i<N;i+=m){
int T=1;
for(int j=i;j<i+len;j++){
int a=f[j],b=T*f[j+len]%M;
f[j]=addv(a,b);
f[j+len]=addv(a,M-b);
T=T*buf%M;
}
}
}
const int IV=inv(N);
if(tp)
for(int i=0;i<N;i++)
f[i]=f[i]*IV%M;
}
inline void TM(int *f,int n,int *g,int m,int *p,int u=-1){
int N=1,lim=-1;
while(N<=m+n)lim++,N<<=1;
int LIM=N;
if(u!=-1)LIM=u;
for(int i=0;i<N;i++)
tf[i]=f[i];
for(int i=n+1;i<N;i++)
f[i]=0;
if(g!=f){
for(int i=0;i<N;i++)
tg[i]=g[i];
for(int i=m+1;i<N;i++)
g[i]=0;
}
NTT(f,N);
if(g!=f)
NTT(g,N);
for(int i=0;i<N;i++)
p[i]=f[i]*g[i]%M;
NTT(p,N,1);
if(f!=p)
for(int i=0;i<N;i++)
f[i]=tf[i],tf[i]=0;
if(p!=g&&g!=f)
for(int i=0;i<N;i++)
g[i]=tg[i],tg[i]=0;
for(int i=LIM;i<N;i++)p[i]=0;
}
inline void INV(int *f,int n,int *g){
int N=1;
g[0]=inv(f[0]);
while(N<n){
N<<=1;
for(int i=0;i<(N<<1);i++)tf[i]=f[i];
for(int i=N;i<(N<<1);i++)f[i]=0;
NTT(f,N<<1);
NTT(g,N<<1);
for(int i=0;i<N<<1;i++)
g[i]=g[i]*(2-g[i]*f[i]%M+M)%M;
NTT(g,N<<1,1);
for(int i=0;i<(N<<1);i++)f[i]=tf[i],tf[i]=0;
for(int i=N;i<N<<1;i++)
g[i]=0;
}
for(int i=0;i<N;i++)
g[i]=(g[i]+M)%M;
for(int i=n;i<N;i++)
g[i]=0;
}
int P[MXN],Q[MXN];
inline void ITGL(int *f,int n,int c=0){
for(int i=n+1;i>=1;i--)
f[i]=f[i-1]*inv(i)%M;
f[0]=c;
}
inline void DER(int *f,int n){
for(int i=0;i<n;i++)
f[i]=(i+1)*f[i+1]%M;
f[n]=0;
}
int org[MXN],tmp[MXN];
inline void LN(int *f,int n,int *g){
for(int i=0;i<n;i++)
org[i]=f[i];
INV(f,n,g);
int c=f[0];
if(c!=1&&c!=-M+1)exit(0);
DER(f,n);
TM(f,n-2,g,n-1,g,n);
ITGL(g,n-1);
g[n]=0;
for(int i=0;i<n;i++)
f[i]=org[i];
}
inline void EXP(int *f,int n,int *g){
int N=1;
g[0]=1;
if(f[0]!=0)exit(0);
while(N<n){
N<<=1;
LN(g,N,tmp);
for(int i=0;i<(N<<1);i++)tf[i]=f[i];
for(int i=N;i<(N<<1);i++)f[i]=0;
for(int i=0;i<(N<<1);i++)
add(tmp[i],M-f[i]);
NTT(tmp,N<<1);
NTT(g,N<<1);
for(int i=0;i<(N<<1);i++)
g[i]=g[i]*(1-tmp[i]+M)%M;
NTT(g,N<<1,1);
for(int i=0;i<(N<<1);i++)f[i]=tf[i],tf[i]=0;
for(int i=0;i<(N<<1);i++)tmp[i]=0;
for(int i=N;i<(N<<1);i++)
g[i]=0;
}
for(int i=0;i<N;i++)
g[i]=(g[i]+M)%M;
for(int i=n;i<N;i++)
g[i]=0;
}
int QPT[MXN];
inline void QP(int *f,int n,string k,int *g){
int t=-1;
int b=0;
for(int i=0;i<n;i++)
if(f[i]!=0){
t=i;
b=f[i];
break;
}
int ivb=inv(b);
if(t&&(k.size()>=6||t*trs(k,M)>=n)){
for(int i=0;i<n;i++)g[i]=0;
return ;
}
for(int i=t;i<=n;i++)
g[i-t]=f[i]*ivb%M;
LN(g,n,QPT);
int kx=trs(k,M);
for(int i=0;i<n;i++)
QPT[i]=QPT[i]*kx%M;
for(int i=0;i<2*n;i++)
g[i]=0;
EXP(QPT,n,g);
b=qp(b,trs(k,M-1));
int p=trs(k,M)*t;
for(int i=n-1;i>=p;i--)
g[i]=g[i-p]*b%M;
for(int i=0;i<p;i++)
g[i]=0;
}
int n,k;
int SF[MXN],SG[MXN];
int fac[MXN];
signed main(){
ios::sync_with_stdio(0);
// freopen("genshin.in","r",stdin);
// freopen("genshin.out","w",stdout);
cin>>n>>k;
n++;
fac[0]=1;
for(int i=1;i<=n;i++)
fac[i]=fac[i-1]*i%M;
SF[1]=1;
EXP(SF,n,SG);
SG[0]--;
memset(SF,0,sizeof(SF));
QP(SG,n,to_string(k),SF);
for(int i=0;i<n;i++)
cout<<SF[i]*fac[i]%M*inv(fac[k])%M<<" ";
cout<<endl;
return 0;
}