S = Map() seen(v) = mapisdefined(S, v) see(v) = mapput(S, v, 0) { mm = [0]; x = 0; \\ forbidden values (as a mask) v0 = 1; \\ least possible value for (n = 1, #a = vector(10 000), for (v = v0, oo, if (bittest(x, v), \\ forbidden value next; ); ok = 1; m = 0; \\ mask of previous terms nb = 0; \\ number of times v occurred before forstep (k=n-1, 1, -1, if (a[k]==v, if (nb && m==mm[nb], \\ v is no longer possible x += 2^v; while (bittest(x, v0), v0++; ); ok = 0; break; ); if (seen(m), ok = 0; break; ); if (#mm < nb++, mm = concat(mm, vector(#mm)); ); mm[nb] = m; ); m = bitor(m, 2^a[k]); ); if (ok, for (k = 1, nb, see(mm[k]); ); print (n " " a[n] = v); break; ); ); ); } quit