void sort(unsigned *a, int n) {
const int maxn = 1 << 26;
unsigned long long *A = new unsigned long long[maxn];
for (int i = 0; i < n; ++i) A[a[i] >> 6] |= 1ull << (a[i] & 63ull);
int cnt = 0;
for(unsigned i = 0; i < maxn; ++i)
{
while(A[i])
{
int t = __builtin_ctzll(A[i]);
a[cnt++] = (i << 6) + t;
A[i] ^= (1ull << t);
}
}
}