
/// Trie (XOR SUM)

#include<bits/stdc++.h>
using namespace std;
#define ll int
#define maxn 2000050

bool check(ll n,ll pos)
{
    return (bool)(n&(1LL<<pos));
}


ll cumxor[50005];
ll n;

struct Trie
{
    ll nextt[maxn][2];
    ll endmark[maxn];

    ll nextt1[maxn][2];
    ll endmark1[maxn];
    ll sz;
    Trie()
    {
        clear();
    }
    void clear()
    {
        sz=0;
        memset(nextt[0],-1,sizeof(nextt[0]));
        memset(nextt1[0],-1,sizeof(nextt1[0]));
    }
    void add(ll val)
    {
        ll v=0;
        for(ll i = 30; i>= 0; --i)
        {
            int id = check(val,i);
            if(nextt[v][id] == -1)
            {
                nextt[v][id]=++sz;
                memset(nextt[sz],-1,sizeof(nextt[sz]));
            }
            v=nextt[v][id];
        }
        endmark[v]=val;
    }
    void add1(ll val){
    ll v=0;
    for(ll i=30;i>=0;i--){
        ll id=check(val,i);
        if(nextt1[v][id]==-1){
            nextt1[v][id]=++sz;
            memset(nextt1[sz],-1,sizeof(nextt1[sz]));
        }
        v=nextt1[v][id];
    }
    endmark1[v]=val;
    }

    ll dfs(ll val)
    {
        ll v=0;
        for(ll i=30; i>=0 ; i--)
        {
            ll id=check(val,i);
            if(nextt[v][id^1]==-1)
            {
                v=nextt[v][id];
            }
            else
            {
                v=nextt[v][id^1];
            }
        }
        return endmark[v]^val;
    }

    ll dfs1(ll val){
    ll v=0;
    for(ll i=30;i>=0;i--){
            ll id=check(val,i);
        if(nextt1[v][id]==-1){
            v=nextt1[v][id^1];
        }
        else
            v=nextt1[v][id];
    }
    return endmark1[v]^val;
    }
};

Trie tree;
vector<ll>as;

int main()
{
    ll tes;
    scanf("%d",&tes);
    for(ll cas=1;cas<=tes;cas++)
    {
          tree.clear();
          scanf("%d",&n);
          tree.add(0);
          tree.add1(0);
          ll ans=0,ans1=10000000;
          for(ll i=1;i<=n;i++)
          {
              scanf("%d",&cumxor[i]);
              cumxor[i]=cumxor[i-1]^cumxor[i];
              ans=max(ans,tree.dfs(cumxor[i]));
              ans1=min(ans1,tree.dfs1(cumxor[i]));
              tree.add(cumxor[i]);
              tree.add1(cumxor[i]);
          }
          printf("Case %d: %d %d\n",cas,ans,ans1);
    }
    return 0;
}
