// GSKHIRTLADZE #include<bits/stdc++.h> #define tree int t,int l,int r #define left 2*t,l,(l+r)/2 #define right 2*t+1,(l+r)/2+1,r #define pb push_back using namespace std; int i,j,k,res,ans,ix,jx,a[524288],n; vector < int > g,v,vec[1048576]; int ii,jj,mx; void build(tree) { for (int i=l;i<=r;i++) vec[t].pb(a[i]); sort(vec[t].begin(),vec[t].end()); if (l == r) return; build(left); build(right); } int L,R,X,Y,l,r,stx,sty,m,st; void get(tree) { if (r < L || R < l) return; if (L <= l && r <= R) { l=0; r=vec[t].size()-1; stx=vec[t].size(); while (l <= r) { m=(l+r)/2; if (vec[t][m] < X) { l=m+1; } else { stx=m; r=m-1; } } l=0; r=vec[t].size()-1; sty=-1; while (l <= r) { m=(l+r)/2; if (vec[t][m] > Y) { r=m-1; } else { sty=m; l=m+1; } } if (stx <= sty) res+=sty-stx+1; return; } get(left); get(right); } int main() {ix=jx=1; scanf("%d",&n); for (i=1;i<=n;i++) scanf("%d",&a[i]); build(1,1,n); for (i=1;i<=n;i++) { mx=max(mx,a[i]); if (a[i] == mx ) g.pb(i); } for (i=n;i>=1;i--) { mx=min(mx,a[i]); if (a[i] == mx && ( i == 1 || a[i] < a[i-1])) v.pb(i); } reverse(v.begin(),v.end()); ans=-1; for (ii=0;ii<g.size();ii++) { l=0; st=0; r=v.size()-1; m=0; while (l <= r) { m=(l+r)/2; if (v[m] <= g[ii]) { st=m+1; l=m+1; } else { st=m; r=m-1; } } for (jj=st;jj<v.size() && a[g[ii]] > a[v[jj]];jj++) { L=g[ii]; R=v[jj]; X=a[R]; Y=a[L]; res=0; get(1,1,n); if (res > ans) { ans=res; ix=L; jx=R; } } } if (ix == jx) { cout<<"Cool Array"<<endl; } else cout<<ix<<" "<<jx<<endl; }