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;
const long long MAXN = 1e5 + 5;
long long sa[105], sb[105];
long long sum[105];
long long ans[MAXN];
int main() {
  long long a, b;
  while (cin >> a >> b) {
    long long q1 = a, q2 = b;
    memset(sum, 0, sizeof(sum));
    memset(sa, 0, sizeof(sa));
    memset(sb, 0, sizeof(sb));
    memset(ans, 0, sizeof(ans));
    if ((a % 2) != (b % 2) || a > b) {
      cout << -1 << endl;
      continue;
    }
    long long t1 = 0, t2 = 0;
    while (a) {
      sa[++t1] = (a & 1);
      a /= 2;
    }
    while (b) {
      sb[++t2] = (b & 1);
      b /= 2;
    }
    long long tt = max(t1, t2);
    long long Max = 0;
    if (sa[1] == 1) sum[1] = 1;
    for (long long i = 2; i <= 62; i++) {
      if (sa[i] && sb[i]) {
        sum[i]++;
      }
      if (sa[i] && !sb[i]) {
        sum[i]++;
        sum[i - 1] += 2;
        long long idx = -1;
        for (long long j = i + 1; j <= 62; j++) {
          if (sb[j]) {
            idx = j;
            break;
          }
        }
        if (idx != -1) {
          for (long long j = i + 1; j < idx; j++) {
            sb[j] = 1;
          }
          sb[idx] = 0;
        }
      }
      if (!sa[i] && sb[i]) {
        sum[i - 1] += 2;
      }
      if (!sa[i] && !sb[i]) {
        continue;
      }
    }
    for (long long i = 1; i <= 62; i++) {
      Max = max(Max, sum[i]);
    }
    for (long long i = 1; i <= 62; i++) {
      for (long long j = 1; j <= sum[i]; j++) {
        ans[j] += (1ll << (i - 1));
      }
    }
    bool f = 0;
    long long s1 = 0, s2 = 0;
    cout << Max << endl;
    for (long long i = 1; i <= Max; i++) {
      cout << ans[i] << " ";
    }
    cout << endl;
  }
}