#include<stdio.h>

int A[1000000];

void insertionSort(int n, int g, int *cnt)
{
  int i, v, j;
  for(i = g; i < n; i++)
    {
      v = A[i];
      j = i - g;
      while(j > -1 && A[j] > v)
	{
	  A[j+g] = A[j];
	  j = j - g;
	  ++*cnt;
	}
      A[j+g] = v;
    }
}

void shellSort(int n)
{
  int cnt = 0, m, i;
  int G[100];
  for(i = 0; i < 100; i++)
    {
      if(i == 0)
	{
	  G[i] = n / 2 + 2;
	}
      else
	{
	  G[i] = G[i-1] / 2 - 1;
	}
      if(G[i] < 0)
	{
	  G[i-1] = 1;
	  G[i] = 0;
	  m = i;
	  break;
	}
    }
  for(i = 0; i < m; i++)
    {
      insertionSort(n, G[i], &cnt);
    }
  printf("%d\n", m);
  for(i = 0; i < m; i++)
    {
      if(i) printf(" ");
      printf("%d", G[i]);
    }
  printf("\n%d\n", cnt);
  for(i = 0; i < n; i++)
    {
      printf("%d\n", A[i]);
    }
}

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

