#include "bits/stdc++.h"
#define MAXN 300009
#define INF 1000000007
#define mp(x,y) make_pair(x,y)
#define all(v) v.begin(),v.end()
#define pb(x) push_back(x)
#define wr cout<<"----------------"<<endl;
#define ppb() pop_back()
#define tr(ii,c) for(__typeof((c).begin()) ii=(c).begin();ii!=(c).end();ii++)
#define ff first
#define ss second
#define my_little_dodge 46
#define debug(x)  cerr<< #x <<" = "<< x<<endl;
using namespace std;

typedef long long ll;
typedef pair<int,int> PII;
template<class T>bool umin(T& a,T b){if(a>b){a=b;return 1;}return 0;}
template<class T>bool umax(T& a,T b){if(a<b){a=b;return 1;}return 0;}
pair<pair<int,ll>,pair<ll,ll> > query[MAXN];
pair<ll,ll>arr[22];
ll f[22],lca[MAXN];
map<ll,int>pm;
ll LCA(ll x,ll y){
	if(x==1 or y==1)		
		return 1;
	int xx,yy;
	for(int i=0;i<=14;i++){
		if(arr[i].ff<=x and x<=arr[i].ss)
			xx=i;
		if(arr[i].ff<=y and y<=arr[i].ss)
			yy=i;	
	}
	while(x!=y){
		if(xx>yy)
			x=arr[xx-1].ff+(x-arr[xx].ff)/f[xx],xx--;
		else
			y=arr[yy-1].ff+(y-arr[yy].ff)/f[yy],yy--;
	}
	assert(x==y);
	return x;
}
const ll B=1e18;
ll s[MAXN<<2];
void build(int nd,int x,int y){
	s[nd]=-B;	
	if(x==y)
		return;
	int mid=(x+y)>>1;	
	build(nd<<1,x,mid);	
	build(nd<<1|1,mid+1,y);	
}
void upd(int p,ll v,int nd,int x,int y){
	if(x==y){
		if(s[nd]==-B)
			s[nd]=v;
		else
			s[nd]+=v;
		return;	
	}
	int mid=(x+y)>>1;
	if(p<=mid)
		upd(p,v,nd<<1,x,mid);
	else
		upd(p,v,nd<<1|1,mid+1,y);
	s[nd]=max(s[nd<<1],s[nd<<1|1]);	
}
ll tap(int l,int r,int nd,int x,int y){
	if(l>y or x>r)
		return -B;
	if(l<=x and y<=r)
		return s[nd];
	int mid=(x+y)>>1;
	return max(tap(l,r,nd<<1,x,mid),tap(l,r,nd<<1|1,mid+1,y));
}
int main(){
    //~ freopen("file.in", "r", stdin);
    arr[0]=mp(1,1);f[0]=1;
    arr[1]=mp(2,2);f[1]=1;
    for(int i=2;i<=14;i++){
		f[i]=f[i-1]+f[i-2];
		arr[i].ff=arr[i-1].ss+1;
		arr[i].ss=arr[i].ff+f[i]*1LL*(arr[i-1].ss-arr[i-1].ff+1)-1;
	}arr[14].ss=1e18;
	int q;
	scanf("%d",&q);
	for(int i=1;i<=q;i++){
		int t;
		ll x,y;
		scanf("%d%lld%lld",&t,&x,&y);
		query[i]=mp(mp(t,x),mp(y,0));
		if(t==1){
			ll z;
			scanf("%lld",&z);
			lca[i]=LCA(x,y);
			pm[lca[i]]=1;
			query[i].ss.ss=z;
		}
		else
			pm[x]=pm[y]=1;
	}int c=0;
	tr(it,pm)
		it->ss=++c;
	build(1,1,c);	
	for(int i=1;i<=q;i++){
		int t=query[i].ff.ff;
		ll x=query[i].ff.ss;
		ll y=query[i].ss.ff;
		ll z=query[i].ss.ss;
		if(t==1)
			upd(pm[lca[i]],z,1,1,c);
		else{
			ll res=tap(pm[x],pm[y],1,1,c);
			if(res==-B)
				puts("Comisia");
			else
				printf("%lld\n",res);
		}
	}
	return 0;
}