row(n) = { my (r = [sign(n)], b = binary(n)); for (k = 2, #b, r = [3*v+b[k]|v<-r]; if (b[k], r = concat(r, [v-2|v<-r]); ); ); Set(r); } { M = 9; a = vector((3^M-1)/2); m = 0; for (n = 1, 2^M-1, r = row(n); for (k = 1, #r, a[r[k]] = m++; ); ); print ("0 0"); for (n = 1, #a, print (n " " a[n]); ); } quit