#include <bits/stdc++.h> #define mp make_pair #define st first #define nd second #define pb push_back using namespace std; typedef long long ll; typedef pair< ll,ll > pll; typedef pair< int,int > pii; const int N = 1000000, inf = 1000000000; int n, a[N+5], lazy[4*N+5], premax[N+5], where[N+5], fen[N+5]; pair< int , int > seg[4*N+5]; pii update(int i, int l, int r, int x, int y, int t) { if (x > r || y < l) return seg[i]; if (x <= l && y >= r) { lazy[i] += t; seg[i].st += t; return seg[i]; } int mi = (l + r) / 2; seg[i] = max(update(2*i, l, mi, x, y, t), update(2*i+1, mi+1, r, x, y, t)); seg[i].st += lazy[i]; return seg[i]; } pii query(int i, int l, int r, int x, int y) { if (x > r || y < l) return mp(-inf, -inf); if (x <= l && y >= r) return seg[i]; int mi = (l + r) / 2; pii t = max(query(2*i, l, mi, x, y), query(2*i+1, mi+1, r, x, y)); t.st += lazy[i]; return t; } void upd(int x) { for (; x <= n; x += x & -x) fen[x]++; } ll que(int x) { ll ans = 0; for (; x; x -= x & -x) ans += fen[x]; return ans; } pii init(int k, int l, int r) { if(l == r) return seg[k] = make_pair(0, l); int mi = (l + r) / 2; return seg[k] = max(init(k + k, l, mi), init(k + k + 1, mi + 1, r)); } int main() { scanf("%d", &n); for (int i = 1; i <= n; i++) { scanf("%d", a+i); premax[i] = max(premax[i-1], a[i]); where[a[i]] = i; } vector<int> va, vi; int last = n; pair< int , pair< int , int > > mx = mp(-1, mp(0, 0)); ll inv = 0; init(1, 1, n); for (int i = n; i >= 1; i--) { inv += que(a[i]); upd(a[i]); if (a[i] == premax[i]) { for (; last > a[i]; last--) { update(1, 1, n, 1, vi.rend() - upper_bound(vi.rbegin(), vi.rend(), where[last]), -1); } pii temp = query(1, 1, n, va.rend() - upper_bound(va.rbegin(), va.rend(), a[i]) + 1, va.size()); if(temp.st >= mx.st) { mx = mp(temp.st, mp(i, temp.nd-1)); } } update(1, 1, n, 1, va.size(), 1); update(1, 1, n, 1, va.rend() - upper_bound(va.rbegin(), va.rend(), a[i]), -1); if (va.empty() || va.back() > a[i]) { va.pb(a[i]); vi.pb(i); } } if (inv == 0) puts("Cool Array\n"); else { printf("%d %d\n", mx.nd.st, vi[mx.nd.nd]); } return 0; }