#include <iostream> #include <cstdio> #include <vector> #include <set> #include <queue> #include <string.h> #include <cstring> #include <algorithm> #include <cmath> #include <map> #include <limits> #include <stack> #include <bits/stdc++.h> using namespace std; int tree1[500008]; int tree2[500008]; long long maxi=500008; vector<int> v; long long ans1=0,ans2=0,a; void update(int idx,int val){ while(idx<=maxi){ tree1[idx]+=val; idx+=(idx&-idx); } } int pos(int idx){ int sum=0; while(idx>0){ sum+=tree1[idx]; idx-=(idx&-idx); } return sum; } void update1(int idx,int val){ while(idx<=maxi){ tree2[idx]+=val; idx+=(idx&-idx); } } int pos1(int idx){ int sum=0; while(idx>0){ sum+=tree2[idx]; idx-=(idx&-idx); } return sum; } int main(int argc, char const *argv[]) { long long n; cin>>n; for(int i=0;i<n;i++){ cin>>a; v.push_back(a); } long long maxt=0; for(int i=v.size()-1;i>=0;i--){ if(pos(v[i])>=maxt){ maxt=pos(v[i]); ans1=i+1; //cout<<ans1<<" "<<endl;; } //cout<<pos(v[i])<<" 1"; update(v[i],1); } //cout<<endl; //cout<<maxt<<endl; int maxo=0; for(int i=0;i<v.size();i++){ if(pos1(n)-pos1(v[i])>maxo){ ans2=i+1; maxo=pos1(n)-pos1(v[i]); //cout<<ans2<<endl; } //cout<<pos1(n)-pos1(v[i]-1)<<" "; update1(v[i],1); } //cout<<maxt<<endl; if(maxo==0&&maxt==0){ cout<<"Cool Array"<<endl; } else cout<<ans1<<" "<<ans2<<endl; return 0; }