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.OutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.StringTokenizer;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.InputStream;

/**
 * Built using CHelper plug-in
 * Actual solution is at the top
 */
public class Main {
    public static void main(String[] args) {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        Scanner in = new Scanner(inputStream);
        PrintWriter out = new PrintWriter(outputStream);
        DEhabTheXorcist solver = new DEhabTheXorcist();
        solver.solve(1, in, out);
        out.close();
    }

    static class DEhabTheXorcist {
        long xor;
        long sum;

        public void readInput(Scanner sc) {
            xor = sc.nextLong();
            sum = sc.nextLong();
        }

        public void solve(int testNumber, Scanner sc, PrintWriter pw) {
            int q = 1;
            while (q-- > 0) {
                readInput(sc);
                //sum = xor +2*AND(a,b)
                if (sum < xor || (sum - xor) % 2 == 1) {
                    pw.println(-1);
                    return;
                }
                if (xor == 0) {
                    if (sum == 0)
                        pw.println(0);
                    else {
                        pw.println(2);
                        pw.println(sum / 2 + " " + sum / 2);
                    }
                    return;
                }
                if (xor == sum) {
                    pw.println(1);
                    pw.println(sum);
                    return;
                }
                long and = (sum - xor) / 2;
                long a = 0, b = 0;
                for (int i = 0; i < 64; i++) {
                    if ((and & 1l << i) != 0) {
                        a |= 1l << i;
                        b |= 1l << i;
                    } else if ((xor & 1l << i) != 0) {
                        a |= 1l << i;
                    }
                }
                if (a + b != sum) {
                    pw.println(3);
                    pw.println(a + " " + b + " " + (sum - a - b));
                } else {
                    pw.println(2);
                    pw.println(a + " " + b);
                }
            }
        }

    }

    static class Scanner {
        StringTokenizer st;
        BufferedReader br;

        public Scanner(InputStream s) {
            br = new BufferedReader(new InputStreamReader(s));
        }

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

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

    }
}