#include <stdio.h>

static long cnt=0;

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

void shellSort(long *A, long n){
  long G[100];
  long g,m,i;
  for(g=1,m=0; (g<n) && (m<100); g+=3,m++)
    G[m]=g;
  cnt=0;
  for(i=m-1;i>=0;i--)
    insertionSort(A,n,G[i]);
  printf("%ld\n",m);
  for(i=m-1; i>0; i--)
    printf("%ld ", G[i]);
  printf("%ld\n",G[0]);
  printf("%ld\n",cnt);
}

int main(void){
  long N,n;
  long A[1000000];
  scanf("%ld\n",&N);
  for(n=0;n<N;n++)
    scanf("%ld\n",&A[n]);
  shellSort(A,n);
  for(n=0;n<N;n++)
    printf("%ld\n",A[n]);
  return 0;
}