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