#include<iostream>
#include<cmath>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<map>
#include<queue>
#include<vector>
using namespace std;
typedef long long LL;
const int MAXN = 1e7 + 10;
const int INF = 0x3f;
const double pi = acos(-1.0);
struct num{
double a;
double b;
num(double x = 0,double y = 0){
a = x;
b = y;
}
num cpy(){
num an;
an.a = a;
an.b = b;
return an;
}
num operator +(num b){
num c = this->cpy();
num ans;
ans.a = (b.a + c.a);
ans.b = (b.b + c.b);
return ans;
}
num operator -(num b){
num c = this->cpy();
num ans;
ans.a = (b.a - c.a);
ans.b = (b.b - c.b);
return ans;
}
num operator *(num b){
num c = this->cpy();
num ans;
ans.a = (b.a * c.a - b.b * c.b);
ans.b = (b.b * c.a + b.a * c.b);
return ans;
}
num operator /(num b){
}
}a[MAXN], b[MAXN];
ostream& operator << (ostream& os,const num& n)
{
return os << n.a << " " << n.b;
}
int bin[MAXN], ans[MAXN];
double coss[MAXN], sinn[MAXN];
void FFT(int len, num *a,double type){
for(int i = 0;i < len; i++){
if(i < bin[i]){
swap(a[i], a[bin[i]]);
}
}
for(int j = 1;j < len; j <<= 1){
num tmp = num(cos(pi / j), type * sin(pi / j));
for(int k = 0;k < len; k += (j << 1)){
num tmp1 = num(1, 0);
for(int i = 0;i < j; i++, tmp1 = tmp1 * tmp){
num X = a[i + k];
num Y = tmp1 * a[i + j + k];
a[i + k] = X + Y;
a[i + j + k] = X - Y;
}
}
}
}
int n, m;
void READ(){
cin >> n >> m;
for(int i = 0;i <= n; i++){
cin >> a[i].a;
}
for(int i = 0;i <= m; i++){
cin >> b[i].a;
}
}
int len = 1;
int log_len = 0;
void SOLVE(){
for(;len <= n + m;len <<= 1, log_len++);
for(int i = 0;i <= len; i++){
bin[i] = (bin[i >> 1] >> 1) | ((i & 1) << (log_len - 1));
}
FFT(len, a, 1);
FFT(len, b, 1);
for(int i = 0;i <= len; i++){
a[i] = a[i] * b[i];
}
FFT(len, a, -1);
}
void PRINT(){
for(int i = 0;i < len; i++){
ans[i]= a[i].a / len + 0.49;
cout << ans[i] << " ";
}
}
int main()
{
READ();
SOLVE();
PRINT();
}