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