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.*;
import java.util.*;
 
public class d {

	public static void main(String[] args)throws IOException {
        InputReader in = new InputReader(System.in);
        PrintWriter out = new PrintWriter(System.out);
        
		long u = in.nextLong();
		long v = in.nextLong();
		long ct[] = new long[61];
		Arrays.fill(ct,0);
		long val = (long)Math.pow(2,60);
		for(int i=60;i>=0;i--)
		{
			if(v>=val){
				// out.println("yo"+i);
				ct[i]++;
				v-=val;
			}
			val=val/(long)2;
		}
		val = (long)Math.pow(2,60);
		boolean ans=true;
		for(int i=60;i>=0;i--)
		{
			if(u>=val)
			{
				if(ct[i]%2==0)
				{
					if(ct[i]==0)
					{
						int fd=i;
						while(fd<=60){
							if(ct[fd]>=2)
								break;
							fd++;
						}
						if(fd<61)
						{
							for(int j=fd;j>i;j--)
							{
								ct[j]-=2;
								ct[j-1]+=4;
							}
						}
					}
					ct[i]--;
					if(ct[i]==-1 || (i-1)<0)
					{
						ans=false;
						break;
					}
					ct[i-1]+=2;
				}
				u-=val;
			}
			else
			{
				if(ct[i]%2!=0)
				{
					ct[i]--;
					if(ct[i]==-1 || (i-1)<0)
					{
						ans=false;
						break;
					}
					ct[i-1]+=2;
				}
			}
			val=val/(long)2;
		}
		if(ans)
		{
			long n = 0;
			for(int i=0;i<61;i++)
				n=Math.max(n,ct[i]);
			out.println(n);
			for(long i=0;i<n;i++)
			{
				val = 0;
				long pw = 1;
				for(int j=0;j<61;j++)
				{
					if(ct[j]>0)
					{
						ct[j]--;
						val+=pw;
					}
					pw*=2;
				}
				out.print(val+" ");
			}
			out.println();
		}
		else
			out.println(-1);
        out.close();
	}
    static class InputReader {
        public BufferedReader reader;
        public StringTokenizer tokenizer;

        public InputReader(InputStream stream) {
            reader = new BufferedReader(new InputStreamReader(stream), 32768);
            tokenizer = null;
        }

        public String next() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        }

        public int nextInt() {
            return Integer.parseInt(next());
        }

        public long nextLong() {
            return Long.parseLong(next());
        }

    }

}