#include <bits/stdc++.h>
using namespace std;
deque<int> L;
int shift_cnt = 0, n;
void rshift() {
  shift_cnt++;
  shift_cnt %= n;
  int g = L.front();
  L.pop_front();
  L.push_back(g);
}
void lshift() {
  shift_cnt += (n - 1);
  shift_cnt %= n;
  int g = L.back();
  L.pop_back();
  L.push_front(g);
}
int rev[212121];
struct NODE {
  int l, r, p;
} node[1212121];
int node_n;
int mxdepth;
int dfs(NODE now, int depth) {
  return max(now.l == -1 ? depth : dfs(node[now.l], depth + 1),
             now.r == -1 ? depth : dfs(node[now.r], depth + 1));
}
pair<int, int> build() {
  for (int i = 0; i < n; i++) {
    rev[L[i]] = i;
  }
  set<pair<int, pair<int, int>>> S;
  node_n = 1;
  node[1] = {-1, -1, -1};
  S.insert({n - 1, {0, node_n}});
  int root;
  for (int i = 1; i <= n; i++) {
    auto W = S.lower_bound({rev[i], {-1, -1}});
    auto v = *W;
    S.erase(W);
    int l = v.second.first, r = v.first, w = v.second.second;
    node_n++;
    int now = node_n;
    node[now] = {-1, -1, node[w].p};
    if (i == 1)
      root = now;
    else {
      if (node[node[w].p].l == w)
        node[node[w].p].l = now;
      else
        node[node[w].p].r = now;
    }
    if (l <= rev[i] - 1) {
      node_n++;
      node[now].l = node_n;
      node[node_n] = {-1, -1, now};
      S.insert({rev[i] - 1, {l, node_n}});
    }
    if (rev[i] + 1 <= r) {
      node_n++;
      node[now].r = node_n;
      node[node_n] = {-1, -1, now};
      S.insert({r, {rev[i] + 1, node_n}});
    }
  }
  int ldepth = node[root].l == -1 ? 0 : dfs(node[node[root].l], 1);
  int rdepth = node[root].r == -1 ? 0 : dfs(node[node[root].r], 1);
  return {ldepth + 1, rdepth + 1};
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    int x;
    scanf("%d", &x);
    L.push_back(x);
  }
  while (L.front() != 1) rshift();
  int bef = 0;
  int s = 0, e = n;
  int ans = 1e9, answ;
  while (s <= e) {
    int m = (s + e) / 2;
    while (bef < m) rshift(), bef++;
    while (m < bef) lshift(), bef--;
    auto v = build();
    if (ans > max(v.first, v.second)) {
      ans = max(v.first, v.second);
      answ = shift_cnt;
    }
    if (v.first == v.second) {
      break;
    }
    if (v.first < v.second)
      e = m - 1;
    else
      s = m + 1;
  }
  printf("%d %d\n", ans, answ);
  return 0;
}
