Shell Sort is a generalization of [Insertion Sort](http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ALDS1_1_A) to arrange a list of $n$ elements $A$.                 1  insertionSort(A, n, g) 2      for i = g to n-1 3          v = A[i] 4          j = i - g 5          while j >= 0 && A[j] > v 6              A[j+g] = A[j] 7              j = j - g 8              cnt++ 9          A[j+g] = v 10 11 shellSort(A, n) 12     cnt = 0 13     m = ? 14     G[] = {?, ?,..., ?} 15     for i = 0 to m-1 16         insertionSort(A, n, G[i])   A function shellSort(A, n) performs a function insertionSort(A, n, g), which considers every $g$-th elements. Beginning with large values of $g$, it repeats the insertion sort with smaller $g$.  Your task is to complete the above program by filling ?. Write a program which reads an integer $n$ and a sequence $A$, and prints $m$, $G_i (i = 0, 1, ..., m − 1)$ in the pseudo code and the sequence $A$ in ascending order. The output of your program must meet the following requirements:    * $1 \leq m \leq 100$   * $0 \leq G_i \leq n$   * cnt does not exceed $\lceil n^{1.5}\rceil$
#coding:utf-8
#1_2_D
def insertionSort(A, n, g):
    global cnt
    for i in range(g, n):
        v = A[i]
        j = i - g
        while j >= 0 and A[j] > v:
            A[j+g] = A[j]
            j -= g
            cnt += 1
        A[j+g] = v

def shellSort(A, n):
    G = [1]
    while True:
        g = 3*G[0] + 1
        if g > n/9:
            break
        G.insert(0, g)
    m = len(G)
    for i in range(m):
        insertionSort(A, n, G[i])
    return [m, G]

n = int(input())
A = [int(input()) for i in range(n)]
cnt = 0
m, G = shellSort(A, n)
print(m)
print(" ".join(map(str, G)))
print(cnt)
print("\n".join(map(str, A)))
#coding:utf-8
#1_2_D
def insertionSort(A, n, g):
    global cnt
    for i in range(g, n):
        v = A[i]
        j = i - g
        while j >= 0 and A[j] > v:
            A[j+g] = A[j]
            j -= g
            cnt += 1
        A[j+g] = v

def shellSort(A, n):
    G = [1]
    while True:
        g = 3*G[0] + 1
        if g > n:
            break
        G.insert(0, g)
    m = len(G)
    for i in range(m):
        insertionSort(A, n, G[i])
    return [m, G]

n = int(input())
A = [int(input()) for i in range(n)]
cnt = 0
m, G = shellSort(A, n)
print(m)
print(" ".join(map(str, G)))
print(cnt)
print("\n".join(map(str, A)))