unsigned b[100000005], x[0x10000],y[0x10000];
void sort(unsigned *a, int n){
for (int i = 0; i != n; ++i)
++x[a[i] & 0xFFFF], ++y[a[i] >> 16];
for (int i = 1; i != 0x10000; ++i)
x[i] += x[i - 1],y[i] += y[i - 1];
for (int i = n - 1; i >= 0; --i)
b[--x[a[i] & 0xFFFF]] = a[i];
for (int i = n - 1; i >= 0; --i)
a[--y[b[i] >> 16]] = b[i];
}