#include<stdio.h>
int insertion(int *A,int n,int g)
{
	int i,j,k,v,cnt=0;
	for(i=g;i<n;i++)
	{
		v=A[i];
		j=i-g;
		while(i>=0&&A[j]>v)
		{
			A[j+g]=A[j];
			j=j-g;
			cnt++;
		}
		A[j+g]=v;
	}
	return cnt;
}

int main(void)
{
	int i,n;
	int A[1000000]={};
	int j,g,cnt=0,m=1;
	int G[100]={1};
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&A[i]);
	}

	for(j=0;j<100&&G[j]<n;j++){G[j+1]=3*G[j]+1;m=j+1;}
	printf("\n%d\n",m);
	for(j=0;j<m;j++)
	{
		g=G[(m-1)-j];
//		if(j>0){printf(" ");}
		printf("%d ",g);
		cnt+=insertion(A,n,g);
	}
	printf("\n%d\n",cnt);
	for(i=0;i<n;i++){printf("%d\n",A[i]);}

	return 0;
}