#include <bits/stdc++.h>

#ifdef getchar
#undef getchar
#endif
#define getchar() (*_pinp?*_pinp++:(_inp[fread(_pinp=_inp, 1, 4096, stdin)]='\0', *_pinp++))
char _inp[4097], *_pinp=_inp;
#define scan(x) do{while((x=getchar())<'0'); for(x-='0'; '0'<=(_=getchar()); x=(x<<3)+(x<<1)+_-'0');}while(0)
char _;

using namespace std;

const int MAX=524288*23;
int N;
int A[500001];
int seg[MAX], lc[MAX], rc[MAX], n;
int tree[500001];
int L[500001];
int R[500001];

int build(int begin, int end)
{
    int root=++n;
    if(begin==end)
        lc[root]=rc[root]=0;
    else
    {
        int mid=(begin+end)/2;
        lc[root]=build(begin, mid);
        rc[root]=build(mid+1, end);
    }
    return root;
}

void copyover(int dst, int src)
{
    seg[dst]=seg[src];
    lc[dst]=lc[src];
    rc[dst]=rc[src];
}

void update(int& root, int begin, int end, int x, int v)
{
    if(end<x || x<begin)
        return;
    int old=root;
    root=++n;
    if(old)
        copyover(root, old);
    if(begin==end)
        seg[root]++;
    else
    {
        int mid=(begin+end)/2;
        update(lc[root], begin, mid, x, v);
        update(rc[root], mid+1, end, x, v);
        seg[root]=seg[lc[root]]+seg[rc[root]];
    }
}

int query(int root, int begin, int end, int l, int r)
{
    if(!root || r<begin || end<l)
        return 0;
    if(l<=begin && end<=r)
        return seg[root];
    int mid=(begin+end)/2;
    return query(lc[root], begin, mid, l, r)+
           query(rc[root], mid+1, end, l, r);
}

int query(int x, int y, int l, int r)
{
    return query(tree[y], 1, N, l, r)-query(tree[x-1], 1, N, l, r);
}

int ans=0, x=-1, y=-1;

int relax(int l, int r)
{
    if(l>=r || A[l]<A[r])
        return -1;
    int v=query(l, r, A[r], A[l]);
    if(v>ans || (v==ans && (l<x || (l==x && r<y))))
        ans=v, x=l, y=r;
    return v;
}

int main()
{
#if 1
    scan(N);
    for(int i=1; i<=N; i++)
        scan(A[i]);
#else
    N=5000;
    for(int i=1; i<=N; i++)
        A[i]=i;
    srand(time(NULL));
    rotate(A+1, A+1+N/2, A+1+N);
    //random_shuffle(A+1, A+1+N);
#endif
    tree[0]=build(1, N);
    for(int i=1; i<=N; i++)
    {
        tree[i]=tree[i-1];
        update(tree[i], 1, N, A[i], 1);
    }
    bool cool=true;
    for(int i=2; i<=N; i++)
        cool&=A[i]==A[i-1]+1;
    if(cool)
        return printf("Cool Array\n"), 0;
    vector<int> S;
    for(int i=1; i<=N; i++)
    {
        while(!S.empty() && A[S.back()]>A[i])
            S.pop_back();
        if(S.empty())
            L[i]=-1;
        else
            L[i]=S.back();
        S.push_back(i);
    }
    S.clear();
    for(int i=N; i>=1; i--)
    {
        while(!S.empty() && A[S.back()]<A[i])
            S.pop_back();
        if(S.empty())
            R[i]=-1;
        else
            R[i]=S.back();
        S.push_back(i);
    }
    vector<int> ls, rs;
    for(int i=1; i!=-1; i=R[i])
        ls.push_back(i);
    for(int i=N; i!=-1; i=L[i])
        rs.push_back(i);
    reverse(rs.begin(), rs.end());
    bool exitearly=1LL*ls.size()*rs.size()>100000;
    for(auto& it: ls)
    {
        auto it2=upper_bound(rs.begin(), rs.end(), it);
        int maxiter=20;
        for(; it2!=rs.end(); ++it2)
        {
            if(A[it]<A[*it2])
                break;
            relax(it, *it2);
            maxiter--;
            if(exitearly && maxiter==0)
                break;
        }
    }
    printf("%d %d\n", x, y);
    return 0;
}