a(n,base=2) = { my (b=digits(n,base), visited=Set(), offset=1); for (k=1, oo, my (v=0); for (w=1, oo, v = base*v + b[offset]; offset = if (offset==#b, 1, offset+1); if (!setsearch(visited, v) && b[offset], if (v==n, return (k); ); visited=setunion(visited, Set(v)); break; ); ); ); } for (n=1, 2^13, print (n " " a(n))) quit