#include<stdio.h>

int insertionSort(int *,int ,int);
void shellSort(int *,int);

int main()
{
  int n,i,A[1000000];

  scanf("%d",&n);

  for(i=0;i<n;i++)
    {
      scanf("%d",&A[i]);
    }

  shellSort(A,n);
  
  for(i=0;i<n;i++)
    {
      printf("%d\n",A[i]);
    }

  return 0;
}
  int insertionSort(int *A,int n,int g)
  {
    int i,j,v,cnt=0;
    for(i=g;i<n;i++)
      {
	v=A[i];
	j=i-g;
	while(i>=0 && A[j]>v)
	  {
	    A[j+g]=A[j];
	    j=j-g;
	    cnt++;
	  }
	A[j+g]=v;
      }
    return cnt;
      }

  void shellSort(int *A,int n)
  {
    int cnt=0,m=0,G[n],i;

    
    for(i=1;;i++)
      {	
	m++;
	G[i+1]=3*G[i]+1;
	if(G[i]>n)break;
      }
    printf("%d\n",m);
        for(i=m-1;i>=0;i--)
      {
	if(G[i]==0)break;
	printf("%d ",G[i]);
	cnt=insertionSort(A,n,G[i]);
      }
    printf("\n");
    printf("%d",cnt);
    printf("\n");

  }