void sort(unsigned *a, int n)
{
static int b[100000005], c[0x10000];
int *c1 = c, *c2 = c1 + 0x8000;
for (int i = 0; i != n; ++i)
++c1[a[i] & 0x7FFF], ++c2[a[i] >> 15];
for (int i = 1; i != 0x8000; ++i)
c1[i] += c1[i - 1];
for (int i = 1; i != 0x8000; ++i)
c2[i] += c2[i - 1];
for (int i = n - 1; i >= 0; --i)
b[--c1[a[i] & 0x7FFF]] = a[i];
for (int i = n - 1; i >= 0; --i)
a[--c2[b[i] >> 15]] = b[i];
}