#include<iostream>
#include<algorithm>
#include<cstdio>
#include<string>
#include<cmath>
#include<cstring>
#include<queue>
#include<map>
#include<vector>
#define bug cout<<"bug"<<endl
#define ll long long
#define inf 0x3f3f3f3f3f3f3f3f
using namespace std;
inline ll read(){ ll x=0,f=1;char ch=getchar();
while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
return x*f;
}
const ll maxn=2e5+100;
ll n;
struct node{
ll l,r;
ll num;
ll pos;
ll flag;
}a[maxn];
ll b[maxn*10],f[maxn],refl[maxn*10];
ll top=0;
int main(){
cin.tie(0);
cout.tie(0);
cin>>n;
for(ll i=1;i<=n;i++){
cin>>a[i].flag;
if(a[i].flag==1){
cin>>a[i].l>>a[i].r>>a[i].num;
b[++top]=a[i].r;
b[++top]=a[i].l;
}
else{
cin>>a[i].pos>>a[i].num;
b[++top]=a[i].pos;
}
}
b[++top]=(ll)(1e9);
b[++top]=(ll)(-1e9);
b[++top]=0;
sort(b+1,b+top+1);
ll tt=unique(b+1,b+top+1)-(b+1);
ll maxx=0;
for(ll i=1;i<=n;i++){
if(a[i].flag==1){
ll t1=a[i].l,t2=a[i].r;
ll t3=lower_bound(b+1,b+tt+1,t1)-b;
ll t4=lower_bound(b+1,b+tt+1,t2)-b;
refl[t3]=t1;
refl[t4]=t2;
a[i].l=t3,a[i].r=t4;
}
else{
ll t1=a[i].pos;
ll t2=lower_bound(b+1,b+tt+1,t1)-b;
refl[t2]=t1;
if(a[i].flag==2) a[i].l=a[i].r=t2;
else a[i].pos=t2;
}
}
ll t1=(ll)1e9,t2=(ll)-1e9;
ll t3=lower_bound(b+1,b+tt+1,t1)-b;
ll t4=lower_bound(b+1,b+tt+1,t2)-b;
refl[t3]=t1;
refl[t4]=t2;
maxx=t3;
ll t5=lower_bound(b+1,b+tt+1,0)-b;
refl[t5]=0;
for(ll i=1;i<=n;i++){
if(a[i].flag==2||a[i].flag==1){
f[a[i].l]^=a[i].num;
f[a[i].r+1]^=a[i].num;
}
else{
f[1]^=a[i].num;
f[a[i].pos]^=a[i].num;
f[a[i].pos+1]^=a[i].num;
}
}
ll ans=-inf;
ll sum=0;
ll ppos=inf;
for(ll i=1;i<=maxx;i++){
sum^=f[i];
if(sum>ans){ans=sum;ppos=refl[i];}
else if(sum==ans&&abs(ppos)>=abs(refl[i])){ppos=refl[i];}
}
cout<<ans<<" "<<ppos<<"\n";
return 0;
}