#include <bits/stdc++.h>
using namespace std;
long long a, b, f[2000][2];
string d1, d2;
long long fu(long long cs, long long sd) {
  if (f[cs][sd] != -1) return f[cs][sd];
  if (cs == d1.length()) {
    if (sd)
      return 0;
    else
      return 1;
  }
  long long co = 0;
  long long a = 0, b = (d2[cs] - '0') ^ a;
  long long tmp = a + b + sd;
  if (tmp % 2 == (d1[cs] - '0')) co += fu(cs + 1, tmp / 2);
  a = 1, b = (d2[cs] - '0') ^ a;
  tmp = a + b + sd;
  if (tmp % 2 == (d1[cs] - '0')) co += fu(cs + 1, tmp / 2);
  return f[cs][sd] = co;
}
int main() {
  cin >> a >> b;
  long long yo1 = a, yo2 = b;
  while (a) d1 += '0' + (a % 2), a /= 2;
  while (b) d2 += '0' + (b % 2), b /= 2;
  if (yo2 > yo1) {
    cout << 0;
    return 0;
  }
  memset(f, -1, sizeof(f));
  while (d2.length() < d1.length()) d2 += '0';
  long long ru;
  yo1 ^= 0;
  if (yo1 == yo2)
    ru = -2;
  else
    ru = 0;
  ru += fu(0, 0);
  cout << ru;
}

### Prompt

Develop a solution in Cpp to the problem described below:

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 a, b, f[2000][2];
string d1, d2;
long long fu(long long cs, long long sd) {
  if (f[cs][sd] != -1) return f[cs][sd];
  if (cs == d1.length()) {
    if (sd)
      return 0;
    else
      return 1;
  }
  long long co = 0;
  long long a = 0, b = (d2[cs] - '0') ^ a;
  long long tmp = a + b + sd;
  if (tmp % 2 == (d1[cs] - '0')) co += fu(cs + 1, tmp / 2);
  a = 1, b = (d2[cs] - '0') ^ a;
  tmp = a + b + sd;
  if (tmp % 2 == (d1[cs] - '0')) co += fu(cs + 1, tmp / 2);
  return f[cs][sd] = co;
}
int main() {
  cin >> a >> b;
  long long yo1 = a, yo2 = b;
  while (a) d1 += '0' + (a % 2), a /= 2;
  while (b) d2 += '0' + (b % 2), b /= 2;
  if (yo2 > yo1) {
    cout << 0;
    return 0;
  }
  memset(f, -1, sizeof(f));
  while (d2.length() < d1.length()) d2 += '0';
  long long ru;
  yo1 ^= 0;
  if (yo1 == yo2)
    ru = -2;
  else
    ru = 0;
  ru += fu(0, 0);
  cout << ru;
}

```