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
import java.io.*;
import java.util.Arrays;
import java.util.StringTokenizer;

public class G {
    String filename = null;
    final long INF = 1_000_000_000_000_000L;
    int gcd(int a, int b){
        return a == 0 ? b : a%b;
    }
    void solve(){
        int n = readInt();
        int[] a = new int[n];
        int max = 0;

        for(int i = 0;i<n;i++){
            a[i] = readInt();
            max = Math.max(max, a[i]);

        }
        int[] count = new int[max + 1];
        for(int i = 0;i<n;i++){
            count[a[i]]++;
        }
        long min = INF;
        int[] ans = { -1, -1 };
int[] q = new int[2];
        for(int d = 1;d<=max;d++){
            int c = 0;
            for(int i = d;i<=max &&  c<2;i+=d){
                int x = count[i];
                while(x --> 0 && c < 2) q[c++] = i;
            }
            if(c < 2) continue;
            long x = q[0] * (long) q[1] / d;
            if(min > x){
                min = x;
                ans[0] = q[0];
ans[1] = q[1];
            }
        }

        int c = 0;
        int[] res = new int[2];
        for(int i = 0;i<n && c<2;i++){
            if(ans[0] == a[i] || ans[1] == a[i]) res[c++] = i + 1;
        }
        Arrays.sort(res);
        out.print(res[0] + " " + res[1]);
    }
    public static void main(String[] args) {
        new G().run();
    }
    private void run() {
        try {
            init();
            solve();
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
            System.exit(-1);
        }
    }

    private BufferedReader in;
    private StringTokenizer tok = new StringTokenizer("");

    private PrintWriter out;

    private void init() {
        if (filename == null) {
            in = new BufferedReader(new InputStreamReader(System.in));
            out = new PrintWriter(System.out);
            return;
        }

        try {
            in = new BufferedReader(new FileReader(new File(filename)));
            out = new PrintWriter(new File(filename));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

    }
    private String readLine() {
        try {
            return in.readLine();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    private String readString() {
        while (!tok.hasMoreTokens()) {
            String nextLine = readLine();
            if (nextLine == null) return null;
            tok = new StringTokenizer(nextLine);
        }

        return tok.nextToken();
    }

    private int readInt() {
        return Integer.parseInt(readString());
    }

    private long readLong() {
        return Long.parseLong(readString());
    }
}