#include<stdio.h>

int cnt=0,N,A[1000005],i,G[1000005],m=0;
void f(int g)
{
	int i,j,v;
	for(i=g;i<N;i++)
	{
		v=A[i];
		for(j=i-g;j>=0&&A[j]>v;j-=g)
		{
			A[j+g]=A[j];
			cnt++;
		}
		A[j+g]=v;
	}
}

int main()
{
	scanf("%d",&N);
	for(i=0;i<N;i++)scanf("%d",A+i);
	for(m=0,G[0]=N;G[m]>0;G[++m]=G[m-1]/2)
	{
		f(G[m]);
	}
	printf("%d\n",m);
	for(i=0;i<m;i++)printf("%d%c",G[m-i-1],i==m-1?'\n':' ');
	printf("%d\n",cnt);
	for(i=0;i<N;i++)printf("%d\n",A[i]);
	return 0;
}