#include using namespace std; typedef long long ll; #define all(x) (x).begin(),(x).end() const int mod=998244353,MAX=100005,INF=1<<30; int P; vector> fft(vector> a,bool inverse){//inverse==1のとき逆変換 int n=a.size(); int h=0; for(int i=0;(1<>k)&1)<<(h-1-k); if(i w; if(inverse==1) w=polar(1.0,(2*M_PI)/(2*b)*j*1); else w=polar(1.0,(2*M_PI)/(2*b)*j*(-1)); for(int k=0;k s=a[j+k]; complex t=a[j+k+b]*w; a[j+k]=s+t; a[j+k+b]=s-t; } } } if(inverse) for(int i=0;i> fft(vector a,bool inverse){//オーバーロード vector> a_complex(a.size()); for(int i=0;i(a[i],0); return fft(a_complex,inverse); } vector convolve(vector a,vector b){//解く int s=a.size()+b.size()-1; int t=1; while(t> A=fft(a,0),B=fft(b,0); for(int i=0;i>P; vector A(P),B(P); for(int i=0;i>A[i+1]; for(int i=0;i>B[i+1]; int root=1; for(root;;root++){ set SE; int now=1; bool ok=true; for(int i=1;i<=P-1;i++){ now*=root; now%=P; if(SE.find(now)!=SE.end()){ ok=false; break; } SE.insert(now); } if(ok) break; } vector a(P),b(P); int now=1; for(int i=1;i res=convolve(a,b); vector ans(P-1); for(int i=0;i