allocate mem(2^30) base = 10 cat(x,y) = x*base^#digits(y,base)+y a = [0] n = 0 \\ numbers with only 1's and 2's ot = setunion( vector(m=2^15-1, n, b=binary(n); fromdigits(apply(d -> 1+d, b))), \ Set(vector(m, n, b=binary(n); fromdigits(apply(d -> 2-d, b))))); nb = vector(#ot) { for (v=1, #nb, if (v<=2 || nb[v]==1, print (n++ " " a[n]=ot[v]); if (n==#a, a = concat(a, vector(#a)); ); for (i=1, n-1, an = setsearch(ot, cat(a[i],ot[v])); if (an, nb[an]++, break ); ); for (i=1, n-1, na = setsearch(ot, cat(ot[v],a[i])); if (na, nb[na]++, break ); ); ); ); } quit