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.*;

public class EhabtheXorcist {
	// https://codeforces.com/contest/1325/problem/D
	
	public static void main(String[] args) throws IOException, FileNotFoundException {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		//BufferedReader in = new BufferedReader(new FileReader("EhabtheXorcist.in"));
		// INPUT //

		StringTokenizer st = new StringTokenizer(in.readLine());
		long u = Long.parseLong(st.nextToken());  
		long v = Long.parseLong(st.nextToken());  
		
		// u is the xor, v is the add
		if (u > v) System.out.println(-1);
		else if (u == v) {
			if (u != 0) System.out.println(1);
			System.out.println(u);
		}
		else if (u % 2 != v % 2) System.out.println(-1);
		else {
			// u < v
			
			ArrayList<Long> works = new ArrayList<>();
			works.add(u);
			
			v = v-u;
			while (v > 0) {
				long largest = (long) Math.pow(2, log(v));
				works.add((largest/2));
				works.add((largest/2));
				v -= largest;
			}
			
			ArrayList<Long> better = new ArrayList<>();
			for (int i = 0; i < works.size(); i++) {
				boolean needed = true;
				long cur = works.get(i);
				for (int j = i+1; j< works.size(); j++) {
					if ((cur^works.get(j)) > cur) {
						// better.add((works.get(i)^works.get(j)));
						cur = cur^works.get(j);
						// j is used
						works.remove(j);
						j--;
						needed = false;
					}
				}
				if (needed) better.add(works.get(i));
				else better.add(cur);

			}
			
			System.out.println(better.size());
			for (int i = 0; i < better.size(); i++) {
				System.out.print(better.get(i) + " ");
			}
		}
	}
	
	public static long log(long n) {
		long x = 1;
		//long count = 2;
		while ((1l<<(x+1)) <= n) {
			x++;
		//	count *= 2;
		}
		return x;
	}

}