int d,i,j,k;
for( d=1;d<=n/3;d=d*3+1 );
for( ;d>0; )
{
for( i=d;i<n;i++ )
{
k=a[i];
for( j=i-d;j>=0 && k>a[j];j-=d )
a[j+d]=a[j];
a[j+d]=k;
}
d=(d-1)/3;
}
for( d=1;d<=n/3;d=d*3+1 );
for( ;d>0; )
{
for( i=d;i<n;i++ )
{
k=a[i];
for( j=i-d;j>=0 && k>a[j];j-=d )
a[j+d]=a[j];
a[j+d]=k;
}
d=(d-1)/3;
}