#include <bits/stdc++.h>
long long a, b;
bool aa[66] = {};
bool bb[66] = {};
int top1 = -1, top2 = -1;
long long sum2[66][2] = {};
int main() {
  scanf("%I64d%I64d", &a, &b);
  if (a < b) {
    printf("0\n");
    return 0;
  }
  bool flag = 0;
  if (a == b) flag = 1;
  top1 = -1, top2 = -1;
  for (int i = 0; i < 66; i++) sum2[i][0] = sum2[i][1] = 0;
  while (a > 0) aa[++top1] = a & 1, a >>= 1;
  while (b > 0) bb[++top2] = b & 1, b >>= 1;
  if (aa[0] != bb[0]) {
    printf("0\n");
    return 0;
  }
  sum2[0][0] = 1;
  for (int i = 0; i <= top1; i++) {
    if (aa[i] == 1 && bb[i] == 0)
      sum2[i + 1][0] = sum2[i][1], sum2[i + 1][1] = sum2[i][1];
    else if (aa[i] == 0 && bb[i] == 1)
      sum2[i + 1][1] = sum2[i][1] * 2;
    else if (aa[i] == 1 && bb[i] == 1)
      sum2[i + 1][0] = sum2[i][0] * 2;
    else if (aa[i] == 0 && bb[i] == 0)
      sum2[i + 1][1] = sum2[i][0], sum2[i + 1][0] = sum2[i][0];
  }
  if (flag) sum2[top1 + 1][0] -= 2;
  printf("%I64d\n", sum2[top1 + 1][0]);
}

### Prompt

Generate a CPP solution 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>
long long a, b;
bool aa[66] = {};
bool bb[66] = {};
int top1 = -1, top2 = -1;
long long sum2[66][2] = {};
int main() {
  scanf("%I64d%I64d", &a, &b);
  if (a < b) {
    printf("0\n");
    return 0;
  }
  bool flag = 0;
  if (a == b) flag = 1;
  top1 = -1, top2 = -1;
  for (int i = 0; i < 66; i++) sum2[i][0] = sum2[i][1] = 0;
  while (a > 0) aa[++top1] = a & 1, a >>= 1;
  while (b > 0) bb[++top2] = b & 1, b >>= 1;
  if (aa[0] != bb[0]) {
    printf("0\n");
    return 0;
  }
  sum2[0][0] = 1;
  for (int i = 0; i <= top1; i++) {
    if (aa[i] == 1 && bb[i] == 0)
      sum2[i + 1][0] = sum2[i][1], sum2[i + 1][1] = sum2[i][1];
    else if (aa[i] == 0 && bb[i] == 1)
      sum2[i + 1][1] = sum2[i][1] * 2;
    else if (aa[i] == 1 && bb[i] == 1)
      sum2[i + 1][0] = sum2[i][0] * 2;
    else if (aa[i] == 0 && bb[i] == 0)
      sum2[i + 1][1] = sum2[i][0], sum2[i + 1][0] = sum2[i][0];
  }
  if (flag) sum2[top1 + 1][0] -= 2;
  printf("%I64d\n", sum2[top1 + 1][0]);
}

```