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 JAVA):

Solution:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
public class cdf628c
{
	static void merge(int arr[], int l, int m, int r) 
    { 
        int n1 = m - l + 1; 
        int n2 = r - m; 
        int L[] = new int [n1]; 
        int R[] = new int [n2]; 
        for (int i=0; i<n1; ++i) 
            L[i] = arr[l + i]; 
        for (int j=0; j<n2; ++j) 
            R[j] = arr[m + 1+ j]; 
        int i = 0, j = 0; 
        int k = l; 
        while (i < n1 && j < n2) 
        { 
            if (L[i] <= R[j]) 
            { 
                arr[k] = L[i]; 
                i++; 
            } 
            else
            { 
                arr[k] = R[j]; 
                j++; 
            } 
            k++; 
        } 
        while (i < n1) 
        { 
            arr[k] = L[i]; 
            i++; 
            k++; 
        } 
        while (j < n2) 
        { 
            arr[k] = R[j]; 
            j++; 
            k++; 
        } 
    } 
    static void sort(int arr[], int l, int r) 
    { 
        if (l < r) 
        { 
            int m = (l+r)/2; 
            sort(arr, l, m); 
            sort(arr , m+1, r); 
            merge(arr, l, m, r); 
        } 
    } 
    static int gcd(int a, int b) 
    { 
      if (b == 0) 
        return a; 
      return gcd(b, a % b);  
    } 
    static long xor(long a,long b)
    {
    	return a^b;
    }
	public static void main(String args[])throws Exception
	{
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		//int t=Integer.parseInt(br.readLine());
		for(int i=0;i<1;i++)
		{
			String s=br.readLine();
			String ss[]=s.split(" ");
			long n=Long.parseLong(ss[0]);
			long m=Long.parseLong(ss[1]);
			if(n>m||(m-n)%2!=0)
			{
				System.out.println("-1");
				return;
			}
			if(m==0)
			{
				System.out.println("0");
				return;
			}
			long a=n,b=(m-n)/2,c=(m-n)/2;
			if(xor(a+b,c)==n)
			{
				if(xor(a+b+c,0)==n)
				{
					System.out.println("1");
					System.out.print(a+b+c);
				}
				else
				{
					System.out.println("2");
					System.out.print((a+b)+" "+c);
				}
				return;
			}
			if(xor(a+c,b)==n)
			{
				if(xor(a+b+c,0)==n)
				{
					System.out.println("1");
					System.out.print(a+b+c);
				}
				else
				{
					System.out.println("2");
					System.out.print((a+c)+" "+b);
				}
				return;
			}
			if(xor(c+b,a)==n)
			{
				if(xor(a+b+c,0)==n)
				{
					System.out.println("1");
					System.out.print(a+b+c);
				}
				else
				{
					System.out.println("2");
					System.out.print((c+b)+" "+a);
				}
				return;
			}
			System.out.println("3");
			System.out.print(a+" "+b+" "+c);
		}
	}
}