#include <iostream> #include <vector> #include <algorithm> #include <cstdio> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #include <chrono> using namespace std; using namespace __gnu_pbds; using namespace chrono; typedef long long ll; using order_tree = tree<int, int, less<int>, rb_tree_tag, tree_order_statistics_node_update>; int main() { int N; scanf("%d", &N); auto beg = high_resolution_clock::now(); vector<int> el(N, 0); vector<pair<int, int>> st(N, {0, 0}); for (int i = 0; i < N; ++i) { scanf("%d", &el[i]); st[i] = {i - el[i], i}; } bool sorted = true; for (int i = 1; i < N; ++i) sorted = sorted && (el[i - 1] < el[i]); if (sorted) printf("Cool Array\n"); else { int bi = -1, bj = -1, bcount = -1; ll C = 0; bool cont = true; auto ms = milliseconds(1950); sort(st.begin(), st.end()); for (int _j = N - 1; cont && _j >= 0; --_j) { int j = st[_j].second; order_tree tr; for (int i = j - 1; cont && i >= 0; --i) { C++; if (((C&63LL)==0)&& high_resolution_clock::now()-beg>ms) { cont = false; break; } if (el[i] < el[j]) continue; int tcount = tr.order_of_key(el[i]); tr.insert({el[i], el[i]}); if (tcount > bcount || (tcount == bcount && (i < bi || (i == bi && j < bj)))) { bcount = tcount; bi = i; bj = j; } } } printf("%d %d\n", 1 + bi, 1 + bj); } return 0; }