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.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.io.PrintWriter;
public class D359 
{
    static class Scanner
    {
        BufferedReader br;
        StringTokenizer tk=new StringTokenizer("");
        public Scanner(InputStream is) 
        {
            br=new BufferedReader(new InputStreamReader(is));
        }
        public int nextInt() throws IOException
        {
            if(tk.hasMoreTokens())
                return Integer.parseInt(tk.nextToken());
            tk=new StringTokenizer(br.readLine());
            return nextInt();
        }
        public long nextLong() throws IOException
        {
            if(tk.hasMoreTokens())
                return Long.parseLong(tk.nextToken());
            tk=new StringTokenizer(br.readLine());
            return nextLong();
        }
        public String next() throws IOException
        {
            if(tk.hasMoreTokens())
                return (tk.nextToken());
            tk=new StringTokenizer(br.readLine());
            return next();
        }
        public String nextLine() throws IOException
        {
            tk=new StringTokenizer("");
            return br.readLine();
        }
        public double nextDouble() throws IOException
        {
            if(tk.hasMoreTokens())
                return Double.parseDouble(tk.nextToken());
            tk=new StringTokenizer(br.readLine());
            return nextDouble();
        }
        public char nextChar() throws IOException
        {
            if(tk.hasMoreTokens())
                return (tk.nextToken().charAt(0));
            tk=new StringTokenizer(br.readLine());
            return nextChar();
        }
        public int[] nextIntArray(int n) throws IOException
        {
            int a[]=new int[n];
            for(int i=0;i<n;i++)
                a[i]=nextInt();
            return a;
        }
        public long[] nextLongArray(int n) throws IOException
        {
            long a[]=new long[n];
            for(int i=0;i<n;i++)
                a[i]=nextLong();
            return a;
        }
        public int[] nextIntArrayOneBased(int n) throws IOException
        {
            int a[]=new int[n+1];
            for(int i=1;i<=n;i++)
                a[i]=nextInt();
            return a;
        }
        public long[] nextLongArrayOneBased(int n) throws IOException
        {
            long a[]=new long[n+1];
            for(int i=1;i<=n;i++)
                a[i]=nextLong();
            return a;
        }
    
    
    }
    static abstract class SparseTable
    {
        int n,lg,t[][],dfv;
        SparseTable(int a[],int log,int dv)
        {
            dfv=dv;
            n=a.length-1;
            t=new int[n+1][log];
            lg=log;
            for(int i=1;i<=n;i++)
                t[i][0]=a[i];
            int p2=2;
            for(int i=1;i<log;i++)
            {
                for(int j=1;j+p2-1<=n;j++)
                {
                    t[j][i]=f(t[j][i-1],t[j+(p2>>1)][i-1]);
                }
                p2*=2;
            }
        }
        abstract int f(int a,int b);
        int query(int l,int r)
        {
            int ans=dfv;
            for(int i=lg-1;i>=0;i--)
            {
                if(l+(1<<i)-1<=r)
                {
                    ans=f(ans,t[l][i]);
                    l=l+(1<<i);
                }
            }
            if(l==r)
                ans=f(ans,t[l][0]);
            return ans;
        }
    }
    public static void main(String args[]) throws IOException
    {
        Scanner in=new Scanner(System.in);
        PrintWriter out=new PrintWriter(System.out);
        int n=in.nextInt();
        int a[]=in.nextIntArrayOneBased(n);
        SparseTable min=new SparseTable(a,19,Integer.MAX_VALUE) {
            @Override
            int f(int a, int b) 
            {
                return Math.min(a,b);                
            }
        };
        SparseTable gcd=new SparseTable(a,19,0) {
            @Override
            int f(int a, int b) 
            {
                if(b==0)
                    return a;
                return f(b,a%b);
            }
        };
        int ans[]=new int[n+1];
        
        int lo=0,hi=n-1;
        while(lo<=hi)
        {
            int mid=(lo+hi)/2;
            boolean d=false;
            for(int i=1;i+mid<=n;i++)
            {
                if(min.query(i, i+mid)==gcd.query(i, i+mid))
                {
                    d=true;
                    ans[i]=mid;
                }
            }
            if(d)
            {
                lo=mid+1;
            }
            else
                hi=mid-1;
        }
        int max=0,cnt=0;
        for(int i=1;i<=n;i++)
        {
            if(ans[i]>max)
            {
                max=ans[i];
                cnt=1;
            }
            else if(max==ans[i])
                cnt++;
        }
        out.println(cnt+" "+max);
        for(int i=1;i<=n;i++)
            if(ans[i]==max)
                out.print(i+" ");
        out.println();
                    
            
        out.close();
    }

}
