// {{{ by shik
#include <bits/stdc++.h>
#include <unistd.h>
#define SZ(x) ((int)(x).size())
#define ALL(x) begin(x),end(x)
#define REP(i,n) for ( int i=0; i<int(n); i++ )
#define REP1(i,a,b) for ( int i=(a); i<=int(b); i++ )
#define FOR(it,c) for ( auto it=(c).begin(); it!=(c).end(); it++ )
#define MP make_pair
#define PB push_back
using namespace std;
typedef long long LL;
typedef pair<int,int> PII;
typedef vector<int> VI;

#ifdef SHIK
template<typename T>
void _dump( const char* s, T&& head ) { cerr<<s<<"="<<head<<endl; }

template<typename T, typename... Args>
void _dump( const char* s, T&& head, Args&&... tail ) {
    int c=0;
    while ( *s!=',' || c!=0 ) {
        if ( *s=='(' || *s=='[' || *s=='{' ) c++;
        if ( *s==')' || *s==']' || *s=='}' ) c--;
        cerr<<*s++;
    }
    cerr<<"="<<head<<", ";
    _dump(s+1,tail...);
}

#define dump(...) do { \
    fprintf(stderr, "%s:%d - ", __PRETTY_FUNCTION__, __LINE__); \
    _dump(#__VA_ARGS__, __VA_ARGS__); \
} while (0);

template<typename Iter>
ostream& _out( ostream &s, Iter b, Iter e ) {
    s<<"[";
    for ( auto it=b; it!=e; it++ ) s<<(it==b?"":" ")<<*it;
    s<<"]";
    return s;
}

template<typename A, typename B>
ostream& operator <<( ostream &s, const pair<A,B> &p ) { return s<<"("<<p.first<<","<<p.second<<")"; }
template<typename T>
ostream& operator <<( ostream &s, const vector<T> &c ) { return _out(s,ALL(c)); }
template<typename T>
ostream& operator <<( ostream &s, const set<T> &c ) { return _out(s,ALL(c)); }
template<typename A, typename B>
ostream& operator <<( ostream &s, const map<A,B> &c ) { return _out(s,ALL(c)); }
#else
#define dump(...)
#endif

void RI() {}

template<typename... T>
void RI( int& head, T&... tail ) {
    scanf("%d",&head);
    RI(tail...);
}
// }}}

const int MXN = 500010;

struct seg_t {
    static seg_t mem[MXN * 4], *pmem;

    int l, r, val, mx, mxi;
    seg_t *lch, *rch;

    seg_t() {}
    seg_t(int nl, int nr): l(nl), r(nr) {
        val = mx = 0;
        mxi = nl;
        lch = rch = NULL;
        if (l != r) {
            int m = (l + r) / 2;
            lch = new (pmem++) seg_t(l, m);
            rch = new (pmem++) seg_t(m + 1, r);
        }
    }

    void update(int ql, int qr, int add) {
        if (l < ql || r > qr) {
            int m = (l + r) / 2;
            if (ql <= m) lch->update(ql, qr, add);
            if (qr > m) rch->update(ql, qr, add);
            if (lch->mx >= rch->mx) {
                mx = lch->mx + val;
                mxi = lch->mxi;
            } else {
                mx = rch->mx + val;
                mxi = rch->mxi;
            }
        } else {
            val += add;
            mx += add;
        }
    }
} seg_t::mem[MXN * 4], *seg_t::pmem;

int num[MXN], segl[MXN], segr[MXN];

int main() {

    int n;
    scanf("%d", &n);

    bool able = false;
    vector<int> cands, candsi;
    for(int i = 0; i < n; i++) {
        scanf("%d" ,&num[i]);
        if (i > 0 && num[i - 1] > num[i]) able = true;
        segl[i] = lower_bound(cands.begin(), cands.end(), num[i]) - cands.begin();
        segr[i] = cands.size();
        if (cands.empty() || cands.back() < num[i]) {
            cands.push_back(num[i]);
            candsi.push_back(i);
        }
    }

    if (!able) {
        puts("Cool Array");
        return 0;
    }

    seg_t::pmem = seg_t::mem;
    seg_t root(0, (int)cands.size() - 1);

    vector< pair<int, int> > vec;
    for (int i = 0; i < n; i++) vec.push_back(make_pair(num[i], i));
    sort(vec.begin(), vec.end());

    int ans = -1, sl = -1, sr = -1;
    for (int i = n - 1, j = n - 1, lst = MXN; i > 0; i--) {
        if (segl[i] < segr[i]) root.update(segl[i], segr[i] - 1, -1);
        if (num[i] >= lst) continue;
        lst = num[i];

        while(j >= 0 && vec[j].first >= num[i]) {
            int idx = vec[j--].second;
            if (segl[idx] < segr[idx]) root.update(segl[idx], segr[idx] - 1, 1);
        }
        
        if (segl[i] == segr[i]) continue;

        int nsl = candsi[max(segl[i], root.mxi)], nsr = i;
        dump(root.mx, nsl, nsr);
        if (root.mx > ans || (root.mx == ans && make_pair(nsl, nsr) < make_pair(sl, sr))) {
            tie(ans, sl, sr) = make_tuple(root.mx, nsl, nsr);
        }

    }

    // fprintf(stderr, "%d\n" ,ans);
    printf("%d %d\n", sl + 1, sr + 1);
    return 0;
}