// ShellSort
#include <stdio.h>
FILE *f=fopen("algsort.in", "r"), *g=fopen("algsort.out", "w");
long a[500001], n;
void citeste(void)
{
fscanf(f, "%ld", &n);
for(long i=0;i<n;i++)
fscanf(f, "%ld", &a[i]);
fclose(f);
}
void shellsort ()
{
long i, j, k, h, v;
long cols[] = {1391376, 463792, 198768, 86961, 33936, 13776, 4592, 1968, 861, 336, 112, 48, 21, 7, 3, 1};
for (k=0; k<16; k++)
{
h=cols[k];
for (i=h; i<n; i++)
{
v=a[i];
j=i;
while (j>=h && a[j-h]>v)
{
a[j]=a[j-h];
j=j-h;
}
a[j]=v;
}
}
}
void tipareste(void)
{
for(long i=0;i<n;i++)
fprintf(g, "%ld ", a[i]);
fclose(g);
}
int main()
{
citeste();
shellsort();
tipareste();
return 0;
}