import std.array, std.conv, std.stdio;

immutable Nmax = 25;
alias Polynomial = long[Nmax+1];

Polynomial sum(Polynomial lhs, Polynomial rhs) {
	foreach (i; 0 .. Nmax+1) {
		lhs[i] += rhs[i];
	}
	return lhs;
}

Polynomial mul(Polynomial lhs, Polynomial rhs) {
	Polynomial result;
	foreach (i; 0 .. Nmax+1) {
		foreach (j; 0 .. i+1) {
			result[i] += lhs[j] * rhs[i-j];
		}
	}
	return result;
}

Polynomial mul(long lhs, Polynomial rhs) {
	foreach (i; 0 .. Nmax+1) {
		rhs[i] *= lhs;
	}
	return rhs;
}

Polynomial solve(Polynomial f) {
	Polynomial x_1;
	x_1[0] = -1, x_1[1] = 1;
	
	Polynomial x_1_power;
	x_1_power[0] = 1;
	
	Polynomial result;
	
	foreach (i; 0 .. Nmax+1) {
		result = sum( result, mul(f[i], x_1_power) );
		x_1_power = mul(x_1, x_1_power);
	}
	return result;
}

void main() {
	Polynomial f;
	auto N = readln[0 .. $-1].to!ulong;
	auto coeffs = readln.split.to!(long[]);
	assert (coeffs.length == N+1 && N <= Nmax);
	
	foreach (i; 0 .. N+1) {
		f[N-i] = coeffs[i];
	}
	
	auto ans_pol = solve(f);
	string ans;
	foreach (i; 0 .. N+1) {
		ans ~= ans_pol[N-i].to!string ~ " ";
	}
	ans[0 .. $-1].writeln;
}