#include <bits/stdc++.h>
using namespace std;
long long S, X;
string sum, xr;
void pro() {
  while (S) {
    if (S & 1)
      sum.push_back('1');
    else
      sum.push_back('0');
    S >>= 1;
  }
  while (X) {
    if (X & 1)
      xr.push_back('1');
    else
      xr.push_back('0');
    X >>= 1;
  }
  if (xr.size() < sum.size()) {
    int dif = sum.size() - xr.size();
    for (int i = 0; i < dif; i++) xr.push_back('0');
  }
  reverse(sum.begin(), sum.end());
  reverse(xr.begin(), xr.end());
}
long long dfs(int si, int xi, int up) {
  long long ret = 0;
  if (si == 0) {
    if (xi > 0) return 0;
    if (xi == 0) {
      if (up) {
        if (xr[xi] == '1') return 0;
        if (xr[xi] == '0') return 1;
      } else {
        if (xr[xi] == '1') return 2;
        return 0;
      }
    } else {
      if (up) return 1;
      return 0;
    }
  }
  if (xr[xi] == '1') {
    if (up) {
      if (sum[si] != '0') return 0;
      ret += 2 * dfs(si - 1, xi - 1, 1);
    } else {
      if (sum[si] != '1') return 0;
      ret += 2 * dfs(si - 1, xi - 1, 0);
    }
  } else {
    if (up) {
      if (sum[si] == '1') {
        ret += dfs(si - 1, xi - 1, 0);
        ret += dfs(si - 1, xi - 1, 1);
      }
    } else {
      if (sum[si] == '0') {
        ret += dfs(si - 1, xi - 1, 0);
        ret += dfs(si - 1, xi - 1, 1);
      }
    }
  }
  return ret;
}
int main() {
  cin >> S >> X;
  pro();
  if (xr.empty()) xr.assign(sum.size(), '0');
  long long ans = dfs(sum.size() - 1, xr.size() - 1, 0);
  if (sum == xr) ans -= 2;
  cout << ans << endl;
}

### 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;
long long S, X;
string sum, xr;
void pro() {
  while (S) {
    if (S & 1)
      sum.push_back('1');
    else
      sum.push_back('0');
    S >>= 1;
  }
  while (X) {
    if (X & 1)
      xr.push_back('1');
    else
      xr.push_back('0');
    X >>= 1;
  }
  if (xr.size() < sum.size()) {
    int dif = sum.size() - xr.size();
    for (int i = 0; i < dif; i++) xr.push_back('0');
  }
  reverse(sum.begin(), sum.end());
  reverse(xr.begin(), xr.end());
}
long long dfs(int si, int xi, int up) {
  long long ret = 0;
  if (si == 0) {
    if (xi > 0) return 0;
    if (xi == 0) {
      if (up) {
        if (xr[xi] == '1') return 0;
        if (xr[xi] == '0') return 1;
      } else {
        if (xr[xi] == '1') return 2;
        return 0;
      }
    } else {
      if (up) return 1;
      return 0;
    }
  }
  if (xr[xi] == '1') {
    if (up) {
      if (sum[si] != '0') return 0;
      ret += 2 * dfs(si - 1, xi - 1, 1);
    } else {
      if (sum[si] != '1') return 0;
      ret += 2 * dfs(si - 1, xi - 1, 0);
    }
  } else {
    if (up) {
      if (sum[si] == '1') {
        ret += dfs(si - 1, xi - 1, 0);
        ret += dfs(si - 1, xi - 1, 1);
      }
    } else {
      if (sum[si] == '0') {
        ret += dfs(si - 1, xi - 1, 0);
        ret += dfs(si - 1, xi - 1, 1);
      }
    }
  }
  return ret;
}
int main() {
  cin >> S >> X;
  pro();
  if (xr.empty()) xr.assign(sum.size(), '0');
  long long ans = dfs(sum.size() - 1, xr.size() - 1, 0);
  if (sum == xr) ans -= 2;
  cout << ans << endl;
}

```