#include <bits/stdc++.h>
#define rf freopen("inp.in","r",stdin)
#define  F first
#define  S second
#define PII pair<int,int>
#define MAX 500005

using namespace std;

inline int scan(){
	int x = 0;
	char c = getchar();
	while(c < '0' || c > '9'){
		c = getchar();
	}
	while(c >= '0' && c <= '9'){
		x = x * 10 + c - '0';
		c = getchar();
	}
	return x;
}

int N , ARR[MAX];

//Persistent Segment Tree Template :: Anudeep
struct node{
        int SUM;
        node* LEFT_CHILD;
        node* RIGHT_CHILD;
        node(int _SUM , node* _LEFT_CHILD , node* _RIGHT_CHILD){
            SUM = _SUM;
            LEFT_CHILD = _LEFT_CHILD;
            RIGHT_CHILD = _RIGHT_CHILD;
        }
        node(){
        	SUM = 0;
        	LEFT_CHILD = NULL;
        	RIGHT_CHILD = NULL;
        }
        node* upd(int l , int r , int val);
};

node* null;
node* ROOT[MAX];

node* node::upd(int l , int r , int val){
    if(l == r) return new node(1 , null , null);
    int mid = (l + r)/2;
    if(val <= mid) return new node(SUM + 1 , LEFT_CHILD -> upd(l , mid , val) , RIGHT_CHILD);
    else return new node(SUM + 1 , LEFT_CHILD , RIGHT_CHILD -> upd(mid + 1 , r , val));
}

void upd(int pos , int val){
        ROOT[pos] = ROOT[pos + 1] -> upd(1 , N , val);
}

int less_query(int qs , int qe , int val){
    int SUM = 0;
    int l = 1 , r = N;
    node* ll = ROOT[qs]; node* rr = ROOT[qe + 1];
    while(l < r){
         int mid = l + r >> 1;
         if(val <= mid){
             r = mid;
             ll = ll -> LEFT_CHILD;
             rr = rr -> LEFT_CHILD;
         }
         else{
             SUM += ll -> LEFT_CHILD -> SUM - rr -> LEFT_CHILD -> SUM;
             l = mid + 1;
             ll = ll -> RIGHT_CHILD;
             rr = rr -> RIGHT_CHILD;
         }
     }
   return SUM;
}

int MIS[MAX]; // Each suffix of minimum elements
bool OK = 1;
int IDX1 = -1 , IDX2 = -1 , ANS = 0;

int main(){
	
	//rf;

    null = new node();
    null -> LEFT_CHILD = null -> RIGHT_CHILD = null;
    
    N = scan();
    ROOT[N + 1] = null;
    
    for(int i = 1 ; i <= N ; ++i) ARR[i] = scan();
    
    for(int i = 1 ; i <= N ; ++i){
        if(ARR[i] != i){
            OK = 0;
            break;
        }
    }

    if(OK) cout << "Cool Array\n";
   
    else{

        MIS[N] = N;
        int cnt_move = 9876 , chk = 10;
        
        for(int i = N - 1 ; i >= 1 ; --i){
            MIS[i] = MIS[i + 1];
            if(ARR[i] < ARR[MIS[i]])
                MIS[i] = i;
        }

        for(int i = N ; i >= 1 ; --i)
            upd(i , ARR[i]);
        
        for(int i = 1 ; i < N ; ++i){
            
            int indices = i;
            int moves = 0;
            
            while(indices <= N){
                ++moves;
                
                if(moves >= chk && moves >= cnt_move){
                    cnt_move -= 200;
                    break;
                }

                indices = MIS[indices];
                
                if(ARR[indices] < ARR[i]){
                    int lol = 1 + less_query(i , indices - 1 , ARR[i]) - 
                                  less_query(i , indices - 1 , ARR[indices]);
                    if(lol > ANS){
                        ANS = lol;
                        IDX1 = i;
                        IDX2 = indices;
                    }
                }

                ++indices;

            }
        }

        cout << IDX1 << " " << IDX2;
    }
}