#include <bits/stdc++.h>
using namespace std;
long long f[66][2];
int main() {
  long long s, x;
  cin >> s >> x;
  vector<int> v1, v2;
  long long dec = 0LL;
  if (s == x) dec = -2LL;
  while (s > 0LL) {
    v1.push_back((int)(s % 2LL));
    s /= 2LL;
  }
  while (x > 0LL) {
    v2.push_back((int)(x % 2LL));
    x /= 2LL;
  }
  int len = 50;
  while ((int)v1.size() < len) v1.push_back(0);
  while ((int)v2.size() < len) v2.push_back(0);
  f[0][0] = 1LL;
  int val = 0, kek;
  for (int i = 0; i < len; i++) {
    for (int c1 = 0; c1 < 2; c1++) {
      for (int c2 = 0; c2 < 2; c2++) {
        if ((c1 ^ c2) != v2[i]) {
          continue;
        }
        for (int w = 0; w < 2; w++) {
          val = (w + c1 + c2) % 2;
          kek = (w + c1 + c2) / 2;
          if (val == v1[i]) {
            f[i + 1][kek] += f[i][w];
          }
        }
      }
    }
  }
  cout << f[len][0] + dec << endl;
  return 0;
}

### Prompt

Create a solution in cpp for the following problem:

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>
using namespace std;
long long f[66][2];
int main() {
  long long s, x;
  cin >> s >> x;
  vector<int> v1, v2;
  long long dec = 0LL;
  if (s == x) dec = -2LL;
  while (s > 0LL) {
    v1.push_back((int)(s % 2LL));
    s /= 2LL;
  }
  while (x > 0LL) {
    v2.push_back((int)(x % 2LL));
    x /= 2LL;
  }
  int len = 50;
  while ((int)v1.size() < len) v1.push_back(0);
  while ((int)v2.size() < len) v2.push_back(0);
  f[0][0] = 1LL;
  int val = 0, kek;
  for (int i = 0; i < len; i++) {
    for (int c1 = 0; c1 < 2; c1++) {
      for (int c2 = 0; c2 < 2; c2++) {
        if ((c1 ^ c2) != v2[i]) {
          continue;
        }
        for (int w = 0; w < 2; w++) {
          val = (w + c1 + c2) % 2;
          kek = (w + c1 + c2) / 2;
          if (val == v1[i]) {
            f[i + 1][kek] += f[i][w];
          }
        }
      }
    }
  }
  cout << f[len][0] + dec << endl;
  return 0;
}

```