#include <bits/stdc++.h>
using namespace std;
long long dp[100][3];
vector<int> S, X;
void bits(long long num, vector<int> &v) {
  while (num) {
    v.push_back(num % 2);
    num /= 2;
  }
  while (v.size() < 64) v.push_back(0);
}
long long solve(int bit, int carry) {
  if (bit == 63) {
    if (carry) return 0;
    return 1;
  }
  if (dp[bit][carry] != -1) return dp[bit][carry];
  int nxt_carry, cur_sum;
  long long value = 0;
  for (int a = 0; a < int(2); a++) {
    for (int b = 0; b < int(2); b++) {
      if ((a ^ b) != X[bit]) continue;
      cur_sum = a + b + carry;
      nxt_carry = (cur_sum >= 2);
      cur_sum %= 2;
      if (cur_sum != S[bit]) continue;
      value += solve(bit + 1, nxt_carry);
    }
  }
  return dp[bit][carry] = value;
}
int main() {
  memset(dp, -1, sizeof(dp));
  long long sum, x;
  scanf("%I64d %I64d", &sum, &x);
  bits(sum, S);
  bits(x, X);
  long long ans = solve(0, 0);
  if (sum == x) ans -= 2;
  printf("%I64d\n", ans);
  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 dp[100][3];
vector<int> S, X;
void bits(long long num, vector<int> &v) {
  while (num) {
    v.push_back(num % 2);
    num /= 2;
  }
  while (v.size() < 64) v.push_back(0);
}
long long solve(int bit, int carry) {
  if (bit == 63) {
    if (carry) return 0;
    return 1;
  }
  if (dp[bit][carry] != -1) return dp[bit][carry];
  int nxt_carry, cur_sum;
  long long value = 0;
  for (int a = 0; a < int(2); a++) {
    for (int b = 0; b < int(2); b++) {
      if ((a ^ b) != X[bit]) continue;
      cur_sum = a + b + carry;
      nxt_carry = (cur_sum >= 2);
      cur_sum %= 2;
      if (cur_sum != S[bit]) continue;
      value += solve(bit + 1, nxt_carry);
    }
  }
  return dp[bit][carry] = value;
}
int main() {
  memset(dp, -1, sizeof(dp));
  long long sum, x;
  scanf("%I64d %I64d", &sum, &x);
  bits(sum, S);
  bits(x, X);
  long long ans = solve(0, 0);
  if (sum == x) ans -= 2;
  printf("%I64d\n", ans);
  return 0;
}

```