连交两遍都不T
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
inline int read(){
register int x=0,f=0,ch=getchar();
while('0'>ch||ch>'9')f^=ch=='-',ch=getchar();
while('0'<=ch&&ch<='9')x=(x<<1)+(x<<3)+(ch^'0'),ch=getchar();
return f?-x:x;
}
typedef double db;
const int MAX=2100010;
const db p=acos(-1.0);
struct c{
db x,y;
c(){x=y=0;}
c(db a,db b){x=a,y=b;}
}f[MAX],g[MAX];
c operator + (c a,c b){return c(a.x+b.x,a.y+b.y);}
c operator - (c a,c b){return c(a.x-b.x,a.y-b.y);}
c operator * (c a,c b){return c(a.x*b.x-a.y*b.y,a.x*b.y+a.y*b.x);}
void FFT(int n,c *a,int op){
if(n<=1)return ;
register int mid=n>>1;
c a1[mid],a2[mid];
for(register int i=0;i<mid;++i)a1[i]=a[i<<1],a2[i]=a[i<<1|1];
FFT(mid,a1,op);FFT(mid,a2,op);
c w1(cos(p/mid),op*sin(p/mid)),w(1,0),x;
for(register int i=0;i<mid;++i){
x=w*a2[i];
a[i]=a1[i]+x;
a[i+mid]=a1[i]-x;
w=w*w1;
}
}
int n,m,k;
signed main(){
n=read(),m=read();
for(register int i=0;i<=n;++i)f[i].x=read();
for(register int i=0;i<=m;++i)g[i].x=read();
k=1;
while(k<=n+m)k<<=1;
FFT(k,f,1);FFT(k,g,1);
for(register int i=0;i<=k;++i)f[i]=f[i]*g[i];
FFT(k,f,-1);
for(register int i=0;i<=n+m;++i)printf("%d ",(int)(f[i].x/k+0.5));
return 0;
}