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

public class Coder {
  static long s,x;
  static StringBuffer str=new StringBuffer();

  // static long pow(long a, long b){
  //   long res=1;
  //   while(b>0){
  //     if(b%2==1){
  //       res = (res * a)%m;
  //       b--;
  //     }else{
  //       a = (a*a)%m;
  //       b=b>>1;
  //     }
  //   }
  //   return res;
  // }
  // static void extendedGcd(long a, long b, long ar[]){
  //   if(b==0){
  //     ar[0]=1;
  //     ar[1]=0;
  //     ar[2]=a;
  //     return;
  //   }
  //   extendedGcd(b, a%b, ar);
  //   long temp=ar[1];
  //   ar[1]=(ar[0]- ar[1]*(a/b));
  //   ar[0]=temp;
  //   return;
  // }
  // // non prime b;
  // static long invmod(long a, long b){
  //   long ar[]=new long[3];
  //   extendedGcd(a, b, ar);
  //   return ar[0];
  // }
  // static long combination(int a, int b){
  //   long val1=fact[a];
  //   long val2=ifact[a-b];
  //   long val3=ifact[b];
  //   return (((val1 * val2)%m) * val3)%m;
  // }

  static void solve(){
    if(s==x && s==0){
      str.append(0);return;
    }
    if(s==x){
      str.append(1).append("\n").append(s);
      return;
    }
    if(s<x || (x%2!=s%2)){
      str.append(-1);return;
    }
    boolean flag=true;
    // a+b = (a^b) + ((a&b)<<1)
    long a = (s-x)>>1;
    long n1=0, n2=0;
    for(int i=60;i>=0;i--){
      long xi=(x&(1l<<i));
      long ai=(a&(1l<<i));
      if(xi>0 && ai>0){
        flag=false;
        break;
      }

      if(xi>0){
        n1|=(1l<<i);
      }

      if(ai>0){
        n1|=(1l<<i);
        n2|=(1l<<i);
      }
    }
    
    if(flag){ str.append(2).append("\n").append(n1).append(" ").append(n2);return;}
    if((s-x)%2 == 0){
        long x1=(s-x)/2;
        str.append(3).append("\n").append(x).append(" ").append(x1).append(" ").append(x1);
        return;
    }
    str.append(-1);return;
  }

  public static void main(String[] args) throws java.lang.Exception {
      BufferedReader bf;
      PrintWriter pw;
      boolean lenv=false;
      if(lenv){
        bf = new BufferedReader(
                            new FileReader("input.txt"));
        pw=new PrintWriter(new
              BufferedWriter(new FileWriter("output.txt")));
      }else{
        bf = new BufferedReader(new InputStreamReader(System.in));
        pw = new PrintWriter(new OutputStreamWriter(System.out));
      }
    // int q = Integer.parseInt(bf.readLine().trim());
    // while (q-- > 0) {
      String st[]=bf.readLine().trim().split("\\s+");
      x=Long.parseLong(st[0]);
      s=Long.parseLong(st[1]);
      solve();
    // }
    pw.print(str);
    pw.flush();
    // System.out.print(str);
  }
}