#include using namespace std; /*{{{*/ //template #define rep(i,n) for(int i=0;i::max()/2; constexpr long long LINF = numeric_limits::max()/3; #define mp make_pair #define pb push_back #define eb emplace_back #define fi first #define se second #define all(v) (v).begin(),(v).end() #define sz(x) (int)(x).size() #define debug(x) cerr<<#x<<":"< ostream& operator<<(ostream& os,const vector& vec){ os << "["; for(const auto& v : vec){ os << v << ","; } os << "]"; return os; } template ostream& operator<<(ostream& os,const pair& p){ os << "(" << p.first << ","<< p.second <<")"; return os; } template ostream& operator<<(ostream& os,const set& st){ os<<"{"; for(T v:st) os< inline void chmax(T &x,U y){ if(y>x) x = y; } template inline void chmin(T &x,U y){ if(y pii; typedef pair pll; typedef vector vi; typedef vector vvi; ll gcd(ll a,ll b){ if(b==0) return a; else return gcd(b,a%b); } //constexpr double eps = 1e-14; constexpr double eps = 1e-10; constexpr ll mod = 1e9+7; const int dx[]={1,0,-1,0} ,dy[] = {0,1,0,-1}; inline long long max(int a,long long b){ if(a>b) return a; else return b; } inline long long max(long long a,int b){ if(a>b) return a; else return b; } /*}}}*/ int main(){ int n; cin >> n; vector b(n); rep(i,n) cin >> b[i]; // fi <= se vector a(n+1,pll(-1,-1)); a[0].fi = 1; a[0].se = b[0] - 1; if(a[0].fi > a[0].se){ cout << -1 << endl; return 0; } for(int i=0;i high){ //cerr << i << endl; //rep(j,i+1){ // cerr << a[j] << endl; //} //cerr << low << " "<< high << endl; cout << -1 << endl; return 0; } //cerr << i+1 << " -- (" << low << "," << high << ")" << endl; a[i+1].fi = low; a[i+1].se = high; } vector ans(n+1); ans[n] = a[n].fi; for(int i=n-1;i>=0;i--){ if(i%2==0) ans[i] = b[i] - ans[i+1]; else ans[i] = b[i] + ans[i+1]; } cout << n+1 << endl; rep(i,n+1) cout << ans[i] << endl; }