#include <stdio.h>

int insertionsort(int *A,int n,int g){
	int i,j,cnt=0,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;
	}
	return cnt;
}

int shellsort(int *A,int n,int *g,int m){
	int i,cnt=0;
	for(i=m-1;i>=0;i--){
		cnt+=insertionsort(A,n,g[i]);
	}
	return cnt;
}

int main(){
	int i,n,m=0,A[100000],g[1000];

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

	g[0]=1;
	for(i=1;i<1000;i++){
		g[i]=3*g[i-1]+1;
		if(n<g[i]){
			m=i;
			break;
		}
	}

	int cnt=shellsort(A,n,g,m);

	printf("%d\n",m);
	for(i=m-1;i>=0;i--){
		printf("%d",g[i]);
		if(i!=0) printf(" ");
	}
	printf("\n%d\n",cnt);
	for(i=0;i<n;i++){
		printf("%d\n",A[i]);
	}

	return 0;
}