unsigned t[100000000],c[65536];
void sort(unsigned*a,int n)
{
for(register int i=0;i<n;++i)++c[a[i]&65535u];
for(register int i=1;i<65536;++i)c[i]+=c[i-1];
for(register int i=0;i<n;++i)t[--c[a[i]&65535u]]=a[i];
for(register int i=0;i<65536;++i)c[i]=0;
for(register int i=n;i--;)++c[a[i]>>16];
for(register int i=1;i<65536;++i)c[i]+=c[i-1];
for(register int i=n;i--;)a[--c[t[i]>>16]]=t[i];
}