#include <bits/stdc++.h>
using namespace std;
namespace SGT {
int maxn[1600000], addv[1600000];
inline void pushdown(int o) {
  if (addv[o]) {
    addv[o * 2] += addv[o];
    addv[o * 2 + 1] += addv[o];
    maxn[o * 2] += addv[o];
    maxn[o * 2 + 1] += addv[o];
    addv[o] = 0;
  }
}
inline void pushup(int o) { maxn[o] = max(maxn[o * 2], maxn[o * 2 + 1]); }
void update(int l, int r, int o, int lx, int rx, int p) {
  if (l >= lx && r <= rx) {
    addv[o] += p;
    maxn[o] += p;
  } else {
    pushdown(o);
    int m = ((l + r) >> 1);
    if (m >= lx) update(l, m, o * 2, lx, rx, p);
    if (m < rx) update(m + 1, r, o * 2 + 1, lx, rx, p);
    pushup(o);
  }
}
int query() { return maxn[1]; }
}  // namespace SGT
int num[400005];
int q[400005], r[400005];
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &num[i]);
    num[n + i] = num[i];
  }
  int lx = 1, rx = 0;
  for (int i = 2 * n; i > 0; i--) {
    while (rx && num[q[rx]] > num[i]) rx--;
    r[i] = q[rx] - 1;
    q[++rx] = i;
  }
  rx = 0;
  int minn = n, id = 0;
  for (int i = 1; i < 2 * n; i++) {
    while (lx <= rx && num[q[rx]] >= num[i]) rx--;
    while (lx <= rx && q[lx] <= i - n) lx++;
    if (i > n) {
      SGT::update(1, 2 * n, 1, i - n, i - n, -n);
      if (i - n < r[i - n]) SGT::update(1, 2 * n, 1, i - n + 1, r[i - n], -1);
    }
    if (lx <= rx) {
      if (q[rx] + 1 < i) SGT::update(1, 2 * n, 1, q[rx] + 1, i - 1, 1);
    } else if (i > 1)
      SGT::update(1, 2 * n, 1, max(1, i - n + 1), i - 1, 1);
    q[++rx] = i;
    SGT::update(1, 2 * n, 1, i, i, rx - lx + 1);
    if (i >= n) {
      int v = SGT::query();
      if (v < minn) {
        minn = v;
        id = i - n;
      }
    }
  }
  printf("%d %d\n", minn, id);
  return 0;
}
