#include<iostream>
#include<fstream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<string>
#include<queue>
#include<cstdlib>
#include<ctime>
#define in cin
#define out cout
using namespace std;
typedef long long ll;
const int Nmax = 500001;
struct vals{
    int x,ind;
} v[Nmax];
struct per{
    int val;
    per *st,*dr;
};
per *R[Nmax];
struct cmp{
    inline bool operator () (const vals &a,const vals &b) const {
        return a.x<b.x;
    }
};
int N,aa[Nmax],ans[Nmax],wh[Nmax];
int inv[Nmax],u[2][Nmax];
int m=-1,ax,ay;
per* build(int st,int dr){
    per *u=new per();
    u->val=0;
    if(st < dr){
        int mij=(st+dr)/2;
        u->st=build(st,mij);
        u->dr=build(mij+1,dr);
    }
    return u;
}
per* update(per* t,int st,int dr,int wh){
    per *u=new per();
    u->val=t->val+1;
    if(st < dr){
        int mij=(st+dr)/2;
        if(wh<=mij){
            u->st=update(t->st,st,mij,wh);
            u->dr=t->dr;
        }
        else{
            u->st=t->st;
            u->dr=update(t->dr,mij+1,dr,wh);
        }
    }
    return u;
}
int query(per *t,int st,int dr,int a,int b){
    if(a<=st && dr<=b) return t->val;
    else{
        int mij=(st+dr)/2;
        if(b<=mij) return query(t->st,st,mij,a,b);
        else if(a>mij) return query(t->dr,mij+1,dr,a,b);
        else{
            int a1 = query(t->st,st,mij,a,mij);
            int a2 = query(t->dr,mij+1,dr,mij+1,b);
            return a1+a2;
        }
    }
}
int value(int i,int j){
    if(i>j) swap(i,j);
    if(i==j) return -1;
    if(aa[i]<aa[j]) return -1;
    int a1 = query(R[aa[i]],1,N,i,j);
    int a2 = query(R[aa[j]],1,N,i,j);
    return a1-a2;
}
void check(int i,int j){
    if(i>j) swap(i,j);
    if(aa[i]>aa[j]){
        int g=value(i,j);
        if(g>m) m=g,ax=i,ay=j;
        else if(g==m){
            if(i<ax) ax=i,ay=j;
            else if(i==ax && j<ay) ax=i,ay=j;
        }
    }
}
void tr(int st,int dr,int a,int b){
    int mij=(st+dr)/2;
    int be=-2,bei;
    for(int i=a;i<=b;i++){
        int g=value(mij,wh[i]);
        if(g>be) be=g,bei=i;
    }
    ans[mij]=bei;
    if(st<dr){
        tr(st,mij,a,ans[mij]);
        tr(mij+1,dr,ans[mij],b);
    }
}
int main(){
    in>>N;
    int co=1;
    for(int i=1;i<=N;i++){
        in>>aa[i];
        if(aa[i]!=i) co=0;
        v[i].x=aa[i],v[i].ind=i;
        wh[v[i].x]=i;
    }
    if(co){out<<"Cool Array\n";return 0;}
    sort(v+1,v+N+1,cmp());
    R[0]=build(1,N);
    for(int i=1;i<=N;i++){
        R[i]=update(R[i-1],1,N,v[i].ind);
        inv[ v[i].ind ] = v[i].ind - query(R[i],1,N,1,v[i].ind);
    }
    int maxx=0,minn=Nmax+2;
    for(int i=1;i<=N;i++){
        maxx=max(maxx,inv[i]);
        minn=min(minn,inv[i]);
    }
    for(int i=1;i<=N;i++){
        if(inv[i]==maxx) u[0][++u[0][0]]=i;
        if(inv[i]==minn) u[1][++u[1][0]]=i;
    }
    for(int i=1;i<=u[0][0];i++){
        for(int j=1;j<=u[1][0];j++){
            check(u[0][i],u[1][j]);
        }
    }
    out<<ax<<' '<<ay<<'\n';
    return 0;
}