/*
_ooOoo_
o8888888o
88" . "88
(| -_- |)
O\ = /O
____/`---'\____
.' \\| |// `.
/ \\||| : |||// \
/ _||||| -:- |||||- \
| | \\\ - /// | |
| \_| ''\---/'' | |
\ .-\__ `-` ___/-. /
___`. .' /--.--\ `. . __
."" '< `.___\_<|>_/___.' >'"".
| | : `- \`.;`\ _ /`;.`/ - ` : | |
\ \ `-. \_ __\ /__ _/ .-` / /
======`-.____`-.___\_____/___.-`____.-'======
`=---='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
佛祖保佑 永无BUG
*/
#include <bits/stdc++.h>
#define MAX 305
using namespace std;
int n, a[MAX], b[MAX];
int m[MAX][MAX][MAX];
int flag;
void init()
{
flag = 0;
memset(m, 0, sizeof(m));
}
void print()
{
for (int i = 1; i <= n; i++) {
if (i != 1) cout << " ";
cout << b[i];
}
cout << endl;
}
void dfs(int index)
{
if (m[index][b[index - 1]][b[index - 2]]) return;
print();
m[index][b[index - 1]][b[index - 2]] = 1;
if (index == n) {
int x = 3 * a[index - 1] - b[index - 1] - b[index - 2];
for (int i = 0; i < 3; i++) {
if (x + i <= 0) continue;
b[n] = x + i;
if ((b[n] + b[n - 1] + b[n - 2]) / 3 == a[n - 1]) {
if ((b[n] + b[n - 1]) / 2 == a[n]) {
print();
exit(0);
}
}
}
return;
}
int x = 3 * a[index - 1] - b[index - 1] - b[index - 2];
for (int i = 0; i < 3; i++) {
if (x + i <= 0) continue;
b[index] = x + i;
if ((b[index] + b[index - 1] + b[index - 2]) / 3 == a[index - 1]) dfs(index + 1);
}
}
int main()
{
cin >> n;
for (int i = 1; i <= n; i++) cin >> a[i];
for (int i = 1; i <= 2 * a[1]; i++) {
b[1] = i;
b[2] = 2 * a[1] - b[1];
if ((b[1] + b[2]) / 2 == a[1]) dfs(3);
b[2] = 2 * a[1] - b[1] + 1;
if ((b[1] + b[2]) / 2 == a[1]) dfs(3);
}
return 0;
}