#include<stdio.h>

void insertionSort(int A[] , int n , int g);
int cnt=0;

int main(){

  int A[101],G[101],n,m,i,j,v,g;

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

  m=n/2;
  G[m-1]=1;

  for(i=m-2;i>=0;i--){
    G[i]=3*G[i+1]+1;
  }

  for(i=0;i<m;i++)
    insertionSort(A,n,G[i]);

  printf("%d\n",m);

  for(i=0;i<m-1;i++)
    printf("%d ",G[i]);
  
  printf("%d\n%d\n",G[i],cnt);

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

  return 0;
}


void insertionSort(int A[] , int n , int g){

  int i,j,v;

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