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:
/*
If you want to aim high, aim high
Don't let that studying and grades consume you
Just live life young
******************************
If I'm the sun, you're the moon
Because when I go up, you go down
*******************************
I'm working for the day I will surpass you
https://www.a2oj.com/Ladder16.html
*/
import java.util.*;
import java.io.*;
import java.math.*;

   public class D
   {
      public static void main(String omkar[]) throws Exception
      {
         BufferedReader infile = new BufferedReader(new InputStreamReader(System.in));  
         StringTokenizer st = new StringTokenizer(infile.readLine());
         long N = Long.parseLong(st.nextToken());
         long M = Long.parseLong(st.nextToken());
         if(N > M || N%2 != M%2) //verify
         {
            System.out.println(-1);
            return;
         }
         StringBuilder sb = new StringBuilder();
         long dif = M-N;
         int[] cnt = new int[70];
         for(int b=1; b < 64; b++)
            if((dif&(1L<<b))>0)
               cnt[b]++;
         for(int b=1; b < 64; b++)
            if(cnt[b]%2 == 1)
            {
               cnt[b-1]+=2;
               cnt[b]--;
            }
         long first = N;
         for(int b=0; b < 64; b++)
            if((first&(1L<<b))==0 && cnt[b] > 0)
            {
               first |= (1L<<b);
               cnt[b]--;
            }
         ArrayList<Long> ls = new ArrayList<Long>();
         ls.add(first);
         int sum = 0;
         for(int x: cnt)
            sum += x;
         while(sum > 0)
         {
            long val = 0L;
            int lol = 0;
            for(int b=0; b < 64; b++)
               if(cnt[b]>0)
               {
                  val |= (1L<<b);
                  cnt[b]--;
               }
            ls.add(val);
            for(int x: cnt)
               lol+=x;
            sum = lol;
         }
         if(N+M == 0)
            ls = new ArrayList<Long>();
         sb.append(ls.size()+"\n");
         for(long x: ls)
            sb.append(x+" ");
         System.out.println(sb);
      }
      public static boolean triv(long N, long M)
      {
         return false;
      }
   }