seen = [] unseen = [] index = [-1] other(n,p) = { if (n==1, return (1); ); if (#seen < p, seen = concat(seen, 0); unseen = concat(unseen, 1); index = concat(index, -1); ); for (v=unseen[p], oo, if (!bit test(seen[p], v) && (index[v]==-1 || index[v]%2!=n%2), seen[p] += 2^v; while (bit test(seen[p], unseen[p]), unseen[p]++; ); index[v] = n; return (v); ); ); } for (n=1, 10 000, a = other(n, a); print (n " "a)) quit