#include<bits/stdc++.h>
#define scin(x)                 sc("%d",&(x))
#define scln(x)                 sc("%lld",&(x))
#define RUN_CASE(t,T)           for(__typeof(t) t=1;t<=T;t++)

using namespace std;

bool Check(int N, int pos) {return  (bool)(N & (1<<pos));}
const int N = 50000+100;
int tot_node = 1;
int to[1600009][2];
int ara[N],prefixxor[N];

void Add(vector<int> &v)
{
    int sz = (int)v.size() , curr = 1;
    for(int i=0 ; i<sz ; i++){
        int bit = v[i];
        if(!to[curr][bit])   to[curr][bit] = ++tot_node;
        curr = to[curr][bit];
    }
}

int Maximize(vector<int> &v)
{
    int sz = (int)v.size() , curr = 1 , ret=0;
    for(int i=0 ; i<sz ; i++){
        int bit = v[i];
        if(to[curr][bit^1]){
            ret += (1<<(sz-i-1));
            curr = to[curr][bit^1];
        }
        else
            curr = to[curr][bit];
    }
    return ret;
}

int Minimize(vector<int> &v)
{
    int sz = (int)v.size() , curr = 1 , ret=0;
    for(int i=0 ; i<sz ; i++){
        int bit = v[i];
        if(to[curr][bit])
            curr = to[curr][bit];
        else{
            ret += (1<<(sz-i-1));
            curr = to[curr][bit^1];
        }
    }
    return ret;
}
void Solve(int t)
{
    int i,j,k,n,mx=0,mn=2147483647;
    tot_node = 1;
    ms(to , 0);
    scin(n);
    for(i=1 ; i<=n ; i++){
        scin(ara[i]);
        prefixxor[i] = prefixxor[i-1]^ara[i];
    }
    for(i=0 ; i<=n ; i++){
        vector<int>bit;
        for(j=31 ; j>=0 ; j--)
            bit.pb(Check(prefixxor[i] , j));
        if(i > 0){
            mx = max(mx , Maximize(bit));
            mn = min(mn , Minimize(bit));
        }
        Add(bit);
    }
    pf("Case %d: %d %d\n",t,mx,mn);
}

int main()
{
    int t,T;
    scin(T);
    RUN_CASE(t,T)
    {
        Solve(t);
    }
    return 0;
}