Problem: Given 2 integers u and v, find the shortest array such that [bitwise-xor](https://en.wikipedia.org/wiki/Bitwise_operation#XOR) of its elements is u, and the sum of its elements is v.

Input

The only line contains 2 integers u and v (0 ≤ u,v ≤ 10^{18}).

Output

If there's no array that satisfies the condition, print "-1". Otherwise:

The first line should contain one integer, n, representing the length of the desired array. The next line should contain n positive integers, the array itself. If there are multiple possible answers, print any.

Examples

Input


2 4


Output


2
3 1

Input


1 3


Output


3
1 1 1

Input


8 5


Output


-1

Input


0 0


Output


0

Note

In the first sample, 3⊕ 1 = 2 and 3 + 1 = 4. There is no valid array of smaller length.

Notice that in the fourth sample the array is empty.

Solution (in PYTHON3):

Solution:
import math
import fractions

def make_divisors(n):
    divisors = []
    for i in range(1, int(n**0.5)+1):
        if n % i == 0:
            divisors.append(i)
            if i != n // i:
                divisors.append(n//i)

    # divisors.sort()
    return divisors

def ValueToBits(x,digit):
    res = [0 for i in range(digit)]
    now = x
    for i in range(digit):
        res[i]=now%2
        now = now >> 1
    return res

def BitsToValue(arr):
    n = len(arr)
    ans = 0
    for i in range(n):
        ans+= arr[i] * 2**i
    return ans

def ValueToArray10(x, digit):
    ans = [0 for i in range(digit)]
    now = x
    for i in range(digit):
        ans[digit-i-1] = now%10
        now = now //10
    return ans

'''
queue=[start]
done=0
checked=[0 for i in range(n)]
checked[start] = 1

while(True):
    #print(queue,done)
    if(len(queue)==done):
        #print("b")
        break
    else:
        
        now = queue[done]
        nownb = nb[now]
        #print("a",now,nownb,done)
        if(len(nownb)<=2):
            for j in range(len(nownb)):
                if(checked[nownb[j]]==0):
                    queue.append(nownb[j])
                    checked[nownb[j]]=1
            done+=1
            
########

def cmb(n, r, p):
    if (r < 0) or (n < r):
        return 0
    r = min(r, n - r)
    return fact[n] * factinv[r] * factinv[n-r] % p

p = 10 ** 9 + 7
N = 10 ** 6 + 2
fact = [1, 1]  # fact[n] = (n! mod p)
factinv = [1, 1]  # factinv[n] = ((n!)^(-1) mod p)
inv = [0, 1]  # factinv 計算用

for i in range(2, N + 1):
    fact.append((fact[-1] * i) % p)
    inv.append((-inv[p % i] * (p // i)) % p)
    factinv.append((factinv[-1] * inv[-1]) % p)
'''


#a = list(map(int, input().split()))

a,b = list(map(int, input().split()))

if((b-a)%2==1 or a>b):
    print(-1)
    exit()

if(a==b and a==0):
    print(0)
    exit()
    
if(a==b):
    print(1)
    print(a)
    exit()

dif = (b-a)//2



aa = ValueToBits(a,60)
difs = ValueToBits(dif,60)
#xor = ValueToBits(a^dif,60)

#print(aa)
#print(difs)

for i in range(60):
    if(aa[i]+difs[i]==2):
        print(3)
        print(a,dif,dif)
        exit()

print(2)
print(a+dif,dif)