#include <bits/stdc++.h>
using namespace std;
long long lazy[800010], segtree[800010];
void lazy_update(long long loc, bool nochild) {
  if (lazy[loc]) {
    segtree[loc] += lazy[loc];
    if (!nochild) {
      lazy[2 * loc] += lazy[loc];
      lazy[2 * loc + 1] += lazy[loc];
    }
    lazy[loc] = 0;
  }
}
void update(long long loc, long long st, long long en, long long l, long long r,
            long long delta) {
  lazy_update(loc, st == en);
  if (st > r || en < l)
    return;
  else if (st >= l && en <= r) {
    lazy[loc] += delta;
    lazy_update(loc, st == en);
    return;
  }
  long long mid = (st + en) >> 1;
  update(2 * loc, st, mid, l, r, delta);
  update(2 * loc + 1, mid + 1, en, l, r, delta);
  segtree[loc] = max(segtree[2 * loc], segtree[2 * loc + 1]);
}
long long query(long long loc, long long st, long long en, long long idx) {
  lazy_update(loc, st == en);
  if (en < idx || st > idx) return 0;
  if (st == en && en == idx) return segtree[loc];
  long long mid = (st + en) / 2;
  if (mid >= idx)
    return query(2 * loc, st, mid, idx);
  else
    return query(2 * loc + 1, mid + 1, en, idx);
}
long long n;
void upd(long long l, long long r, long long delta) {
  if (r < l) {
    update(1, 0, n - 1, l, n - 1, delta);
    update(1, 0, n - 1, 0, r, delta);
  } else {
    update(1, 0, n - 1, l, r, delta);
  }
}
int32_t main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cin >> n;
  vector<long long> v(n), idx(n + 1), l(n), r(n);
  for (long long i = 0; i < n; i++) {
    cin >> v[i];
    idx[v[i]] = i;
  }
  set<long long> s;
  for (long long i = 1; i <= n; i++) {
    s.insert(idx[i]);
    auto it = s.find(idx[i]);
    r[idx[i]] = (next(it) == s.end()) ? *s.begin() : *next(it);
    l[idx[i]] = ((it) == s.begin()) ? *s.rbegin() : *prev(it);
    long long depth = 0;
    if (l[idx[i]] < idx[i]) depth = query(1, 0, n - 1, l[idx[i]]);
    if (r[idx[i]] > idx[i]) depth = max(depth, query(1, 0, n - 1, r[idx[i]]));
    depth++;
    update(1, 0, n - 1, idx[i], idx[i], depth);
    l[idx[i]]++;
    if (l[idx[i]] == n) l[idx[i]] = 0;
    r[idx[i]]--;
    if (r[idx[i]] == -1) r[idx[i]] = n - 1;
  }
  long long mina = n, minidx = 0;
  for (long long i = 0; i < n; i++) {
    if (segtree[1] < mina) {
      mina = segtree[1];
      minidx = i;
    }
    long long delta = query(1, 0, n - 1, (n + l[i] - 1) % n) -
                      query(1, 0, n - 1, (r[i] + 1) % n);
    upd(i, r[i], -1);
    upd(l[i], i, 1);
    upd(i, i, delta);
  }
  cout << mina << " " << minidx;
  return 0;
}
