#include <bits/stdc++.h>
using namespace std;
int64_t s, x, mask20 = (1 << 20) - 1, waysCarry = 0, waysNoCarry = 0, total = 0;
int main() {
  cin >> s >> x;
  int first20s = s & mask20, first20x = x & mask20;
  for (int i = 0; i < (1 << 20); i++) {
    int t = first20x ^ i;
    if (i + t == first20s)
      waysNoCarry++;
    else if (((i + t) & mask20) == first20s)
      waysCarry++;
  }
  int last20s = (s >> 20), last20x = (x >> 20);
  for (int i = 0; i < (1 << 22); i++) {
    int t = last20x ^ i;
    if (t + i == last20s)
      total += waysNoCarry;
    else if (t + i == last20s - 1)
      total += waysCarry;
  }
  if (x == s) total -= 2;
  cout << total << "\n";
  return 0;
}

### Prompt

Construct a cpp code solution to the problem outlined:

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;
int64_t s, x, mask20 = (1 << 20) - 1, waysCarry = 0, waysNoCarry = 0, total = 0;
int main() {
  cin >> s >> x;
  int first20s = s & mask20, first20x = x & mask20;
  for (int i = 0; i < (1 << 20); i++) {
    int t = first20x ^ i;
    if (i + t == first20s)
      waysNoCarry++;
    else if (((i + t) & mask20) == first20s)
      waysCarry++;
  }
  int last20s = (s >> 20), last20x = (x >> 20);
  for (int i = 0; i < (1 << 22); i++) {
    int t = last20x ^ i;
    if (t + i == last20s)
      total += waysNoCarry;
    else if (t + i == last20s - 1)
      total += waysCarry;
  }
  if (x == s) total -= 2;
  cout << total << "\n";
  return 0;
}

```