#include <bits/stdc++.h>
#define F first
#define S second
using namespace std;
typedef long long ll;

#include <bits/stdc++.h>
#define F first
#define S second
using namespace std;
typedef long long ll;

const int N=1<<19;

pair<int, int> stmi[2*N];
int lazy[2*N];

void init(int i, int stl, int str){
	if (stl==str){
		stmi[i]={0, stl};
	}
	else{
		int mid=(stl+str)/2;
		init(i*2, stl, mid);
		init(i*2+1, mid+1, str);
		stmi[i]=max(stmi[i*2], stmi[i*2+1]);
	}
}

void adds(int, int, int, int, int, int);

void golazy(int i, int stl, int str){
	if (i<N&&lazy[i]!=0){
		int mid=(stl+str)/2;
		adds(i*2, stl, mid, stl, mid, lazy[i]);
		adds(i*2+1, mid+1, str, mid+1, str, lazy[i]);
		lazy[i]=0;
	}
}

void adds(int i, int stl, int str, int l, int r, int v){
	if (l>str) return;
	if (r<stl) return;
	if (l<=stl&&str<=r){
		lazy[i]+=v;
		stmi[i].F+=v;
	}
	else{
		golazy(i, stl, str);
		int mid=(stl+str)/2;
		adds(i*2, stl, mid, l, r, v);
		adds(i*2+1, mid+1, str, l, r, v);
		stmi[i]=max(stmi[i*2], stmi[i*2+1]);
	}
}

pair<int, int> getmax(int i, int stl, int str, int l, int r){
	if (l>str) return {0, -1};
	if (r<stl) return {0, -1};
	if (l<=stl&&str<=r){
		return stmi[i];
	}
	else{
		golazy(i, stl, str);
		int mid=(stl+str)/2;
		return max(getmax(i*2, stl, mid, l, r), getmax(i*2+1, mid+1, str, l, r));
	}
}

int xa[5050505];
int xb[5050505];
int ya[5050505];
int yb[5050505];

vector<pair<int, int> > qs1[5050505];
vector<pair<int, int> > qs2[5050505];

int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	int n;
	cin>>n;
	vector<int> a(n);
	int f=0;
	for (int i=0;i<n;i++){
		cin>>a[i];
		if (i>0&&a[i]<a[i-1]){
			f=1;
		}
	}
	if (f==0){
		cout<<"Cool Array\n";
		return 0;
	}
	vector<pair<int, int> > mis;
	vector<pair<int, int> > mas;
	reverse(a.begin(), a.end());
	for (int i=n-1;i>=0;i--){
		if (mas.size()==0||a[i]>mas.back().F){
			mas.push_back({a[i], i});
		}
		int mi=0;
		int ma=mas.size()-1;
		while (mi<=ma){
			int mid=(mi+ma)/2;
			if (mas[mid].F>=a[i]){
				ma=mid-1;
			}
			else{
				mi=mid+1;
			}
		}
		xa[i]=mi;
		xb[i]=mas.size()-1;
	}
	
	for (int i=0;i<n;i++){
		if (mis.size()==0||a[i]<mis.back().F){
			mis.push_back({a[i], i});
		}
		int mi=0;
		int ma=mis.size()-1;
		while (mi<=ma){
			int mid=(mi+ma)/2;
			if (mis[mid].F<=a[i]){
				ma=mid-1;
			}
			else{
				mi=mid+1;
			}
		}
		ya[i]=mi;
		yb[i]=mis.size()-1;
		
		//cout<<xa[i]<<" "<<xb[i]<<" "<<ya[i]<<" "<<yb[i]<<endl;
		
		qs1[xa[i]].push_back({ya[i], yb[i]});
		qs2[xb[i]].push_back({ya[i], yb[i]});
	}
	init(1, 0, N-1);
	pair<int, pair<int, int> > v={-1, {-1, -1}};
	for (int i=0;i<n;i++){
		for (auto qq:qs1[i]){
			adds(1, 0, N-1, qq.F, qq.S, 1);
		}
		pair<int, int> ma=getmax(1, 0, N-1, 0, n);
		//if (i%10000==0) cout<<i<<endl;
		if (ma.F>=v.F&&ma.S>-1){
			//cout<<i<<" "<<ma.F<<" "<<ma.S<<endl;
			v=max(v, {ma.F, {mas[i].S, mis[ma.S].S}});
		}
		for (auto qq:qs2[i]){
			adds(1, 0, N-1, qq.F, qq.S, -1);
		}
	}
	//cout<<v.F<<endl;
	cout<<n-v.S.F<<" "<<n-v.S.S<<endl;
}