#include <bits/stdc++.h>
using namespace std;
const long long INF = 9223372036854775807;
const long long MOD = 1000000007;
const long double PI = acos(-1);
long long power(long long a, long long b, long long z = MOD) {
  long long res = 1;
  a = (a % z);
  while (b) {
    if (b & 1) res = (res * a) % z;
    a = (a * a) % z;
    b = b >> 1;
  }
  return res;
}
long long inverse(long long a, long long z = MOD) { return power(a, z - 2, z); }
long long extend(long long a, long long b, long long &x, long long &y) {
  if (b == 0) {
    x = 1;
    y = 0;
    return a;
  }
  long long x1, y1;
  long long g = extend(b, a % b, x1, y1);
  x = y1;
  y = x1 - (a / b) * y1;
  return g;
}
long long mat_power(long long a, long long b, long long c, long long d,
                    long long n, long long z = MOD) {
  long long a0 = 1, b0 = 0, c0 = 0, d0 = 1;
  while (n) {
    if (n & 1) {
      long long a1 = a0, b1 = b0, c1 = c0, d1 = d0;
      a0 = (a1 * a + b1 * c) % z;
      b0 = (a1 * b + b1 * d) % z;
      c0 = (c1 * a + d1 * c) % z;
      d0 = (c1 * b + d1 * d) % z;
    }
    long long a1 = a, b1 = b, c1 = c, d1 = d;
    a = (a1 * a1 + b1 * c1) % z;
    b = (a1 * b1 + b1 * d1) % z;
    c = (c1 * a1 + d1 * c1) % z;
    d = (c1 * b1 + d1 * d1) % z;
    n = n >> 1;
  }
  return c0;
}
long long aray[300000];
long long bits[31];
long long yes[31] = {0}, no[31] = {0};
void recur(long long l, long long r, long long index) {
  if (index == -1) return;
  if (l == r) return;
  long long val = 0, final = 0;
  for (long long j = l; j <= r; j++) {
    if (bits[index] & aray[j])
      val++;
    else
      final += val;
  }
  no[index] += final;
  final = 0;
  val = 0;
  for (long long j = l; j <= r; j++) {
    if ((bits[index] & aray[j]) == 0)
      val++;
    else
      final += val;
  }
  yes[index] += final;
  vector<long long> hai, nahi;
  for (long long i = l; i <= r; i++) {
    if (bits[index] & aray[i])
      hai.push_back(aray[i]);
    else
      nahi.push_back(aray[i]);
  }
  long long curr = l;
  for (auto x : hai) aray[curr++] = x;
  long long mid = curr;
  for (auto x : nahi) aray[curr++] = x;
  if (mid == l || mid == r + 1)
    recur(l, r, index - 1);
  else {
    recur(l, mid - 1, index - 1);
    recur(mid, r, index - 1);
  }
  return;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  long long n;
  cin >> n;
  bits[0] = 1;
  for (long long i = 1; i < 31; i++) bits[i] = bits[i - 1] << 1;
  for (long long i = 0; i < n; i++) cin >> aray[i];
  recur(0, n - 1, 30);
  long long final = 0, ans = 0;
  for (long long j = 0; j < 31; j++) {
    if (yes[j] < no[j]) ans += bits[j];
    final += min(yes[j], no[j]);
  }
  cout << final << " " << ans << "\n";
  return 0;
}

### Prompt

Please formulate a Cpp solution to the following problem:

You are given an array a consisting of n non-negative integers. You have to choose a non-negative integer x and form a new array b of size n according to the following rule: for all i from 1 to n, b_i = a_i ⊕ x (⊕ denotes the operation [bitwise XOR](https://en.wikipedia.org/wiki/Bitwise_operation#XOR)).

An inversion in the b array is a pair of integers i and j such that 1 ≤ i < j ≤ n and b_i > b_j.

You should choose x in such a way that the number of inversions in b is minimized. If there are several options for x — output the smallest one.

Input

First line contains a single integer n (1 ≤ n ≤ 3 ⋅ 10^5) — the number of elements in a.

Second line contains n space-separated integers a_1, a_2, ..., a_n (0 ≤ a_i ≤ 10^9), where a_i is the i-th element of a.

Output

Output two integers: the minimum possible number of inversions in b, and the minimum possible value of x, which achieves those number of inversions.

Examples

Input


4
0 1 3 2


Output


1 0


Input


9
10 7 9 10 7 5 5 3 5


Output


4 14


Input


3
8 10 3


Output


0 8

Note

In the first sample it is optimal to leave the array as it is by choosing x = 0.

In the second sample the selection of x = 14 results in b: [4, 9, 7, 4, 9, 11, 11, 13, 11]. It has 4 inversions:

  * i = 2, j = 3; 
  * i = 2, j = 4; 
  * i = 3, j = 4; 
  * i = 8, j = 9. 



In the third sample the selection of x = 8 results in b: [0, 2, 11]. It has no inversions.

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
const long long INF = 9223372036854775807;
const long long MOD = 1000000007;
const long double PI = acos(-1);
long long power(long long a, long long b, long long z = MOD) {
  long long res = 1;
  a = (a % z);
  while (b) {
    if (b & 1) res = (res * a) % z;
    a = (a * a) % z;
    b = b >> 1;
  }
  return res;
}
long long inverse(long long a, long long z = MOD) { return power(a, z - 2, z); }
long long extend(long long a, long long b, long long &x, long long &y) {
  if (b == 0) {
    x = 1;
    y = 0;
    return a;
  }
  long long x1, y1;
  long long g = extend(b, a % b, x1, y1);
  x = y1;
  y = x1 - (a / b) * y1;
  return g;
}
long long mat_power(long long a, long long b, long long c, long long d,
                    long long n, long long z = MOD) {
  long long a0 = 1, b0 = 0, c0 = 0, d0 = 1;
  while (n) {
    if (n & 1) {
      long long a1 = a0, b1 = b0, c1 = c0, d1 = d0;
      a0 = (a1 * a + b1 * c) % z;
      b0 = (a1 * b + b1 * d) % z;
      c0 = (c1 * a + d1 * c) % z;
      d0 = (c1 * b + d1 * d) % z;
    }
    long long a1 = a, b1 = b, c1 = c, d1 = d;
    a = (a1 * a1 + b1 * c1) % z;
    b = (a1 * b1 + b1 * d1) % z;
    c = (c1 * a1 + d1 * c1) % z;
    d = (c1 * b1 + d1 * d1) % z;
    n = n >> 1;
  }
  return c0;
}
long long aray[300000];
long long bits[31];
long long yes[31] = {0}, no[31] = {0};
void recur(long long l, long long r, long long index) {
  if (index == -1) return;
  if (l == r) return;
  long long val = 0, final = 0;
  for (long long j = l; j <= r; j++) {
    if (bits[index] & aray[j])
      val++;
    else
      final += val;
  }
  no[index] += final;
  final = 0;
  val = 0;
  for (long long j = l; j <= r; j++) {
    if ((bits[index] & aray[j]) == 0)
      val++;
    else
      final += val;
  }
  yes[index] += final;
  vector<long long> hai, nahi;
  for (long long i = l; i <= r; i++) {
    if (bits[index] & aray[i])
      hai.push_back(aray[i]);
    else
      nahi.push_back(aray[i]);
  }
  long long curr = l;
  for (auto x : hai) aray[curr++] = x;
  long long mid = curr;
  for (auto x : nahi) aray[curr++] = x;
  if (mid == l || mid == r + 1)
    recur(l, r, index - 1);
  else {
    recur(l, mid - 1, index - 1);
    recur(mid, r, index - 1);
  }
  return;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  long long n;
  cin >> n;
  bits[0] = 1;
  for (long long i = 1; i < 31; i++) bits[i] = bits[i - 1] << 1;
  for (long long i = 0; i < n; i++) cin >> aray[i];
  recur(0, n - 1, 30);
  long long final = 0, ans = 0;
  for (long long j = 0; j < 31; j++) {
    if (yes[j] < no[j]) ans += bits[j];
    final += min(yes[j], no[j]);
  }
  cout << final << " " << ans << "\n";
  return 0;
}

```