#include<stdio.h>
#define M 100

int cnt;
int A[M];
int G[M];
int n;

void shellSort(int A[],int n);
void insertionSort(int A[], int n, int g);

int main(){
    int i;
    scanf("%d",&n);
    for(i=0;i<n;i++){
    scanf("%d",&A[i]);
    }
    cnt=0;
    
   // printf("%d\n",A[n-1]);
 shellSort(A,n);
    return 0;
}

    // insertion
    void insertionSort(int A[], int n, int g){
        // int v,i,j;
    for(int i=g;i<n;i++){
      int v=A[i];
      int j=i-g;
        while(j>=0 && A[j]>v){
            A[j+g]=A[j];
            j = j-g;
            cnt++;
            
        }
         //cnt=0;
            A[j+g]=v;
        }
     
    }
     //fin
    
    //sellSort
    void shellSort(int A[],int n){
        // G={1,4,13,40,121,....}生成
        cnt=0;
        int m,i;
        for(i=0;i<M;i++){
         G[i]=3*i+1;
            if(G[i]>n) break;
        }
                m=i;
            //insertionSort(A,n,G[i]);
    
    
    for(int i=0;i<m;++i){
        insertionSort(A,n,G[i]);
    }
        printf("%d\n",m);
        for(i=m;i>0;i--){
            //if( i ) printf(" ");
            printf("%d ",G[i]);
        }
        printf("\n%d\n",cnt);
        for(i=0;i<n;i++){
            printf("%d\n",A[i]);
    }
    
    }

