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.*;
import java.math.*;
import java.util.*;

import static java.util.Arrays.fill;
import static java.lang.Math.*;
import static java.util.Arrays.sort;
import static java.util.Collections.sort;


public class D359_ST 
{

	public static int mod = 1000000007;
	public static long INF = (1L << 60);
	static FastScanner2 in = new FastScanner2();
	static OutputWriter out = new OutputWriter(System.out);
 
	public static int gcd(int a,int b)
	{
		if(b==0)
			return a;
		else
			return gcd(b, a%b);
	}
	
	public static int ceillog(int a)
	{
		int mul=1;
		int ans=0;
		while(mul<=a)
			{
			mul*=2;
			ans++;
			}
		return (ans-1);
	}
	static int[][] sparse_table;
	static int[][] mintable;
	static int n;
	public static int querysparcetable(int l,int r)
	{
		int len=r-l+1;
		int log=ceillog(len);
		int ans=gcd(sparse_table[l][log], sparse_table[r-(1<<log)+1][log]);
		return ans;
	}
	
	public static int querymintable(int l,int r)
	{
		int len=r-l+1;
		int log=ceillog(len);
		int ans=min(mintable[l][log], mintable[r-(1<<log)+1][log]);
		return ans;
	}
	
	
	public static void main(String[] args) 
	{

		 n=in.nextInt();
		int[] a=new int[n];
		for(int i=0;i<n;i++)
		{
			a[i]=in.nextInt();
		}
		sparse_table=new int[n][20];
		mintable=new int[n][20];
		for(int i=0;i<n;i++)
		{
			sparse_table[i][0]=a[i];
			mintable[i][0]=a[i];
		}
		for(int j=1;j<20;j++)
		{
			for(int i=0;i<n;i++)
			{
				if((i+(1<<(j-1)))<n)
				{
					sparse_table[i][j]=gcd(sparse_table[i][j-1], sparse_table[i+(1<<(j-1))][j-1]);
					mintable[i][j]=min(mintable[i][j-1], mintable[i+(1<<(j-1))][j-1]);
				}
			
			}
		}
		
		int left=1;
		int right=n;
		int ans=0;
		while(left<=right)
		{
			int mid=(left+right)/2;
			boolean ok=false;
			for(int i=0;i+mid-1<n && !ok;i++)
			{
				int squery=querysparcetable(i, i+mid-1);
				int mquery=querymintable(i, i+mid-1);
				if(squery==mquery)
					ok=true;
			}
			if(ok)
			{
				ans=mid;
				left=mid+1;
			}
			else
			{
				right=mid-1;
			}
		}
		ArrayList<Integer> list=new ArrayList<>();
		for(int i=0;i<n;i++)
		{
			if(i+ans-1>=n)
				continue;
			if(querysparcetable(i, i+ans-1)==querymintable(i, i+ans-1))
				list.add(i+1);
		}
		out.print(list.size()+" "+(ans-1));
		out.println();
		for(int i : list)
			out.print(i+" ");
		out.close();

	}
	

	static class FastScanner2 
	{
		private byte[] buf = new byte[1024];
		private int curChar;
		private int snumChars;

		public int read() 
		{
			if (snumChars == -1)
				throw new InputMismatchException();
			if (curChar >= snumChars) 
			{
				curChar = 0;
				try 
				{
					snumChars = System.in.read(buf);
				} catch (IOException e) 
				{
					throw new InputMismatchException();
				}
				if (snumChars <= 0)
					return -1;
			}
			return buf[curChar++];
		}

		public String nextLine() 
		{
			int c = read();
			while (isSpaceChar(c))
				c = read();
			StringBuilder res = new StringBuilder();
			do 
			{
				res.appendCodePoint(c);
				c = read();
			} 
			while (!isEndOfLine(c));
			return res.toString();
		}

		public String nextString() 
		{
			int c = read();
			while (isSpaceChar(c))
				c = read();
			StringBuilder res = new StringBuilder();
			do 
			{
				res.appendCodePoint(c);
				c = read();
			} 
			while (!isSpaceChar(c));
			return res.toString();
		}

		public long nextLong()
		{
			int c = read();
			while (isSpaceChar(c))
				c = read();
			int sgn = 1;
			if (c == '-') {
				sgn = -1;
				c = read();
			}
			long res = 0;
			do 
			{
				if (c < '0' || c > '9')
					throw new InputMismatchException();
				res *= 10;
				res += c - '0';
				c = read();
			} 
			while (!isSpaceChar(c));
			return res * sgn;
		}

		public int nextInt() 
		{
			int c = read();
			while (isSpaceChar(c))
				c = read();
			int sgn = 1;
			if (c == '-') {
				sgn = -1;
				c = read();
			}
			int res = 0;
			do 
			{
				if (c < '0' || c > '9')
					throw new InputMismatchException();
				res *= 10;
				res += c - '0';
				c = read();
			} 
			while (!isSpaceChar(c));
			return res * sgn;
		}

		public int[] nextIntArray(int n)
		{
			int[] arr = new int[n];
			for (int i = 0; i < n; i++) 
			{
				arr[i] = nextInt();
			}
			return arr;
		}

		public long[] nextLongArray(int n)
		{
			long[] arr = new long[n];
			for (int i = 0; i < n; i++) 
			{
				arr[i] = nextLong();
			}
			return arr;
		}

		private boolean isSpaceChar(int c)
		{
			return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
		}

		private boolean isEndOfLine(int c) 
		{
			return c == '\n' || c == '\r' || c == -1;
		}
	}


	static class OutputWriter 
	{
		private final PrintWriter writer;

		public OutputWriter(OutputStream outputStream) 
		{
			writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(outputStream)));
		}

		public OutputWriter(Writer writer)
		{
			this.writer = new PrintWriter(writer);
		}

		public void print(Object... objects)
		{
			for (int i = 0; i < objects.length; i++) 
			{
				if (i != 0)
					writer.print(' ');
				writer.print(objects[i]);
			}
		}

		public void println(Object... objects)
		{
			print(objects);
			writer.println();
		}

		public void close() 
		{
			writer.close();
		}

		public void flush() 
		{
			writer.flush();
		}
	}
private static boolean oj = System.getProperty("ONLINE_JUDGE") != null;
	
	private static void debug(Object... o) 
	{
		if (!oj)
			System.out.println(Arrays.deepToString(o));
	}
	private static void tr(Object... o) 
	{
		if (!oj)
			System.out.println(Arrays.deepToString(o));
	}
}