#include <iostream>
#include <math.h>
using namespace std;
const int N = 2e6 + 5;
const int mod = 1e9 + 7;
const double PI = acos(-1);
typedef long long ll;
int n, m, t;
int limit = 1;
int bitnum = 0;
int r[N << 1];
struct complex
{
double a, b;
complex(double x = 0, double y = 0)
{
a = x, b = y;
}
complex operator + (complex &y)
{
return complex(a + y.a, b + y.b);
}
complex operator - (complex &y)
{
return complex(a - y.a, b - y.b);
}
complex operator * (complex &y)
{
return complex(a * y.a - b * y.b, a * y.b + b * y.a);
}
} f[N << 1], g[N << 1];
void FFT(complex a[], int type)
{
for(int i = 0; i < limit; i++)
if(a[i].a != r[i])
swap(a[i], a[r[i]]);
for(int mid = 1;mid < limit; mid <<= 1)
{
complex Wn(cos(PI / mid), type * sin((PI / mid)));
for(int len = mid << 1, pos = 0; pos < limit; pos += len)
{
complex w(1, 0);
for(int k = 0; k < mid; k++, w = w * Wn)
{
complex x = a[pos + k];
complex y = w * a[pos + mid + k];
a[pos + k] = x + y;
a[pos + mid + k] = x - y;
}
}
}
if(type == 1)
return;
for(int i = 0; i <= limit; i++)
a[i].a /= limit;
}
int main(void)
{
cin >> n >> m;
for(int i = 0; i <= n; i++)
cin >> f[i].a;
for(int i = 0; i <= m; i++)
cin >> g[i].a;
while(limit < n + m + 1)
limit <<= 1, bitnum++;
for(int i = 0; i < limit; i++)
r[i] = (r[i >> 1] >> 1) | ((i & 1) << (bitnum - 1));
FFT(f, 1);
FFT(g, 1);
for(int i = 0; i < limit; i++)
f[i] = f[i] * g[i];
FFT(f, -1);
for(int i = 0; i <= n + m; i++)
cout << int(f[i].a + 0.5) << ' ';
return 0;
}