#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;
}