#include using namespace std; const long long inf=-1000000000000000000LL; int m,n,i,j,k,k2,le,ri,t[100100]; long long res,f[100],cnt[100],st[100],x[100100],y[100100],v[100100],a[800800]; map mm; void init(int i, int L, int R) { a[i]=inf; if (L==R) return; int h=(L+R)/2; init(i*2,L,h); init(i*2+1,h+1,R); } void add(int i, int L, int R, int x, long long v) { if (L==R) { if (a[i]==inf) a[i]=v; else a[i]+=v; return; } int h=(L+R)/2; if (x<=h) add(i*2,L,h,x,v); else add(i*2+1,h+1,R,x,v); a[i]=max(a[i*2],a[i*2+1]); } long long fmax(int i, int L, int R, int l, int r) { if (L==l && R==r) return a[i]; int h=(L+R)/2; long long cur=inf; if (l<=h) cur=max(cur,fmax(i*2,L,h,l,min(r,h))); if (r>h) cur=max(cur,fmax(i*2+1,h+1,R,max(l,h+1),r)); return cur; } int main() { scanf("%d",&m); f[0]=f[1]=cnt[0]=cnt[1]=1; st[0]=1; st[1]=2; for (i=2; i<15; i++) { f[i]=f[i-2]+f[i-1]; st[i]=st[i-1]+cnt[i-1]; cnt[i]=cnt[i-1]*f[i]; } for (i=0; ik2) { x[i]=(x[i]-st[k])/f[k]+st[k-1]; } else if (k2>k) { y[i]=(y[i]-st[k2])/f[k2]+st[k2-1]; } else { x[i]=(x[i]-st[k])/f[k]+st[k-1]; y[i]=(y[i]-st[k2])/f[k2]+st[k2-1]; } } scanf("%lld",&y[i]); if (mm.count(x[i])==0) { v[++n]=x[i]; mm[x[i]]=n; } } } sort(v+1,v+n+1); for (i=1; i<=n; i++) mm[v[i]]=i; init(1,1,n); for (i=0; i