/*quick reference
const double PI = acos(-1);
std::complex<double> x = std::complex<double>(cos(2 * PI / n * i), sin(2 * PI / n * i))
std::complex<double> x_inv = std::conj(x);
double y = 1.414, q;
x.real(y);
q = floor( x.real() + 0.5 );
*/
#include<cstdio>
#include<cmath>
#include<complex>
#include<algorithm>
const int maxn = 5e5 + 5;
const double PI = acos(-1.0);
struct FastFourierTransform
{
std::complex<double> A[maxn], omega[maxn], omegaInverse[maxn];
int Rev(int x, int n)
{
n--;
int ret = 0;
while(n)
{
ret<<=1;
if(x & 1)
ret|=1;
x>>=1, n>>=1;
}
return ret;
}
void init(int n)
{
for(int i = 0; i < n; i++)
{
omega[i] = std::complex<double>(cos(2 * PI / n * i), sin(2 * PI / n * i));
omegaInverse[i] = std::conj(omega[i]);
}
}
void transform(std::complex<double>* a, int n, std::complex<double>* omega)//in-place, n being power of 2
{
for(int i = 0; i < n; i++)
{
int rev = Rev(i, n);
if(i < rev)
std::swap(a[i], a[rev]);
}
for(int l = 2; l <= n; l <<= 1)//l/2 + l/2 -> l
for(std::complex<double>* p = a; p != a + n; p += l)
{
int m = l >> 1;
for(int i = 0; i < m; i++)
{
std::complex<double> t = omega[n / l * i] * p[i + m];
p[i + m] = p[i] - t;
p[i] += t;
}
}
}
void dft(std::complex<double>* a, int n)
{
transform(a, n, omega);
}
void idft(std::complex<double>* a,int n)
{
transform(a, n, omegaInverse);
for(int i = 0; i < n; i++)
a[i] /= n;
}
}fft;
int c1[maxn], c2[maxn];
std::complex<double> a1[maxn], a2[maxn];
int main()
{
int n, m, N = 1;
scanf("%d%d", &n, &m);
for(int i = 0; i <= n; i++)
scanf("%d", c1 + i);
for(int i = 0; i <= m; i++)
scanf("%d", c2 + i);
for(int i = 0; i <= n; i++)
a1[i].real(c1[i]);
for(int i = 0; i <= m; i++)
a2[i].real(c2[i]);
while(N < n + m + 1) N <<= 1;
fft.init(N);
fft.dft(a1, N);
fft.dft(a2, N);
for(int i = 0; i < N; i++)
a1[i] *= a2[i];
fft.idft(a1, N);
for(int i = 0; i <= n + m; i++)
c1[i] = floor( a1[i].real() + 0.5 );
for(int i = 0; i <= n + m; i++)
printf("%d ", c1[i]);
}