#include <bits/stdc++.h>
using namespace std;
long long m_ncr[1001][1001];
long long ncr(long long i, long long j) {
  if (j == 1) return i;
  if (i == j) return 1;
  if (m_ncr[i][j] != -1) return m_ncr[i][j];
  return m_ncr[i][j] = ncr(i - 1, j) + ncr(i - 1, j - 1);
}
long long getans(long long x) {
  long long ret = 0, i;
  for (i = x - 1; i >= 1; i--) {
    ret += ncr(x, i);
  }
  return ret;
}
int main() {
  ios_base::sync_with_stdio(0);
  long long int i, j, x, n, cnt = 0, m, y, nb, dif, st, en;
  st = en = 0;
  vector<long long> v;
  cin >> n >> m;
  memset(m_ncr, -1, sizeof(m_ncr));
  if (m > n) {
    cout << cnt;
    return 0;
  }
  if (n == m) {
    nb = __builtin_popcountll(m);
    cout << getans(nb);
    return 0;
  }
  dif = n - m;
  if (dif % 2) {
    cout << cnt;
    return 0;
  }
  dif /= 2;
  for (i = 62; i >= 0; i--) {
    x = 1;
    x = x << i;
    if (n & x && !st) {
      st = i + 1;
    }
    if (m & x && !en) {
      en = i + 1;
    }
    if (st && !en) {
      v.push_back(i + 1);
    }
    if (st && en) break;
  }
  for (i = 0; i <= en - 1; i++) {
    x = 1;
    x = x << i;
    if (!(m & x)) v.push_back(i + 1);
  }
  sort(v.begin(), v.end());
  reverse(v.begin(), v.end());
  if (!v.size()) {
    cout << cnt;
    return 0;
  }
  for (i = 0; i <= v.size() - 1; i++) {
    x = 1;
    x = x << (v[i] - 1);
    if (dif >= x) dif -= x;
  }
  if (m == 0 && !dif) {
    cout << cnt + 1;
    return 0;
  }
  if (!dif)
    cout << getans(__builtin_popcountll(m)) + 2;
  else
    cout << cnt;
}

### Prompt

Your task is to create 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>
using namespace std;
long long m_ncr[1001][1001];
long long ncr(long long i, long long j) {
  if (j == 1) return i;
  if (i == j) return 1;
  if (m_ncr[i][j] != -1) return m_ncr[i][j];
  return m_ncr[i][j] = ncr(i - 1, j) + ncr(i - 1, j - 1);
}
long long getans(long long x) {
  long long ret = 0, i;
  for (i = x - 1; i >= 1; i--) {
    ret += ncr(x, i);
  }
  return ret;
}
int main() {
  ios_base::sync_with_stdio(0);
  long long int i, j, x, n, cnt = 0, m, y, nb, dif, st, en;
  st = en = 0;
  vector<long long> v;
  cin >> n >> m;
  memset(m_ncr, -1, sizeof(m_ncr));
  if (m > n) {
    cout << cnt;
    return 0;
  }
  if (n == m) {
    nb = __builtin_popcountll(m);
    cout << getans(nb);
    return 0;
  }
  dif = n - m;
  if (dif % 2) {
    cout << cnt;
    return 0;
  }
  dif /= 2;
  for (i = 62; i >= 0; i--) {
    x = 1;
    x = x << i;
    if (n & x && !st) {
      st = i + 1;
    }
    if (m & x && !en) {
      en = i + 1;
    }
    if (st && !en) {
      v.push_back(i + 1);
    }
    if (st && en) break;
  }
  for (i = 0; i <= en - 1; i++) {
    x = 1;
    x = x << i;
    if (!(m & x)) v.push_back(i + 1);
  }
  sort(v.begin(), v.end());
  reverse(v.begin(), v.end());
  if (!v.size()) {
    cout << cnt;
    return 0;
  }
  for (i = 0; i <= v.size() - 1; i++) {
    x = 1;
    x = x << (v[i] - 1);
    if (dif >= x) dif -= x;
  }
  if (m == 0 && !dif) {
    cout << cnt + 1;
    return 0;
  }
  if (!dif)
    cout << getans(__builtin_popcountll(m)) + 2;
  else
    cout << cnt;
}

```