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.util.*;
import java.io.*;
import java.math.BigInteger;

public class D1325{
    static int gcd(int a, int b) 
    { 
        if (a == 0) 
            return b; 
        if (b == 0) 
            return a; 
        int k; 
        for (k = 0; ((a | b) & 1) == 0; ++k)  
        { 
            a >>= 1; 
            b >>= 1; 
        } 
        while ((a & 1) == 0) 
            a >>= 1; 

        do { 
            while ((b & 1) == 0) 
                b >>= 1; 
            if (a > b)  
            { 
                int temp = a; 
                a = b; 
                b = temp; 
            } 

            b = (b - a); 
        } while (b != 0); 
        return a << k; 
    }   
    static int lcm(int a,int b){
        return a*b/gcd(a,b);
    }
	public static int binary(int arr[],int n, int a,int beg,int end){
		while(beg<=end){
			int mid=beg+(end-beg)/2;
			if(arr[mid]==a)
				return mid;
			if(arr[mid]<a)
				end=mid-1;
			else
				beg=mid+1;
		}
		return -1;
	}
    
    public static int binaryless(int arr[],int n, int a,int beg,int end){
        while(beg<=end){
            int mid=beg+(end-beg)/2;
            if(arr[mid]>=a){
                if(mid==1||arr[mid-1]<a)
                    return mid;
                end=mid-1;
            }
            else{
                beg=mid+1;
            }
        }
        return -1;
    }
	public static void sieve(int t){
		boolean srr[]=new boolean[t+1];
        
        for(int i=2;i*i<=t;i++)
        {
            if(!srr[i])
            {
                for(int k=i*i;k<=t;k+=i)
                    srr[k]=true;
            }
        }
        for(int i=2;i<t+1;i++){
        	if(!srr[i])
            	System.out.println(i);
        }
	}
    static int power(int x, int y, int p) 
    { 
        int res = 1;      
        x = x % p;  
        while (y > 0) 
        { 
            if((y & 1)==1) 
                res = (res * x) % p; 
            y = y >> 1;  
            x = (x * x) % p;  
        } 
        return res; 
    } 
    
    static class Custom implements Comparable<Custom>{
        int d;
        int f;
        public Custom(int d,int f){
            this.d=d;
            this.f=f;
        }
        public int compareTo(Custom t){
            return this.d-t.d;
        }
    }
    void solve() throws IOException {
       
        long n=nextLong();
        long m=nextLong();
        if(n>m||(m-n)%2==1){
            pw.println(-1);
        }
        else if(n==m){
            if(n==0){
                pw.println(0);
                return;
            }
            pw.println("1\n"+n);
        }
        else{
            long a=n;
            long b = (m-n)/2;
            long s=0;
            long p=1;
            while(a>0||b>0){
                // pw.println((a&1) +" "+ (b&1));
                if((a&1)==1 && (b&1)==1){
                    pw.println(3+"\n"+n+" "+((m-n)/2)+" "+((m-n)/2));
                    return;
                }
                if((a&1)==1 || (b&1)==1)
                s+=p;
                p*=2;
                a>>=1;
                b>>=1;
            }
            pw.println("2\n"+s+" "+((m-n)/2));
        }
    }
	String next() throws IOException {
        while (st == null || !st.hasMoreTokens()) {
            st = new StringTokenizer(br.readLine());
        }
        return st.nextToken();
    }
    String nextLine()throws IOException{
        return br.readLine();
    }
    int nextInt() throws IOException {
        return Integer.parseInt(next());
    }
    long nextLong() throws IOException {
        return Long.parseLong(next());
    }
 
    StringTokenizer st;
    BufferedReader br;
    PrintWriter pw;
    Scanner sc;
    void run() throws IOException {
        sc=new Scanner(new BufferedReader(new InputStreamReader(System.in)));
        br = new BufferedReader(new InputStreamReader(System.in));
        pw = new PrintWriter(System.out);
        long time = System.currentTimeMillis();
        solve();
        System.err.println("time = " + (System.currentTimeMillis() - time));
        pw.close();
    }
 
    public static void main(String[] args) throws IOException {
        new D1325().run();
    }
 
}