n soldiers stand in a circle. For each soldier his height ai is known. A reconnaissance unit can be made of such two neighbouring soldiers, whose heights difference is minimal, i.e. |ai - aj| is minimal. So each of them will be less noticeable with the other. Output any pair of soldiers that can form a reconnaissance unit.

Input

The first line contains integer n (2 ≤ n ≤ 100) — amount of soldiers. Then follow the heights of the soldiers in their order in the circle — n space-separated integers a1, a2, ..., an (1 ≤ ai ≤ 1000). The soldier heights are given in clockwise or counterclockwise direction.

Output

Output two integers — indexes of neighbouring soldiers, who should form a reconnaissance unit. If there are many optimum solutions, output any of them. Remember, that the soldiers stand in a circle.

Examples

Input

5
10 12 13 15 10


Output

5 1


Input

4
10 20 30 40


Output

1 2
#include <bits/stdc++.h>
using namespace std;
template <class T>
T pwr(T b, T p) {
  T r = 1, x = b;
  while (p) {
    if (p & 1) r *= x;
    x *= x;
    p = (p >> 1);
  }
  return r;
}
template <class T>
T lcm(T a, T b) {
  return (a / __gcd(a, b)) * b;
}
template <class T>
T sqr(T a) {
  return a * a;
}
template <class T>
void xswap(T &x, T &y) {
  if (x != y) {
    x ^= y;
    y ^= x;
    x ^= y;
  }
}
template <typename T>
inline bool isOn(T &mask, int pos) {
  return ((mask) & (1LL << pos));
}
template <typename T>
inline T setf(T mask, int pos) {
  return mask = ((mask) & (~(1LL << pos)));
}
template <typename T>
inline T sett(T mask, int pos) {
  return mask = ((mask)(1LL << pos));
}
template <typename T>
inline T flip(T mask, int pos) {
  return mask = ((mask) ^ (1LL << pos));
}
template <class T>
string to_string(T n) {
  ostringstream oss;
  oss << n;
  oss.flush();
  return oss.str();
}
int to_int(string s) {
  int r = 0;
  istringstream sin(s);
  sin >> r;
  return r;
}
template <class T1>
void put(T1 e) {
  cout << e << endl;
}
template <class T1, class T2>
void put(T1 e1, T2 e2) {
  cout << e1 << " " << e2 << endl;
}
template <class T1, class T2, class T3>
void put(T1 e1, T2 e2, T3 e3) {
  cout << e1 << " " << e2 << " " << e3 << endl;
}
template <class T1, class T2, class T3, class T4>
void put(T1 e1, T2 e2, T3 e3, T4 e4) {
  cout << e1 << " " << e2 << " " << e3 << " " << e4 << endl;
}
template <class T1, class T2, class T3, class T4, class T5>
void put(T1 e1, T2 e2, T3 e3, T4 e4, T5 e5) {
  cout << e1 << " " << e2 << " " << e3 << " " << e4 << " " << e5 << endl;
}
template <class T1>
void putv(vector<T1> e1) {
  for (int i = 0; i < e1.size(); i++)
    (!i ? cout << e1[i] : cout << " " << e1[i]);
  cout << endl;
}
template <class T1>
void puta(T1 arr[], int l) {
  for (int i = 0; i < l; i++) (!i ? cout << arr[i] : cout << " " << arr[i]);
  cout << endl;
}
template <class T1>
bool tk(T1 &e1) {
  return (cin >> e1 ? true : false);
}
template <class T1, class T2>
bool tk(T1 &e1, T2 &e2) {
  return (cin >> e1 >> e2 ? true : false);
}
template <class T1, class T2, class T3>
bool tk(T1 &e1, T2 &e2, T3 &e3) {
  return (cin >> e1 >> e2 >> e3 ? true : false);
}
template <class T1, class T2, class T3, class T4>
bool tk(T1 &e1, T2 &e2, T3 &e3, T4 &e4) {
  return (cin >> e1 >> e2 >> e3 >> e4 ? true : false);
}
int main() {
  int n, i, j, x, y, min;
  int a[101];
  while (scanf("%d", &n) == 1) {
    for (i = 0; i < n; i++) {
      scanf("%d", &a[i]);
    }
    min = 10001;
    for (i = 0; i < n - 1; i++) {
      if (abs(a[i + 1] - a[i]) < min) {
        min = abs(a[i + 1] - a[i]);
        x = i + 1;
        y = i;
      }
    }
    if (abs(a[n - 1] - a[0]) < min) {
      min = abs(a[n - 1] - a[0]);
      x = n - 1;
      y = 0;
    }
    printf("%d %d\n", x + 1, y + 1);
  }
  return 0;
}
