#include <bits/stdc++.h>
#include <ext/hash_map>
#include <ext/numeric>

using namespace std;
using namespace __gnu_cxx;

#define REP(i,n) for( (i)=0 ; (i)<(n) ; (i)++ )
#define rep(i,x,n) for( (i)=(x) ; (i)<(n) ; (i)++ )
#define REV(i,n) for( (i)=(n) ; (i)>=0 ; (i)-- )
#define FORIT(it,x) for( (it)=(x).begin() ; (it)!=(x).end() ; (it)++ )
#define foreach(it,c) for(__typeof((c).begin()) it=(c).begin();it!=(c).end();++it)
#define rforeach(it,c) for(__typeof((c).rbegin()) it=(c).rbegin();it!=(c).rend();++it)
#define foreach2d(i, j, v) foreach(i,v) foreach(j,*i)
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
#define SZ(x) ((int)(x).size())
#define MMS(x,n) memset(x,n,sizeof(x))
#define mms(x,n,s) memset(x,n,sizeof(x)*s)
#define pb push_back
#define mp make_pair
#define NX next_permutation
#define UN(x) sort(all(x)),x.erase(unique(all(x)),x.end())
#define CV(x,n) count(all(x),(n))
#define FIND(x,n) find(all(x),(n))-(x).begin()
#define ACC(x) accumulate(all(x),0)
#define PPC(x) __builtin_popcount(x)
#define LZ(x) __builtin_clz(x)
#define TZ(x) __builtin_ctz(x)
#define mxe(x) *max_element(all(x))
#define mne(x) *min_element(all(x))
#define low(x,i) lower_bound(all(x),i)
#define upp(x,i) upper_bound(all(x),i)
#define NXPOW2(x) (1ll << ((int)log2(x)+1))
#define PR(x) cout << #x << " = " << (x) << endl ;

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

const int OO = (int) 2e9;
const double eps = 1e-9;
const int N = 500005;

int n;
int arr[N];
int R[N];
int len[N];
int f[N];
int cnt[N];

int bit[N];
bool vis[N];

void update(int idx, int val) {
	for (int l = idx + 1; l <= n; l += l & -l)
		bit[l] += val;
}

int query(int idx) {
	int ret = 0;
	for (int l = idx + 1; l > 0; l -= l & -l)
		ret += bit[l];
	return ret;
}

pair<int, int> mergeSortArr[N];
void mergeSort(int s, int e) {
	if (s == e) {
		mergeSortArr[s] = make_pair(s, arr[s]);
		return;
	}

	int mid = (s + e) / 2;
	mergeSort(s, mid);
	mergeSort(mid + 1, e);

	vector<pair<int, int> > res;
	for (int i = s, j = mid + 1, k = 0; k < e - s + 1; ++k)
		if (i == mid + 1) {
			res.push_back(mergeSortArr[j]);
			++j;
		} else if (j == e + 1) {
			res.push_back(mergeSortArr[i]);
			cnt[mergeSortArr[i].first] += j - (mid + 1);
			++i;
		} else if (mergeSortArr[i].second < mergeSortArr[j].second) {
			res.push_back(mergeSortArr[i]);
			cnt[mergeSortArr[i].first] += j - (mid + 1);
			++i;
		} else {
			res.push_back(mergeSortArr[j]);
			++j;
		}

	for (int i = 0; i < e - s + 1; ++i)
		mergeSortArr[s + i] = res[i];
}

void init() {
	mergeSort(0, n - 1);
}

int calcInv(int st, int en) {
	int res = 0;
	if (arr[st] < arr[en])
		res++;
	else
		res--;
	for (int i = 0; i < n; i++) {
		res += cnt[i];
		if (st < i && i < en) {
			if (arr[st] < arr[i] && arr[i] < arr[en])
				res += 2;
			else if (arr[st] > arr[i] && arr[i] > arr[en])
				res -= 2;
		}
	}
	return res;
}

int LIS() {
	MMS(len, 0x3f);
	for (int i = 0; i < n; i++)
		R[n - 1 - i] = arr[i];
	len[0] = -1e9;
	int mx = 0;
	for (int i = 0; i < n; i++) {
		f[i] = lower_bound(len + 1, len + n + 1, R[i]) - len;
		mx = max(mx, f[i]);
		len[f[i]] = R[i];
	}
	return mx;
}

bool isSorted() {
	for (int i = 0; i < n; i++)
		if (arr[i] != i + 1)
			return 0;
	return 1;
}

int mx, x, y;
void eval(int i) {
	memset(bit, 0, sizeof bit);
	mx = 0, x = 1e9, y = 1e9;
	for (int j = i + 1; j < n; ++j) {
		if (arr[i] > arr[j]) {
			vis[j] = 1;
			int cur = query(arr[i] - 1) - query(arr[j]);
			int ret = 2 * cur + 1;
			if (mx < ret)
				mx = ret, x = i, y = j;
			update(arr[j], 1);
		}
	}
}

int main() {
	std::ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	cin >> n;
	for (int i = 0; i < n; i++)
		cin >> arr[i];
	if (isSorted()) {
		cout << "Cool Array\n";
		return 0;
	}
	int mmx = 0, xx = 1e9, yy = 1e9;
	int cnt = 0;
	for (int i = 0; i < n; ++i) {
		if (vis[i])
			continue;
		int k = i;
		while (k + 1 < n && arr[k] < arr[k + 1])
			++k;
		int lst = k;
		cnt += n - k, eval(k);
		if (mmx < mx) {
			mmx = mx;
			while (i < k) {
				int md = (i + k) / 2;
				cnt += n - md, eval(md);
				if (mx == mmx)
					k = md;
				else
					i = md + 1;
			}
			eval(k);
			xx = x, yy = y;
		}
		i = lst;
		if (cnt >= 1e8) {
			cnt = -1;
			break;
		}
	}
	if (cnt != -1)
		cout << xx + 1 << " " << yy + 1 << endl;
	else {
		init();
		int res = LIS();
		int en, tmp = res;
		vector<int> st;
		for (int i = n - 1; i >= 0; i--) {
			if (f[i] == tmp)
				tmp--;
			if (f[i] == res) {
				st.pb(n - 1 - i);
			} else if (f[i] == 1 && tmp < 2) {
				en = n - 1 - i;
				break;
			}
		}
		int l = 0, r = SZ(st) - 1;
		while (l < r) {
			int mid = (l + r) / 2;
			if (calcInv(st[mid + 1], en) < calcInv(st[mid], en))
				l = mid + 1;
			else
				r = mid;
		}
		cout << st[l] + 1 << " " << en + 1 << endl;
	}
	return 0;
}