#include <bits/stdc++.h> using namespace std; typedef long long ll; #define gc getchar int getint() { unsigned int c; int x = 0; while (((c = gc()) - '0') >= 10) { if (c == '-') return -getint(); if (!~c) exit(0); } do { x = (x << 3) + (x << 1) + (c - '0'); } while (((c = gc()) - '0') < 10); return x; } int getstr(char *s) { int c, n = 0; while ((c = gc()) <= ' ') { if (!~c) exit(0); } do { s[n++] = c; } while ((c = gc()) > ' ' ); s[n] = 0; return n; } template<class T> inline bool chmin(T &a, T b) { return a > b ? a = b, 1 : 0; } template<class T> inline bool chmax(T &a, T b) { return a < b ? a = b, 1 : 0; } // 0-based index, range inclusive. template<class T> struct BIT { vector<T> as; void init(int n, T u = 0) { as.assign(n, u);} T sum(int s, int e) { return sum(e) - sum(s - 1);} T sum(int e) { T s = 0; for (; e >= 0; e = (e & e + 1) - 1) s += as[e]; return s; } void add(int p, T v) { for (; p < as.size(); p |= p + 1) as[p] += v; } }; #include <sys/time.h> struct Clock { typedef unsigned long long T; double sd, tps, d; double start_sec, tic_per_sec, delta; T start_tic; // time in sec double get() { if (tic_per_sec) return (tic() - start_tic) / tic_per_sec; delta = sec() - start_sec; if (delta < 0.5) return delta; tic_per_sec = (tic() - start_tic) / delta; return get(); } void reset() { tic_per_sec = 0; start_sec = sec(); start_tic = tic(); } T tic() { unsigned int a, b; __asm__ volatile ("rdtsc" : "=a" (a), "=d" (b)); return a | ((T)b << 32); } double sec() { timeval t; gettimeofday(&t, 0); return t.tv_sec + t.tv_usec * 1e-6; } }; BIT<int> bit; const int N = 500100; int n; int count_inversions(const vector<int>& as) { bit.init(n); int res = 0; for (int j = 0; j < n; j++) { res += j - bit.sum(as[j]); bit.add(as[j], 1); } return res; } double r = 0.5; struct pred { bool operator()(const pair<int, int>& a, const pair<int, int>& b) const { double aa = (n - a.first) * r + a.second * (1 - r); double bb = (n - b.first) * r + b.second * (1 - r); return aa < bb; } }; int main () { int i, j, k, tcc, tc = 1 << 28; Clock clc; clc.reset(); for (tcc = 0; tcc < tc; tcc++) { n = getint(); vector<int> as(n), sort_as(n); for (i = 0; i < n; i++) as[i] = getint(); sort_as = as; sort(sort_as.begin(), sort_as.end()); if (sort_as == as) { puts("Cool Array"); continue; } ll res = 1LL << 59; int a, b; int done = 0; ll normal_inv = count_inversions(as); vector<pair<int, int>> xs(n); for (i = 0; i < n; i++) xs[i] = make_pair(as[i], i); sort(xs.begin(), xs.end(), pred()); // for (i = 0; i < n; i++) cout << xs[i].first << " " << xs[i].second << endl; int ii, jj, jc; for (ii = 0; ii < n; ii++) { for (jj = n - 1, jc = 0; jc < 20 && jj > ii; jj--, jc++) { i = xs[ii].second; j = xs[jj].second; //for (i = 0; i < n; i++) { // for (j = i + 1; j < n; j++) { // for (j = n - 1; j > i; j--) { int aa = as[i], bb = as[j]; if (aa < bb) continue; // swap(as[i], as[j]); // do //ll inversion_count = count_inversions(as); ll inversion_count = normal_inv - 1; for (int k = i + 1; k < j; k++) { if (aa < as[k]) inversion_count ++; else inversion_count--; if (bb > as[k]) inversion_count++; else inversion_count--; } // cout << i << " " << j << " cnt = " << inversion_count << endl; //swap(as[i], as[j]); // undo if (chmin(res, inversion_count)) { a = i, b = j; } if (res == inversion_count) { if (a > i) a = i, b = j; if (a == i) { if (b > j) a = i, b = j; } } if (clc.get() > 1.90) { done = 1; break; } } if (done) break; } printf("%d %d\n", a + 1, b + 1); } return 0; }