#include using namespace std; typedef long long ll; const ll INF = 1000000000000000001; int main() { cin.tie(0); ios::sync_with_stdio(false); int n; cin >> n; vector b(n); for (int i = 0; i < n; i++) cin >> b[i]; bool flag = true; for (int i = 1; i < n; i++) { if (flag) { b[i] = b[i - 1] - b[i]; } else { b[i] += b[i - 1]; } flag = (i / 2 % 2 == 0); } ll min1 = INF, min2 = INF; int imin1 = -1, imin2 = -1; for (int i = 0; i < n; i++) { if (i / 2 % 2 == 0) { if (min1 > b[i]) { min1 = b[i]; imin1 = i + 1; } } else { if (min2 > b[i]) { min2 = b[i]; imin2 = i + 1; } } } if (imin1 != 1) { vector a1(n + 1); a1[imin1] = 1; a1[0] = b[imin1 - 1] - a1[imin1]; flag = true; if (a1[0] <= 0 || a1[0] >= INF) flag = false; for (int i = 0; i < n; i++) { if (i / 2 % 2 == 0) { a1[i + 1] = b[i] - a1[0]; } else { a1[i + 1] = -b[i] + a1[0]; } if (a1[i + 1] <= 0 || a1[i + 1] >= INF) { flag = false; break; } } if (flag) { cout << n + 1 << endl; for (int i = 0; i <= n; i++) { cout << a1[i] << endl; } return 0; } } if (imin2 != -1) { vector a2(n + 1); a2[imin2] = 1; a2[0] = -b[imin2 - 1] + a2[imin2]; flag = true; if (a2[0] <= 0 || a2[0] >= INF) flag = false; for (int i = 0; i < n; i++) { if (i / 2 % 2 == 0) { a2[i + 1] = b[i] - a2[0]; } else { a2[i + 1] = -b[i] + a2[0]; } if (a2[i + 1] <= 0 || a2[i + 1] >= INF) { flag = false; break; } } if (flag) { cout << n + 1 << endl; for (int i = 0; i <= n; i++) { cout << a2[i] << endl; } return 0; } } cout << -1 << endl; return 0; }