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