//#define _GLIBCXX_DEBUG #include #define rep(i, n) for(int i=0; i; using vs = vector; using vi = vector; using vvi = vector; template using PQ = priority_queue; template using PQG = priority_queue, greater >; const int INF = 0xccccccc; const ll LINF = 922337203685477580LL; template inline bool chmax(T1 &a, T2 b) {return a < b && (a = b, true);} template inline bool chmin(T1 &a, T2 b) {return a > b && (a = b, true);} template istream &operator>>(istream &is, pair &p) { return is >> p.first >> p.second;} template ostream &operator<<(ostream &os, const pair &p) { return os << p.first << ' ' << p.second;} const int N = 1e5+10; //head int n; ll b[N]; ll a[N]; pair range = make_pair(INT64_MIN, INT64_MAX); int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> n; rep(i, n) cin >> b[i]; rep(i, n) { if(i&1) { a[i+1] = a[i]-b[i]; } else { a[i+1] = b[i]-a[i]; } } rep(i, n+1) { ll aa = (ll)1e18-a[i]; ll bb = 1-a[i]; if(i%4 == 0 or i%4 == 3) { chmin(range.second, aa); chmax(range.first, bb); } else { chmin(range.second, -bb); chmax(range.first, -aa); } } if(range.first > range.second) { cout << -1 << endl; return 0; } cout << n+1 << endl; rep(i, n+1) { if(i%4 == 0 or i%4 == 3) { cout << a[i] + range.first << '\n'; } else { cout << a[i] - range.first << '\n'; } } }