integer
gray_encode(integer n)
{
n ^ (n >> 1);
}
gray_decode(integer n)
integer p;
p = n;
while (n >>= 1) {
p ^= n;
p;