#include <bits/stdc++.h>
using namespace std;
template <typename Arg1>
void __f(const char* name, Arg1&& arg1) {
  cerr << name << " : " << arg1 << std::endl;
}
template <typename Arg1, typename... Args>
void __f(const char* names, Arg1&& arg1, Args&&... args) {
  const char* comma = strchr(names + 1, ',');
  cerr.write(names, comma - names) << " : " << arg1 << " | ";
  __f(comma + 1, args...);
}
void pre() {}
const int inf = numeric_limits<int>::max();
template <class T>
struct RMQ {
  vector<vector<T>> jmp;
  RMQ() {}
  RMQ(const vector<T>& V) {
    int N = (int)(V).size(), on = 1, depth = 1;
    while (on < (int)(V).size()) on *= 2, depth++;
    jmp.assign(depth, V);
    for (int i = 0; i < (depth - 1); ++i)
      for (int j = 0; j < (N); ++j)
        jmp[i + 1][j] = min(jmp[i][j], jmp[i][min(N - 1, j + (1 << i))]);
  }
  T query(int a, int b) {
    if (b <= a) return inf;
    int dep = 31 - __builtin_clz(b - a);
    return min(jmp[dep][a], jmp[dep][b - (1 << dep)]);
  }
};
RMQ<int> R;
vector<int> z;
int solve(int l, int r) {
  if (r - l <= 1) return r - l;
  int x = R.query(l, r);
  for (int i = 0; i < (r - l); ++i) {
    if (z[l + i] == x) {
      return 1 + max(solve(l, l + i), solve(l + i + 1, r));
    }
    if (z[r - 1 - i] == x) {
      return 1 + max(solve(l, r - 1 - i), solve(r - i, r));
    }
  }
}
int main() {
  cin.sync_with_stdio(0);
  cin.tie(0);
  cin.exceptions(cin.failbit);
  pre();
  int n;
  cin >> n;
  vector<int> v(2 * n);
  int ix = 0;
  for (int i = 0; i < (n); ++i) {
    cin >> v[i];
    if (v[i] == 1) ix = i;
    v[i + n] = v[i];
  }
  if (n == 1) {
    cout << 1 << ' ' << 0 << '\n';
    return 0;
  }
  z = vector<int>(v.begin() + ix + 1, v.begin() + ix + 1 + n - 1);
  R = RMQ<int>(z);
  int lo = 0, hi = (int)(z).size();
  while (lo < hi) {
    int m = (lo + hi) / 2;
    if (solve(0, m) >= solve(m, (int)(z).size())) {
      hi = m;
    } else
      lo = m + 1;
  }
  int ans = 1 + max(solve(0, lo), solve(lo, (int)(z).size()));
  int ansix = lo, lstns = ans;
  if (lo)
    ans = min(ans, 1 + max(solve(0, lo - 1), solve(lo - 1, (int)(z).size())));
  if (ans < lstns) ansix = lo - 1;
  cout << ans << ' ';
  for (int i = 0; i < (n); ++i) {
    if (v[i] == z[ansix % ((int)(z).size())]) {
      cout << i;
      return 0;
    }
  }
  return 0;
}
