#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:256000000")
using namespace std;
mt19937 ggen;
long long ds, dx;
int s[50];
int x[50];
long long f[50][2][4];
long long dyn(int pos, int ost, int was) {
  if (pos == 50) {
    return !ost && (was == 3);
  }
  if (f[pos][ost][was] != -1) return f[pos][ost][was];
  long long res = 0;
  if (ost == (s[pos] != x[pos])) {
    for (int i = 0; i < 2; i++) {
      for (int j = 0; j < 2; j++) {
        if ((i ^ j) == x[pos] && (i ^ j ^ ost) == s[pos]) {
          int nwas = was;
          if (i != 0) nwas |= 1;
          if (j != 0) nwas |= 2;
          long long tres = dyn(pos + 1, (i + j + ost) >= 2, nwas);
          res += tres;
        }
      }
    }
  }
  return f[pos][ost][was] = res;
}
void solve() {
  cin >> ds >> dx;
  for (int i = 0; i < 50; i++) s[i] = (ds >> i) & 1;
  for (int i = 0; i < 50; i++) x[i] = (dx >> i) & 1;
  memset(f, -1, sizeof f);
  cout << dyn(0, 0, 0);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  srand(1313);
  ggen = mt19937(13);
  solve();
  return 0;
}

### Prompt

Develop a solution in cpp to the problem described below:

Two positive integers a and b have a sum of s and a bitwise XOR of x. How many possible values are there for the ordered pair (a, b)?

Input

The first line of the input contains two integers s and x (2 ≤ s ≤ 1012, 0 ≤ x ≤ 1012), the sum and bitwise xor of the pair of positive integers, respectively.

Output

Print a single integer, the number of solutions to the given conditions. If no solutions exist, print 0.

Examples

Input

9 5


Output

4


Input

3 3


Output

2


Input

5 2


Output

0

Note

In the first sample, we have the following solutions: (2, 7), (3, 6), (6, 3), (7, 2).

In the second sample, the only solutions are (1, 2) and (2, 1).

### Response

```cpp
#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:256000000")
using namespace std;
mt19937 ggen;
long long ds, dx;
int s[50];
int x[50];
long long f[50][2][4];
long long dyn(int pos, int ost, int was) {
  if (pos == 50) {
    return !ost && (was == 3);
  }
  if (f[pos][ost][was] != -1) return f[pos][ost][was];
  long long res = 0;
  if (ost == (s[pos] != x[pos])) {
    for (int i = 0; i < 2; i++) {
      for (int j = 0; j < 2; j++) {
        if ((i ^ j) == x[pos] && (i ^ j ^ ost) == s[pos]) {
          int nwas = was;
          if (i != 0) nwas |= 1;
          if (j != 0) nwas |= 2;
          long long tres = dyn(pos + 1, (i + j + ost) >= 2, nwas);
          res += tres;
        }
      }
    }
  }
  return f[pos][ost][was] = res;
}
void solve() {
  cin >> ds >> dx;
  for (int i = 0; i < 50; i++) s[i] = (ds >> i) & 1;
  for (int i = 0; i < 50; i++) x[i] = (dx >> i) & 1;
  memset(f, -1, sizeof f);
  cout << dyn(0, 0, 0);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  srand(1313);
  ggen = mt19937(13);
  solve();
  return 0;
}

```