Simon has an array a1, a2, ..., an, consisting of n positive integers. Today Simon asked you to find a pair of integers l, r (1 ≤ l ≤ r ≤ n), such that the following conditions hold:

  1. there is integer j (l ≤ j ≤ r), such that all integers al, al + 1, ..., ar are divisible by aj; 
  2. value r - l takes the maximum value among all pairs for which condition 1 is true; 



Help Simon, find the required pair of numbers (l, r). If there are multiple required pairs find all of them.

Input

The first line contains integer n (1 ≤ n ≤ 3·105).

The second line contains n space-separated integers a1, a2, ..., an (1 ≤ ai ≤ 106).

Output

Print two integers in the first line — the number of required pairs and the maximum value of r - l. On the following line print all l values from optimal pairs in increasing order.

Examples

Input

5
4 6 9 3 6


Output

1 3
2 


Input

5
1 3 5 7 9


Output

1 4
1 


Input

5
2 3 5 7 11


Output

5 0
1 2 3 4 5 

Note

In the first sample the pair of numbers is right, as numbers 6, 9, 3 are divisible by 3.

In the second sample all numbers are divisible by number 1.

In the third sample all numbers are prime, so conditions 1 and 2 are true only for pairs of numbers (1, 1), (2, 2), (3, 3), (4, 4), (5, 5).

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.StringTokenizer;

public class D {

	public static void main(String[] args) throws Exception {
		int n = nextInt();
		int[] ar = new int[n];
		for (int i = 0; i < n; i++) {
			ar[i] = nextInt();
		}
		int[] minLeft = new int[n];
		Arrays.fill(minLeft, -1);
		int[] maxRight = new int[n];
		Arrays.fill(maxRight, n);
		int maxLen = -1;
		ArrayList<Integer> pos = null;
		for (int i = 0; i < n; i++) {
			int k = i - 1;
			while (k >= 0 && ar[k] % ar[i] == 0) {
				k = minLeft[k];
			}
			minLeft[i] = Math.max(minLeft[i], k);
		}
		for (int i = n - 1; i >= 0; i--) {
			int k = i + 1;
			while (k < n && ar[k] % ar[i] == 0) {
				k = maxRight[k];
			}
			maxRight[i] = Math.min(maxRight[i], k);
			if (maxRight[i] - minLeft[i] - 2 > maxLen) {
				maxLen = maxRight[i] - minLeft[i] - 2;
				pos = new ArrayList<>();
				pos.add(minLeft[i] + 2);
			} else if (maxRight[i] - minLeft[i] - 2 == maxLen) {
				pos.add(minLeft[i] + 2);
			}
		}
		// System.out.println(Arrays.toString(maxLeft));
		// System.out.println(Arrays.toString(maxRight));
		StringBuffer bf=new StringBuffer();
		int prev = -1, cnt = 0;
		for (int i = pos.size() - 1; i >= 0; i--) {
			if (prev != pos.get(i)) {
				cnt++;
				bf.append(pos.get(i) + " ");
			}
			prev = pos.get(i);
		}
		System.out.println(cnt + " " + maxLen);
		System.out.println(bf);
	}

	static BufferedReader br = new BufferedReader(new InputStreamReader(
			System.in));
	static StringTokenizer tokenizer = new StringTokenizer("");

	static int nextInt() throws Exception {
		return Integer.parseInt(next());
	}

	static double nextDouble() throws Exception {
		return Double.parseDouble(next());
	}

	static String next() throws Exception {
		while (true) {
			if (tokenizer.hasMoreTokens()) {
				return tokenizer.nextToken();
			}
			String s = br.readLine();
			if (s == null) {
				return null;
			}
			tokenizer = new StringTokenizer(s);
		}
	}
}
