#include<iostream>
#include<vector>
#include<algorithm>
#include<cstdint>
using namespace std;
#define numtype_t uint64_t
void fakeMul(const vector<numtype_t>& lhs, const vector<numtype_t>& rhs, vector<numtype_t>& out)
{
out.resize(lhs.size() + rhs.size() - 1);
fill(out.begin(), out.end(), 0);
for (int i = 0; i < rhs.size(); ++i)
{
int k = i;
for (int j = 0; j < lhs.size(); ++j)
{
numtype_t mul = rhs[i] * lhs[j];
out[k++] += mul;
}
}
}
void printNum(const vector<numtype_t>& num)
{
for (int i = 0; i < num.size(); ++i)
{
cout << num[i];
if (i != num.size() - 1)cout << " ";
else cout << endl;
}
}
int main()
{
int numTests;
cin >> numTests;
while (numTests--)
{
int n, d;
cin >> n >> d;
vector<numtype_t> num0(n), num1(n);
for (int i = 0; i < n; ++i)
cin >> num0[i];
for (int i = 0; i < n; ++i)
cin >> num1[i];
vector<numtype_t> rowResult, colResult;
if (!d)
{
fakeMul(num0, num1, rowResult);
reverse(num1.begin(), num1.end());
fakeMul(num0, num1, colResult);
}
else
{
fakeMul(num0, num1, colResult);
reverse(num1.begin(), num1.end());
fakeMul(num0, num1, rowResult);
}
printNum(rowResult);
printNum(colResult);
}
return 0;
}