#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int,int> pii;
#define pb push_back
#define mp make_pair
#define F first
#define S second
const int N = (int)5e5 + 10;
struct event {
	int x, l, r;
	event() {}
	event(int x, int l, int r) : x(x), l(l), r(r) {}
};
vector<event> E[N];

int n, an, bn, p[N], posA[N], posB[N], mxA[N], mxB[N], add[4 * N];
pii a[N], b[N], ans[N], t[4 * N];

int get(pii *a, int r, int x, int decr)
{	int l = 0, res = r;
	while (l <= r)
	{	int mid = (l + r) >> 1;
		if ((x < a[mid].F) ^ decr) res = mid, r = mid - 1;
		else l = mid + 1;
	}
	return res;
}

inline bool inversion(int i, int j) {
	return a[i].S < b[j].S && a[i].F > b[j].F;
}

void build(int v, int l, int r) {
	if (l == r) t[v] = mp(0, l);
	else {
		int mid = (l + r) >> 1;
		build(v+v,l,mid);
		build(v+v+1,mid+1,r);
		t[v] = max(t[v+v],t[v+v+1]);
	}
}

void push(int v) {
	if (v + v < 4 * N) add[v+v] += add[v];
	if (v+v+1 < 4 * N) add[v+v+1] += add[v];
	t[v].F += add[v];
	add[v] = 0;
}

void update(int v, int l, int r, int L, int R, int x) {
	push(v);
	if (r < L || R < l) return;
	if (L <= l && r <= R) {
		add[v] += x;
		push(v);
		return;
	}
	int mid = (l + r) >> 1;
	update(v+v,l,mid,L,R,x);
	update(v+v+1,mid+1,r,L,R,x);
	t[v] = max(t[v+v], t[v+v+1]);
}



double fuck() {
	for (int i = 1; i <= n; i++)	
		if (i != p[i])
			for (int j = i + 1; j <= n; j++)
				if (p[i] > p[j])
				{
					cout << i << " " << j << "\n";
					exit(0);
				}
    return 0.0;
}



void show(int v, int l, int r, int tab=0) {
	
	for (int i= 0; i < tab; i++) putchar(' ');
	printf("[%d,%d] (%d,%d) +%d\n", l ,r, t[v].F, t[v].S, add[v]);
	if (l == r) return;
	int mid = (l + r) >> 1;
	show(v+v,l,mid,tab+1);
	show(v+v+1,mid+1,r,tab+1);
}

int main() {
//	freopen("a.in", "r", stdin);
//	freopen("a.out", "w", stdout);
	scanf("%d", &n);
	bool identity = true;
	for (int i = 1; i <= n; i++)
		scanf("%d", &p[i]), identity &= (p[i] == i);
	if (identity) {
		puts("Cool Array");
		return 0;
	}
	mxA[0] = 0;
	mxB[n+1] = N;	
	for (int i = 1, j = n; i <= n; i++, j--) {
		mxA[i] = max(mxA[i-1], p[i]);
		if (mxA[i] == p[i]) a[an++] = mp(p[i], i), posA[i] = an-1;
		else posA[i] = posA[i-1];
		
		mxB[j] = min(mxB[j+1], p[j]);
		if (mxB[j] == p[j]) b[bn++] = mp(p[j], j), posB[j] = bn-1;
		else posB[j] = posB[j+1];
	}
	for (int i = 1; i <= n; i++)
	{	
		if (mxA[i] == p[i] || mxB[i] == p[i]) continue;
		int al = get(a, posA[i], p[i], 0);
		int ar = posA[i];
		int bl = get(b, posB[i], p[i], 1);
		int br = posB[i];
//		cerr << i << ' '<<p[i] << "|" << al << ' ' << ar << ' ' << bl << ' ' << br << "\n";
		if (al > ar || bl > br) continue;
		E[al].pb(event(+2, bl, br));
		if (ar + 1 < an) 
			E[ar+1].pb(event(-2, bl, br));
	}
	
	build(1,0,bn-1);
//	show(1,0,bn-1);
	int mx = 0;
	for (int i = 0; i < an; i++)
	{
		for (event &e : E[i]) 
			update(1, 0, bn-1, e.l, e.r, e.x);//, show(1, 0, bn-1);
		
		push(1);
		ans[i] = t[1];
		mx = max(mx, ans[i].F);
	}
	if (mx == 0)
		fuck();
	else	
	for (int i = 0; i < an; i++)
		if (ans[i].F == mx)
		{
			cout << a[i].S << ' ' << b[ans[i].S].S << "\n";
			break;
		}
	


	return 0;
}