#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; }