#include <stdio.h>
#include <stdlib.h>

#define MAX 100000

void insertion(int *A,int N,int g){

  int i;
  int j;
  int cnt = 0;
  int temp;

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

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

}

void shell(int *A,int N){

  int i;
  int cnt = 0;
  int m = N/2; //
  int G[m]; //

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

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


  for(i = 0;i < m;i++){
    insertion(A,N,G[i]);
  }
}

int main(){

  int i;
  int A[MAX];
  int N;

  scanf("%d",&N);

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

  shell(A,N);

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

  return 0;
}