You are given an array a consisting of n integers a_1, a_2, ..., a_n.

Your problem is to find such pair of indices i, j (1 ≤ i < j ≤ n) that lcm(a_i, a_j) is minimum possible.

lcm(x, y) is the least common multiple of x and y (minimum positive number such that both x and y are divisors of this number).

Input

The first line of the input contains one integer n (2 ≤ n ≤ 10^6) — the number of elements in a.

The second line of the input contains n integers a_1, a_2, ..., a_n (1 ≤ a_i ≤ 10^7), where a_i is the i-th element of a.

Output

Print two integers i and j (1 ≤ i < j ≤ n) such that the value of lcm(a_i, a_j) is minimum among all valid pairs i, j. If there are multiple answers, you can print any.

Examples

Input


5
2 4 8 3 6


Output


1 2


Input


5
5 2 11 3 7


Output


2 4


Input


6
2 5 10 1 10 2


Output


1 4
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = long double;
const int N = 1e7;
vector<pair<int, int>> ve;
vector<pair<int, int>> idx(N + 1, make_pair(-1, -1));
int gpf[N + 5], ar[N + 5];
pair<int, int> ans;
void rec(int curIdx, int curDiv, const vector<pair<int, int>>& primes, int id) {
  if (curIdx == (int)primes.size()) {
    if (idx[curDiv].first == -1) {
      idx[curDiv].first = id;
    } else if (idx[curDiv].second == -1) {
      idx[curDiv].second = id;
    }
    return;
  }
  for (int i = 0; i <= primes[curIdx].first; i++) {
    rec(curIdx + 1, curDiv, primes, id);
    curDiv *= primes[curIdx].second;
  }
}
void add(int x, int id) {
  vector<pair<int, int>> pr;
  int temp = x;
  while (temp > 1) {
    int curPrime = gpf[temp];
    int cnt = 0;
    while (temp % curPrime == 0) {
      temp /= curPrime;
      cnt++;
    }
    pr.emplace_back(cnt, curPrime);
  }
  rec(0, 1, pr, id);
}
void sieve() {
  for (int i = 2; i <= N; i++) {
    if (gpf[i]) continue;
    for (int j = i; j <= N; j += i) {
      gpf[j] = i;
    }
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  sieve();
  int n;
  cin >> n;
  for (int i = 1; i <= n; i++) {
    int a;
    cin >> a;
    ve.emplace_back(a, i);
    ar[i] = a;
  }
  sort(ve.begin(), ve.end());
  for (int i = 0; i < n; i++) {
    add(ve[i].first, ve[i].second);
  }
  ll curMin = 1e18;
  for (int i = 1; i <= N; i++) {
    if (idx[i].first == -1 || idx[i].second == -1) continue;
    ll temp = 1LL * ar[idx[i].first] * ar[idx[i].second] / i;
    if (curMin >= temp) {
      curMin = temp;
      ans = idx[i];
    }
  }
  int ans1 = ans.first, ans2 = ans.second;
  if (ans1 > ans2) swap(ans1, ans2);
  cout << ans1 << ' ' << ans2 << '\n';
  return 0;
}
