void sort(unsigned *a, int n)
{
unsigned b[100000005];
int s1[66000], s2[66000];
for(register int i = 0; i < n; i ++)
s1[a[i] & 65535] ++, s2[(a[i] >> 16) & 65535];
for(register int i = 1; i < 65536; i ++)
s1[i] += s1[i - 1];
for(register int i = 1; i < 65536; i ++)
s2[i] += s2[i - 1];
for(register int i = n - 1; ~ i; i --)
b[-- s1[a[i] & 65535]] = a[i];
for(register int i = n - 1; ~ i; i --)
a[-- s2[(b[i] >> 16) & 65535]] = b[i];
}