#include <bits/stdc++.h>
using namespace std;

#define fru(j,n) for(int j=0; j<(n); ++j)
#define tr(it,v) for(auto it=(v).begin(); it!=(v).end(); ++it)
#define x first
#define y second
#define pb push_back
#define ALL(G) (G).begin(),(G).end()

//#define DEBUG
#ifdef DEBUG
#define DEB printf
#else
#define DEB(...)
#endif


typedef long long ll;
typedef pair<int,int> pii;
typedef vector<int> vi;

const int inft = 1000000009;
const int MAXN = 500006;//10^6

int A[MAXN],inv[MAXN];
vi PO,KO;
bool bPO[MAXN],bKO[MAXN];

const int BAS=1<<19,U=2*BAS+5;
pii D[U]; //max, -argmax
int dod[U];
int POCZ[U],KON[U];

void go(int k,int a,int b,int val){ //dodaj val na tym przedziale
	if(a<=POCZ[k] && KON[k]<=b){
		dod[k]+=val;
		D[k].x+=val;
		return;
	}
	if(a<=KON[2*k]) go(2*k,a,b,val);
	if(POCZ[2*k+1]<=b) go(2*k+1,a,b,val);
	D[k]=max(D[2*k],D[2*k+1]);
	D[k].x+=dod[k];
}

pii PRZ[MAXN];

int main(){
	POCZ[1]=0;KON[1]=BAS-1;
	for(int i=2;i<U;++i)
		if(i%2==0){
			POCZ[i]=POCZ[i/2];
			KON[i]=(POCZ[i/2]+KON[i/2])/2;
		}
		else {
			POCZ[i]=(POCZ[i/2]+KON[i/2])/2+1;
			KON[i]=KON[i/2];
		}
	fru(i,BAS) D[i+BAS]=pii(0,-i);
	int n;
	scanf("%d",&n);
	fru(i,n)	scanf("%d",&A[i]);
	fru(i,n) --A[i];
	fru(i,n) inv[A[i]]=i;
	fru(i,n) if(PO.empty() || A[i]>PO.back()) PO.pb(A[i]);
	fru(i,n){
		while(!KO.empty() && KO.back()>A[i])
			KO.pop_back();
		KO.pb(A[i]);
	}
	if(PO.size()==n) {
		printf("Cool Array\n");
		return 0;
	}
	DEB("PO:"); tr(it,PO) DEB("%d ",*it); DEB("\n");
	DEB("KO:"); tr(it,KO) DEB("%d ",*it); DEB("\n");
	tr(it,PO) bPO[*it]=1;
	tr(it,KO) bKO[*it]=1;
	int bestval=-1;
	pii bestpos(-1,-1);
	int last=0;
	fru(i,KO.size()) if(bPO[KO[i]]==0) go(1,i,i,1);
	fru(i,n) if(bKO[i]==0){
		if(bPO[i]){
			while(last<inv[i]){
				int e=A[last];
				assert(e<i);
				if(bPO[e]==0){
					DEB("zapominam o gosciu %d na prz:  %d %d\n",e,PRZ[e].x,PRZ[e].y);
					if(bKO[e]==0) go(1,PRZ[e].x,PRZ[e].y,-1);
					else {
						int w=lower_bound(ALL(KO),e)-KO.begin();
						go(1,w,w,-1);
					}
				}

				++last;
			}
			DEB("rozwazam poczatek w %d i kandydat: (%d,%d)\n",i,D[1].x,D[1].y);
			if(D[1].x>bestval){
				bestval=D[1].x;
				bestpos=pii(inv[i],inv[KO[-D[1].y]]);
			}
		}
		else{
			//jestem w gosciu ktory nie jest ani w PO ani w KO
			DEB("val = %d\n",i);
			int p=0,k=KO.size();
			while(p+1<k){
				int m=(p+k)/2;
				if(KO[m]>i) k=m;
				else p=m;
			}
			int kon=p;//ostatni do ktorego moge dodac
			assert(KO[kon]<i);
			int pocz=0;
			//musi byc jeszcez na prawo
			if(inv[KO[0]]<inv[i]){
				p=0,k=KO.size();
				while(p+1<k){
					int m=(p+k)/2;
					if(inv[KO[m]]<inv[i]) p=m;
					else k=m;
				}
				pocz=k;
			}
			DEB("dla goscia %d dodaje na przedziale %d %d\n",i,pocz,kon);
			assert(pocz<=kon);
			PRZ[i]=pii(pocz,kon);
			go(1,pocz,kon,1);
		}
	}
	printf("%d %d\n",bestpos.x+1,bestpos.y+1);
	return 0;
}