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 CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
long long int binary_exp(long long int a, long long int n) {
  long long int i = 1;
  while (n > 0) {
    if (n % 2 == 1) i = (i * a) % 998244353;
    a = (a * a) % 998244353;
    n /= 2;
  }
  return i;
}
long long int IsPrime(long long int n) {
  if (n == 0 || n == 1) return n;
  if (n % 2 == 0) return (long long int)2;
  if (n % 3 == 0)
    return (long long int)3;
  else {
    for (long long int i = 5; i * i <= n; i += 6) {
      if (n % i == 0) return i;
      if (n % (i + 2) == 0) return (i + 2);
    }
    return n;
  }
}
int main() {
  ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  srand(time(NULL));
  ;
  long long int n, m, i, j, k, a, b, u, v, bit1[61], bit2[61];
  cin >> u >> v;
  if (u > v) {
    cout << -1;
    return 0;
  }
  memset(bit1, 0, sizeof(bit1));
  memset(bit2, 0, sizeof(bit2));
  n = v - u;
  i = 0;
  while (n > 0) {
    bit2[i] = n % 2;
    n /= 2;
    i++;
  }
  i = 0;
  while (u > 0) {
    bit1[i] = u % 2;
    u /= 2;
    i++;
  }
  for (i = 60; i > 0; i--) {
    if (bit2[i] % 2 == 1) {
      bit2[i]--;
      bit2[i - 1] += 2;
    }
  }
  for (i = 60; i >= 0; i--) {
    if (bit2[i] % 2 == 1) {
      cout << -1;
      return 0;
    }
    bit2[i] += bit1[i];
  }
  vector<long long int> ans;
  while (1) {
    a = 0;
    b = 1;
    for (i = 0; i < 60; i++) {
      if (bit2[i] > 0) {
        bit2[i]--;
        a = a | b;
      }
      b = b << 1;
    }
    if (a == 0)
      break;
    else
      ans.push_back(a);
  }
  cout << ans.size() << "\n";
  for (i = 0; i < ans.size(); ++i) {
    cout << ans[i] << " ";
  };
  cout << "\n";
}