n = int(input()) b = [0] + [int(input()) for _ in range(n)] # i is odd # b(i) = a(i) + a(i + 1) # b(i + 1) = a(i + 1) - a(i + 2) # -> a(i + 1) = b(i + 1) + a(i + 2) # b(i) = a(i) + (b(i + 1) + a(i + 2)) # -> a(i + 2) = b(i) - b(i + 1) - a(i) # i -> i - 2 # a(i) = b(i - 2) - b(i - 1) - a(i - 2) # apply # a(3) = b(1) - b(2) - a(1) > 0 # -> a(1) < b(1) - b(2) = G(3) # a(5) = b(3) - b(4) - a(3) # = b(3) - b(4) - (b(1) - b(2) - a(1)) # = b(3) - b(4) - b(1) + b(2) + a(1) > 0 # -> L(5) = b(1) - b(2) - b(3) + b(4) < a(1) # a(7) = b(5) - b(6) - a(5) # = b(5) - b(6) - (b(3) - b(4) - b(1) + b(2) + a(1)) # = b(5) - b(6) - b(3) + b(4) + b(1) - b(2) - a(1) > 0 # -> a(1) < b(1) - (2) - b(3) + b(4) + b(5) - b(6) = G(7) # and ... # b(i) = a(i) + a(i + 1) # -> 0 < a(i) = b(i) - a(i + 1) < b(i) # if i is in [3, 7, 11, ...], 0 < a(i) = G(i) - a(1) < b(i) -> G_odd(i) = G(i) - b(i) < a(1) # if i is in [5, 9, 13, ...], 0 < a(i) = a(1) - L(i) < b(i) -> a(1) < b(i) + L(i) = L_odd(i) # repeat then ... max(L_odd) < a(1) < min(G_odd) # if min(G_odd) - max(L_odd) > 1, a(1) exists maybe, otherwise not # j is even # b(j) = a(j) - a(j + 1) # b(j + 1) = a(j + 1) + a(j + 2) # -> a(j + 1) = b(j + 1) - a(j + 2) # b(j) = a(j) - (b(j + 1) - a(j + 2)) # -> a(j + 2) = b(j) + b(j + 1) - a(j) # j -> j - 2 # a(j) = b(j - 2) + b(j - 1) - a(j - 2) # apply # a(4) = b(2) + b(3) - a(2) > 0 # -> a(2) < b(2) + b(3) = G(4) # a(6) = b(4) + b(5) - a(4) # = b(4) + b(5) - (b(2) + b(3) - a(2)) # = b(4) + b(5) - b(2) - b(3) + a(2) > 0 # -> L(6) = b(2) + b(3) - b(4) - b(5) < a(2) # b(j) = a(j) - a(j + 1) # -> b(j) < a(j) = b(j) + a(j + 1) # if j is in [2, 6, 10, ...], b(j) < G(j) - a(2) = a(j) -> a(2) < G(j) - b(j) = G_even(j) # if j is in [4, 8, 12, ...], b(j) < a(2) - L(j) = a(j) -> L_even(j) = b(j) + L(j) < a(2) # repeat then ... max(L_even) < a(2) < min(G_odd) # if min(G_even) - max(L_even) > 1, a(2) exists maybe, otherwise not # don't forget: b(1) = a(1) + a(2) # max(L_odd) < a(1) < min(G_odd, b(1)) # max(L_even) < a(2) < min(G_even, b(1)) debug = False L_odd = 0 G_odd = b[1] tmp = 0 for i in range(3, n + 3, 2): if i > n: break tmp = b[i - 2] - b[i - 1] - tmp if ((i - 3) // 2) % 2 == 0: G_odd = min(G_odd, tmp, tmp - b[i]) else: L_odd = max(L_odd, -tmp, b[i] + tmp) L_even = 0 G_even = b[1] tmp = 0 for j in range(4, n + 3, 2): if j > n: break tmp = b[j - 2] + b[j - 1] - tmp if ((j - 4) // 2) % 2 == 0: G_even = min(G_even, tmp, tmp - b[j]) else: L_even = max(L_even, -tmp, b[j] + tmp) if debug: print(L_odd, G_odd, L_even, G_even) a1 = G_odd - 1 a2 = b[1] - a1 if a2 <= L_even: a2 = L_even + 1 a1 = b[1] - a2 if G_even > G_odd: a2 = G_even - 1 a1 = b[1] = a2 if a1 <= L_odd: a1 = L_odd + 1 a2 = b[1] - a1 if a1 in range(L_odd + 1, G_odd) and a2 in range(L_even + 1, G_even): a = [0, a1, a2] for k in range(3, n + 2): if k % 2 == 0: a.append(b[k - 2] + b[k - 1] - a[k - 2]) else: a.append(b[k - 2] - b[k - 1] - a[k - 2]) if debug: for x in range(1, n + 1): if x % 2 == 0: if b[x] != a[x] - a[x + 1]: print(x, b[x], a[x], a[x + 1], a[x] - a[x + 1]) break else: if b[x] != a[x] + a[x + 1]: print(x, b[x], a[x], a[x + 1], a[x] - a[x + 1]) break print(n + 1, *a[1:], sep='\n') else: print(-1)