#include <bits/stdc++.h>
using namespace std;
int i;
long long j, z, l, r, n, k, e, d, c, q, a, b, f;
vector<long long> a1, b1;
long long dp[100][2][2];
int main() {
  scanf("%I64d%I64d", &a, &b);
  c = a;
  while (c > 0) {
    a1.push_back(c % 2);
    c /= 2;
  }
  c = b;
  while (c > 0) {
    b1.push_back(c % 2);
    c /= 2;
  }
  if (b1.size() > a1.size()) {
    printf("0");
    return 0;
  }
  if (b1.size() == 0) b1.push_back(0);
  if (b1[0] == 0) {
    if (a1[0] == 0) {
      dp[0][0][0] = 1;
      dp[0][1][1] = 1;
    }
  } else {
    if (a1[0] == 1) {
      dp[0][0][0] = 1;
      dp[0][1][0] = 1;
    }
  }
  for (i = 1; i < a1.size(); i++) {
    if (i == b1.size()) b1.push_back(0);
    if (b1[i] == 0) {
      if (a1[i] == 0) {
        dp[i][0][0] = dp[i - 1][1][0] + dp[i - 1][0][0];
        dp[i][1][1] = dp[i - 1][1][0] + dp[i - 1][0][0];
      } else {
        dp[i][0][0] = dp[i - 1][0][1] + dp[i - 1][1][1];
        dp[i][1][1] = dp[i - 1][0][1] + dp[i - 1][1][1];
      }
    } else {
      if (a1[i] == 0) {
        dp[i][1][1] = dp[i - 1][0][1] + dp[i - 1][1][1];
        dp[i][0][1] = dp[i - 1][0][1] + dp[i - 1][1][1];
      } else {
        dp[i][1][0] = dp[i - 1][0][0] + dp[i - 1][1][0];
        dp[i][0][0] = dp[i - 1][0][0] + dp[i - 1][1][0];
      }
    }
  }
  long long ans = 0;
  if (b1[a1.size() - 1] == 1) {
    ans = dp[a1.size() - 1][0][0] + dp[a1.size() - 1][1][0];
  } else {
    if (a1.size() - 2 >= 0)
      ans = dp[a1.size() - 2][0][1] + dp[a1.size() - 2][1][1];
  }
  if (a == b) ans -= 2;
  printf("%I64d", ans);
  return 0;
}

### Prompt

Please create a solution in CPP to 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;
int i;
long long j, z, l, r, n, k, e, d, c, q, a, b, f;
vector<long long> a1, b1;
long long dp[100][2][2];
int main() {
  scanf("%I64d%I64d", &a, &b);
  c = a;
  while (c > 0) {
    a1.push_back(c % 2);
    c /= 2;
  }
  c = b;
  while (c > 0) {
    b1.push_back(c % 2);
    c /= 2;
  }
  if (b1.size() > a1.size()) {
    printf("0");
    return 0;
  }
  if (b1.size() == 0) b1.push_back(0);
  if (b1[0] == 0) {
    if (a1[0] == 0) {
      dp[0][0][0] = 1;
      dp[0][1][1] = 1;
    }
  } else {
    if (a1[0] == 1) {
      dp[0][0][0] = 1;
      dp[0][1][0] = 1;
    }
  }
  for (i = 1; i < a1.size(); i++) {
    if (i == b1.size()) b1.push_back(0);
    if (b1[i] == 0) {
      if (a1[i] == 0) {
        dp[i][0][0] = dp[i - 1][1][0] + dp[i - 1][0][0];
        dp[i][1][1] = dp[i - 1][1][0] + dp[i - 1][0][0];
      } else {
        dp[i][0][0] = dp[i - 1][0][1] + dp[i - 1][1][1];
        dp[i][1][1] = dp[i - 1][0][1] + dp[i - 1][1][1];
      }
    } else {
      if (a1[i] == 0) {
        dp[i][1][1] = dp[i - 1][0][1] + dp[i - 1][1][1];
        dp[i][0][1] = dp[i - 1][0][1] + dp[i - 1][1][1];
      } else {
        dp[i][1][0] = dp[i - 1][0][0] + dp[i - 1][1][0];
        dp[i][0][0] = dp[i - 1][0][0] + dp[i - 1][1][0];
      }
    }
  }
  long long ans = 0;
  if (b1[a1.size() - 1] == 1) {
    ans = dp[a1.size() - 1][0][0] + dp[a1.size() - 1][1][0];
  } else {
    if (a1.size() - 2 >= 0)
      ans = dp[a1.size() - 2][0][1] + dp[a1.size() - 2][1][1];
  }
  if (a == b) ans -= 2;
  printf("%I64d", ans);
  return 0;
}

```