#include <iostream>
#include <vector>
using namespace std;
vector<int> poly_mul_naive(const vector<int>& a, const vector<int>& b)
{
if (a.empty() || b.empty())
{
return vector<int>();
}
vector<int> ret(a.size() + b.size() - 1, 0);
for (int ia = 0; ia < a.size(); ia++)
{
for (int ib = 0; ib < b.size(); ib++)
{
ret[ia + ib] += a[ia] * b[ib];
}
}
return ret;
}
void print_poly(const vector<int>& a)
{
cout << "[";
if (!a.empty())
{
cout << a[a.size() - 1];
}
for (int i = a.size() - 2; i >=0; i--)
{
cout << ", " << a[i];
}
cout << "]";
}
istream& operator>>(istream& input, vector<int>& v)
{
v.clear();
size_t size;
input >> size;
v.reserve(size);
for (size_t i = 0; i < size; i++)
{
int a;
input >> a;
v.push_back(a);
}
return input;
}
int main()
{
vector<int> a;
cin >> a;
vector<int> ret(1, 1); // [1]
vector<int> poly(2, 1); // [1; 1] - drugi (idx: 0) element będziemy zastępywać
for (int i = 0; i < a.size(); i++)
{
poly[0] = -a[i];
ret = poly_mul_naive(ret, poly);
}
print_poly(ret);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZlY3RvcjxpbnQ+IHBvbHlfbXVsX25haXZlKGNvbnN0IHZlY3RvcjxpbnQ+JiBhLCBjb25zdCB2ZWN0b3I8aW50PiYgYikKewogIGlmIChhLmVtcHR5KCkgfHwgYi5lbXB0eSgpKQogIHsKICAgIHJldHVybiB2ZWN0b3I8aW50PigpOwogIH0KICB2ZWN0b3I8aW50PiByZXQoYS5zaXplKCkgKyBiLnNpemUoKSAtIDEsIDApOwogIGZvciAoaW50IGlhID0gMDsgaWEgPCBhLnNpemUoKTsgaWErKykKICB7CiAgCWZvciAoaW50IGliID0gMDsgaWIgPCBiLnNpemUoKTsgaWIrKykKICAJewogIAkJcmV0W2lhICsgaWJdICs9IGFbaWFdICogYltpYl07CiAgCX0KICB9CiAgcmV0dXJuIHJldDsKfQoKdm9pZCBwcmludF9wb2x5KGNvbnN0IHZlY3RvcjxpbnQ+JiBhKQp7CiAgY291dCA8PCAiWyI7CiAgaWYgKCFhLmVtcHR5KCkpCiAgewogICAgY291dCA8PCBhW2Euc2l6ZSgpIC0gMV07CiAgfQogIGZvciAoaW50IGkgPSBhLnNpemUoKSAtIDI7IGkgPj0wOyBpLS0pCiAgewogIAljb3V0IDw8ICIsICIgPDwgYVtpXTsKICB9CiAgY291dCA8PCAiXSI7Cn0KCmlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYgaW5wdXQsIHZlY3RvcjxpbnQ+JiB2KQp7CiAgdi5jbGVhcigpOwogIHNpemVfdCBzaXplOwogIGlucHV0ID4+IHNpemU7CiAgdi5yZXNlcnZlKHNpemUpOwogIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQogIHsKICAJaW50IGE7CiAgCWlucHV0ID4+IGE7CiAgCXYucHVzaF9iYWNrKGEpOwogIH0KICByZXR1cm4gaW5wdXQ7Cn0KCmludCBtYWluKCkKewogIHZlY3RvcjxpbnQ+IGE7CiAgY2luID4+IGE7CiAgdmVjdG9yPGludD4gcmV0KDEsIDEpOyAvLyBbMV0KICB2ZWN0b3I8aW50PiBwb2x5KDIsIDEpOyAvLyBbMTsgMV0gLSBkcnVnaSAoaWR4OiAwKSBlbGVtZW50IGLEmWR6aWVteSB6YXN0xJlweXdhxIcKICBmb3IgKGludCBpID0gMDsgaSA8IGEuc2l6ZSgpOyBpKyspCiAgewogIAlwb2x5WzBdID0gLWFbaV07CiAgCXJldCA9IHBvbHlfbXVsX25haXZlKHJldCwgcG9seSk7CiAgfQogIHByaW50X3BvbHkocmV0KTsKICByZXR1cm4gMDsKfQ==