from Queue import * # Queue, LifoQueue, PriorityQueue from bisect import * #bisect, insort from collections import * #deque, Counter,OrderedDict,defaultdict #set([]) import math import copy import itertools import string import sys myread = lambda : map(int,raw_input().split()) def solver(): N = int(raw_input()) b = [int(raw_input()) for i in xrange(N)] cur = 0 lu = [1,10**18] for i in xrange(N): if i % 4 == 0: cur = b[i] - cur lu[1] = min(cur - 1, lu[1]) lu[0] = max(cur - 10**18, lu[0]) elif i % 4 == 1: cur = cur - b[i] lu[1] = min(cur - 1, lu[1]) lu[0] = max(cur - 10**18, lu[0]) elif i % 4 == 2: cur = b[i] - cur lu[1] = min(10**18 - cur, lu[1]) lu[0] = max(1 - cur, lu[0]) else: cur = cur - b[i] lu[1] = min(10**18 - cur, lu[1]) lu[0] = max(1 - cur, lu[0]) if lu[0] > lu[1]: print -1 return a = [lu[0]] for i in xrange(N): if i % 2 == 0: a.append(b[i] - a[-1]) else: a.append(a[-1] - b[i]) print len(a) for x in a: print x if __name__ == "__main__": solver()