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 \oplus x$ ($\oplus$ denotes the operation bitwise XOR).

An inversion in the $b$ array is a pair of integers $i$ and $j$ such that $1 \le i < j \le 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 \le n \le 3 \cdot 10^5$) — the number of elements in $a$.

Second line contains $n$ space-separated integers $a_1$, $a_2$, ..., $a_n$ ($0 \le a_i \le 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.

Difficulty: competition

Starter code:

Solutions:
n = int(input())
l = list(map(int, input().split()))

inv = 0
out = 0
mult = 1
for i in range(32):
    curr = dict()
    opp = 0
    same = 0

    for v in l:
        if v ^ 1 in curr:
            if v & 1:
                opp += curr[v ^ 1]
            else:
                same += curr[v ^ 1]
            
        if v not in curr:
            curr[v] = 0
        curr[v] += 1

    for i in range(n):
        l[i] >>= 1

    if same <= opp:
        inv += same
    else:
        inv += opp
        out += mult
    mult *= 2
print(inv, out)
    
    


import sys
readline = sys.stdin.readline
from collections import Counter

N = int(readline())
A = list(map(int, readline().split()))
B = 31

table = [0]*N

ans = 0
rev = 0
for b in range(B-1, -1, -1):
    one = Counter()
    zero = Counter()
    cnt = 0
    cntr = 0
    for i in range(N):
        a = (A[i]>>b)&1
        if a:
            one[table[i]] += 1
            cntr += zero[table[i]]
            table[i] += 1<<b
        else:
            zero[table[i]] += 1
            cnt += one[table[i]]
    
    if cntr < cnt:
        rev += cntr
        ans |= 1<<b
    else:
        rev += cnt

print(rev, ans)