unsigned int c[257],c1[257],c2[257],c3[257],c4[257],c5[257],c6[257],c7[257],c0[257],tmp[200000000];
void sort(unsigned *a, int n) {
int dd=n-(n&7);
for(register int j=0;j<dd;j+=8)
{
++c0[((a[j ]>>(0))&255)];
++c1[((a[j+1]>>(0))&255)];
++c2[((a[j+2]>>(0))&255)];
++c3[((a[j+3]>>(0))&255)];
++c4[((a[j+4]>>(0))&255)];
++c5[((a[j+5]>>(0))&255)];
++c6[((a[j+6]>>(0))&255)];
++c7[((a[j+7]>>(0))&255)];
}
switch(n&7)
{
case 7:++c6[(a[dd+6]>>(0))&255];
case 6:++c5[(a[dd+5]>>(0))&255];
case 5:++c4[(a[dd+4]>>(0))&255];
case 4:++c3[(a[dd+3]>>(0))&255];
case 3:++c2[(a[dd+2]>>(0))&255];
case 2:++c1[(a[dd+1]>>(0))&255];
case 1:++c0[(a[dd ]>>(0))&255];
}
for(register int j=0;j<=255;++j)
{
c[j]+=c0[j];
c[j]+=c1[j];
c[j]+=c2[j];
c[j]+=c3[j];
c[j]+=c4[j];
c[j]+=c5[j];
c[j]+=c6[j];
c[j]+=c7[j];
c0[j]=0;
c1[j]=0;
c2[j]=0;
c3[j]=0;
c4[j]=0;
c5[j]=0;
c6[j]=0;
c7[j]=0;
}
for(register int j=1;j<=255;++j)c[j]+=c[j-1];
for(register int j=n-1;j>=0;--j)tmp[--c[(a[j]>>(0))&255]]=a[j];
for(register int j=0;j<=255;++j)c[j]=0;
for(register int j=0;j<n;++j)a[j]=tmp[j];
for(register int j=0;j<dd;j+=8)
{
++c0[((a[j ]>>(8))&255)];
++c1[((a[j+1]>>(8))&255)];
++c2[((a[j+2]>>(8))&255)];
++c3[((a[j+3]>>(8))&255)];
++c4[((a[j+4]>>(8))&255)];
++c5[((a[j+5]>>(8))&255)];
++c6[((a[j+6]>>(8))&255)];
++c7[((a[j+7]>>(8))&255)];
}
switch(n&7)
{
case 7:++c6[(a[dd+6]>>(8))&255];
case 6:++c5[(a[dd+5]>>(8))&255];
case 5:++c4[(a[dd+4]>>(8))&255];
case 4:++c3[(a[dd+3]>>(8))&255];
case 3:++c2[(a[dd+2]>>(8))&255];
case 2:++c1[(a[dd+1]>>(8))&255];
case 1:++c0[(a[dd ]>>(8))&255];
}
for(register int j=0;j<=255;++j)
{
c[j]+=c0[j];
c[j]+=c1[j];
c[j]+=c2[j];
c[j]+=c3[j];
c[j]+=c4[j];
c[j]+=c5[j];
c[j]+=c6[j];
c[j]+=c7[j];
c0[j]=0;
c1[j]=0;
c2[j]=0;
c3[j]=0;
c4[j]=0;
c5[j]=0;
c6[j]=0;
c7[j]=0;
}
for(register int j=1;j<=255;++j)c[j]+=c[j-1];
for(register int j=n-1;j>=0;--j)tmp[--c[(a[j]>>(8))&255]]=a[j];
for(register int j=0;j<=255;++j)c[j]=0;
for(register int j=0;j<n;++j)a[j]=tmp[j];
for(register int j=0;j<dd;j+=8)
{
++c0[((a[j ]>>(16))&255)];
++c1[((a[j+1]>>(16))&255)];
++c2[((a[j+2]>>(16))&255)];
++c3[((a[j+3]>>(16))&255)];
++c4[((a[j+4]>>(16))&255)];
++c5[((a[j+5]>>(16))&255)];
++c6[((a[j+6]>>(16))&255)];
++c7[((a[j+7]>>(16))&255)];
}
switch(n&7)
{
case 7:++c6[(a[dd+6]>>(16))&255];
case 6:++c5[(a[dd+5]>>(16))&255];
case 5:++c4[(a[dd+4]>>(16))&255];
case 4:++c3[(a[dd+3]>>(16))&255];
case 3:++c2[(a[dd+2]>>(16))&255];
case 2:++c1[(a[dd+1]>>(16))&255];
case 1:++c0[(a[dd ]>>(16))&255];
}
for(register int j=0;j<=255;++j)
{
c[j]+=c0[j];
c[j]+=c1[j];
c[j]+=c2[j];
c[j]+=c3[j];
c[j]+=c4[j];
c[j]+=c5[j];
c[j]+=c6[j];
c[j]+=c7[j];
c0[j]=0;
c1[j]=0;
c2[j]=0;
c3[j]=0;
c4[j]=0;
c5[j]=0;
c6[j]=0;
c7[j]=0;
}
for(register int j=1;j<=255;++j)c[j]+=c[j-1];
for(register int j=n-1;j>=0;--j)tmp[--c[(a[j]>>(16))&255]]=a[j];
for(register int j=0;j<=255;++j)c[j]=0;
for(register int j=0;j<n;++j)a[j]=tmp[j];
for(register int j=0;j<dd;j+=8)
{
++c0[((a[j ]>>(24))&255)];
++c1[((a[j+1]>>(24))&255)];
++c2[((a[j+2]>>(24))&255)];
++c3[((a[j+3]>>(24))&255)];
++c4[((a[j+4]>>(24))&255)];
++c5[((a[j+5]>>(24))&255)];
++c6[((a[j+6]>>(24))&255)];
++c7[((a[j+7]>>(24))&255)];
}
switch(n&7)
{
case 7:++c6[(a[dd+6]>>(24))&255];
case 6:++c5[(a[dd+5]>>(24))&255];
case 5:++c4[(a[dd+4]>>(24))&255];
case 4:++c3[(a[dd+3]>>(24))&255];
case 3:++c2[(a[dd+2]>>(24))&255];
case 2:++c1[(a[dd+1]>>(24))&255];
case 1:++c0[(a[dd ]>>(24))&255];
}
for(register int j=0;j<=255;++j)
{
c[j]+=c0[j];
c[j]+=c1[j];
c[j]+=c2[j];
c[j]+=c3[j];
c[j]+=c4[j];
c[j]+=c5[j];
c[j]+=c6[j];
c[j]+=c7[j];
c0[j]=0;
c1[j]=0;
c2[j]=0;
c3[j]=0;
c4[j]=0;
c5[j]=0;
c6[j]=0;
c7[j]=0;
}
for(register int j=1;j<=255;++j)c[j]+=c[j-1];
for(register int j=n-1;j>=0;--j)tmp[--c[(a[j]>>(24))&255]]=a[j];
for(register int j=0;j<=255;++j)c[j]=0;
for(register int j=0;j<n;++j)a[j]=tmp[j];
}