/**************************************************************************************************
O[OOO@@OO@@O@@O@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@O^...=@@@@@@@@@@@@@@O[.........=@@@@@@@@@@@@
.....[OOOOOOOOOOOOO@@@@@@@@@@@OOOOOOOOO@@OOOOOOOOOOOOO[..../OOOO@@@@@@/\O/............OOOOOOOOOOOOO
^........,\OOOOOOOO@@@@@@@@@@OOOOOOOOOOO[[....................,[OOOO`.........`./O...=OOOOOOOOOOOOO
O`....].........,\O@@@@@@@@@@OOOOOO/........................................,O@@@^.../OOOOOOOOOOOOO
OO....O@@\`.........,\@@@@@@@OOO[..........................................=@@@@@`..,OOOOOOOOOOOOOO
@@\...=@@@@@\...........,\@@@`............................................*`=@@@/...OOOOOOOOOOOOOOO
@@@O...=@@@^,`..............................................................=/@@...=OOOOOOOOOOOOOOO
@@@@\...O@OO`.................................................................\^...OOOOOOOOOOOOOOOO
@@@@@\...\@`......................................................................OOOOOOOOOOOOOOOOO
@@@@@@\.../......................................................................=OOOOOOOOOOOOOOOOO
OOOOOOO.......................... ................................................\@@OOOOOOOOOOOOOO
@@@@@@@@@`................................=^...................^...................=@@@@@@@@@@@@@@@
@@@@@@@@@@...*.............................*...................*....................O@@@@@@@@@@@@@@
OOOOOOOOO.....**............. .......................................................@@@@@@@@@@@@@@
OOOOOOOOOOO`..****..........................*................................. ......=@@@@@@@@@@@@@
OOOOOOOOOOOOOO.*****,............................. ...................................O@@@@@@@@@@@@
@@@@@@@@@@@@O...***./..*..............................................................O@@@@@@@@@@@@
@@@@@@@@@@@@..........,..........,`........................................*......*..*=@@@@@@@@@@@@
@@@@@@@@@@@^.........*.,`......,@@@@@@@@@@@@@@@@@@@\]]]`...,]]@@@@@@@@@[\@@/@@@@@@O....O@@@@@@@@@@@
@@@@@@@@@@O.,`.......=.........,@@@@O[..,/OOOOO\....@@@@@@@@@@`.OOOOOOOO.,....=@@@O....\@@@@@@@@@@@
@@@@@@@@@@`=@^...................\@@[..=/[,\`..\.....@@`...@@@..,]....,/.......@@^[^...=@@@@@@@@@@@
@@@@@@@@@@=@@^....................@@....[\`..][.....@@`.....\@\....,[.........,@@....=.=@@@@@@@@@@@
@@@@@@@@@\@@O..........^..........,@^.............]@/........,@@`.............//....*...@@@@@@@@@@@
@@@@@@@@@@@@^.........*,.`..........@@\]]]..,]]/@/[............,\@@\]]`..,]]/@/.......*.\O@@@@@@@@@
@@@@@@@@@@@@.....**...=*,*..................................................*`........*.=@@@@@@@@@@
@@@@@@@@@@@O......*...,**=^...........................................................*..O@@@@@@@@@
OOOOOOOOOOO^......*...*`**,.. .........................................,.................OO@@@@@@@@
OOOOOOOOOOO^..........*^***,..  .....................................**..................OO@@@@@@@@
@@@@@@@OO@@..*.........^****\.........**\].......................]*.....................*OO@@@@@@@@
@@@@@@OO@@^......*.....=\***=`.........*=^**,[]`.............``.**...**............/`...=@@@@@@@@@@
@@@@@OO@@O^..,..**...*..=****o..........*=*********[,]...]o*.....*******.............../OO@@@@@@@@@
@@@@OO@@OO\..=/..**...*..o`**,^*........*=***************,/**...*******..........*..../@@@@@@@@@@@@
@@@OO@@@OO@^..O^.....@@@O/O],[\]]......../@@@\`*******]@@@@`*..***,//`]/@@@^....*...,/@@@@@@@@@@@@@
@@OO@@@OO@O\...O.....,@@@@@@@@@@@@`...@@/@@@@@@@`.**,@@@@@@@@@@@O]/@@@@@@@@.........=@@@@@@@@@@@@@@
**************************************************************************************************/
#include<cstdio>
#include<stack>
#include<queue>
#include<cmath>
#include<climits>
#include<cstring>
#include<cstdlib>
#include<cctype>
#include<algorithm>
#include<iostream>
#include<string>
#include<vector>
#define ll_INF 233333333333333
#define INF  0x3f3f3f3f
#define max(a, b) a > b ? a : b
#define min(a, b) a < b ? a : b
#define _test printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n")
using namespace std;
typedef long long ll;
typedef pair<int, int> P;
const int maxn = 1000005;
int arr[maxn];
ll cnt = 0;
void insertionSort(ll n, int g);
void shellSort(ll n);
int main(void) {
    ll n;
    cin >> n;
    for (int i = 0; i<n; i++)
        scanf("%d", &arr[i]);
    shellSort(n);
    cout << cnt << endl;
    for (int i = 0; i<n; i++)
        cout << arr[i] << endl;
    return 0;
}
void shellSort(ll n) {
	stack<int> G;
	ll m = 1;
	while(m <= n) {
		G.push(m);
		m = m*2;
	}
	cout << G.size() << endl;
    for (int i = 0; G.size(); ++i) {
        printf(G.top() == 1 ? "%d\n" : "%d ", G.top());
        insertionSort(n, G.top());
		G.pop();
    }
}
void insertionSort(ll n, int g) {
    for (int i = g; i<n; ++i){
        int temp = arr[i];  
        int j = i - g;
        while(j >= 0 && arr[j] > temp) {
            arr[j+g] = arr[j];
            j = j - g;
            cnt++;
        }
        arr[j+g] = temp;
    }
}


Measured memory_bytes: 7108